User Tools

Site Tools


userpages:hermannk:wio_platform-de

WIO Bahnsteig

Userpages - Hermann (hermannk)

hier geht es direkt zum Rocrail-Arbeitsbereich-Download
die normale Ansicht die Ansicht von unten Rocrail-Plan
Display und fünf LEDs Verdrahtung, WIO ESP8266 Textfelder, Ausgänge

Vorwort 1:
Damit wurde diese Dokumentation erstellt: Stand 14.02.2022

Bereich Details Bemerkung
Steuerung Rocrail Version 2.1.2067+ (macOS "Catalina" on Intel CPU)
Computer MacBook Pro (Intel) macOS 12.1 (Monterey)
Arduino Arduino Software Version 1.8.13
WIO WIO Firmware Version 489
WIO ESP8266 D1 Mini NodeMcu mit ESP8266-12F WLAN Modul von AZ-Delivery
OLED Anzeige 0,91 Zoll OLED I2C Display 128 x 32 Pixel von AZ-Delivery
RGB LEDs Ws2812b LED Streifen, 5m 300 LEDs von AZ-Delivery
Bahnsteig Modell H0 Bahnsteig Sulzberg; 38 mm Breite Kibri Artikel-Nr. 39556
WIO Knoten-ID 39 — bitte an die eigene Umgebung anpassen
WIO I2C Display EPS8266 Pin D1=SCL, D2=SDA
WIO Ws2812b LED EPS8266 Pin D8=Daten
WIO WIO-Daten (IOscripts, LEDScripts) bitte vor der ersten Anwendung auf den WIO laden

Vorwort 2:
- die Nutzung dieser Lösung erfolgt auf eigenes Risiko;
- regelmäßige Datensicherungen des Rocrail-Arbeitsbereichs werden empfohlen;

Aufgabenstellung

Ein H0-Bahnsteig-Bausatz soll mit einer Bahnsteig-Anzeige und LED-Beleuchtung unter der Überdachung aufgepeppt werden.

Auf dem Foto sind zwei unterschiedlich platzierte Displays zu sehen mit Analoguhr und Textinhalt.

Lösung-Details

a) Bahnsteig-Anzeige
b) Bahnsteig-Beleuchtung

a) Bahnsteig-Anzeige

Das verwendete 0,91 Zoll OLED I2C Display hat 128 x 32 Pixel. Es ist mit 38 mm Länge so lang wie ein schmaler H0-Bahnsteig breit ist. Da das Display vorsichtig um 2 mm gekürzt werden kann, passt es in diesem Beispiel zwei zum Bahnsteig (dauerhaft) platziert zu werden.

Das Display kann mit einer Höhe von 32 Pixeln vier Zeilen Text darstellen. Bei zwei Bahnsteig-Gleisen soll dann für jedes Gleis eine jeweils zweizeilige Anzeige von Rocrail-Lok und Rocrail-Zug angezeigt werden, wenn der Bahnsteig-Block besetzt wird. Das kann man über Rocrail-Aktionen in einem Block steuern. Hier werden die Stati "enter", "occupied" und "free" angewendet, um eine Aktion auszulösen.

Im Rocrail-Plan wird das "Gleis 1" als Block "bk02" und das "Gleis 2" wird als Block "bk03" dargestellt.

So sorgen die im Kreis fahrenden Lokomotiven für einen ständigen Wechsel auf der Display-Anzeige.

a1) Block-Status

Der Status "free", "enter" und "occupied" sollen ausgewertet werden, um eine Aktion im Block auszulösen:

Status Beschreibung
free eine Lok verlässt irgendwie den Block; die Anzeige wird gelöscht;
enter eine Lok fährt in den Block; Lok und Zug werden angezeigt;
occupied eine Lok kommt irgendwie in den Block; Lok und Zug werden angezeigt;
sonstige werden als nicht relevant eingestuft

a2) Display-Puffer-Größe

Der Schriftzeichen-Puffer für das Display kann 120 Schriftzeichen speichern; darin ist der darzustellende Textinhalt enthalten und es sind sämtliche benötigte Steuerzeichen enthalten.
Die Textinhalte werden in Textfeldern gespeichert, die eine "Schnittstelle" zum WIO konfiguriert haben und so bei jeder Aktualisierung des Textfeldes den Inhalt des Textfeldes an den WIO übertragen.
Für vier Zeilen Text wird der gesamte darzustellende Text in zwei Teile aufgeteilt, weil die Grenze von 120 Schriftzeichen sonst leicht überschritten wird:

Schnittstelle
Textfeld Kennung Knoten-ID Adresse Anzeige Beschreibung
tx_bahnsteiganzeige1 WIO 39 60 1 die oberen zwei Zeilen Text für Block bk02; Gleis 1
tx_bahnsteiganzeige2 WIO 39 60 1 die unteren zwei Zeilen Text für Block bk03; Gleis 2

a3) Aktionen definieren

Um auf dem Display etwas anzuzeigen, wird ein Rocrail-Textfeld mit dem gewünschten Inhalt gefüllt; da müssen alle notwendigen Befehle und der gewünschte Text enthalten sein. Das Textfeld hat als Schnittstelle den WIO konfiguriert und sendet bei jedem Update den Textfeldinhalt an den WIO. Der WIO gibt den Inhalt weiter an das Display.
Hier werden jetzt vier Aktionen definiert, die den Inhalt der Textfelder aktualisieren.
Noch eine Bemerkung vorne weg:
Einzelne Schriftzeichen auf der Anzeige lassen sich am Einfachsten durch Löschen der gesamten Anzeige löschen. Da dann jeweils ein Textpuffer verloren ist, wird er aktualisiert ("…recall"). Das Löschen erfolgt durch den Befehl "{E}", der am Anfang von tx_bahnsteiganzeige1 abgelegt ist. Die Ausgabe des gesamten Textpuffers erfolgt mit dem Befehl "{P}", der am Ende von tx_bahnsteiganzeige2 abgelegt ist.

Aktion Type Kennung Befehl Parameter Bemerkung
ac_bahnsteiganzeige1_update Text tx_bahnsteiganzeige1 update {E}{L0}{X0}Gleis 1{X34}%lcid% {L1}{X34}%operatorid% Lok-/Zug-Kennung aktualisieren
ac_bahnsteiganzeige1_recall Text tx_bahnsteiganzeige1 update $tx_bahnsteiganzeige1 der eigene Inhalt wird aktualisiert
ac_bahnsteiganzeige2_update Text tx_bahnsteiganzeige2 update {L2}{X0}Gleis 2{X34}%lcid% {L3}{X34}%operatorid% {P} Lok-/Zug-Kennung aktualisieren
ac_bahnsteiganzeige2_recall Text tx_bahnsteiganzeige2 update $tx_bahnsteiganzeige2 der eigene Inhalt wird aktualisiert

Hinweis: falls keine Lok oder kein Zug vorhanden ist, werden die Werte für "%lcid%" und "%operatorid%" von Rocrail nicht gefüllt - wunderbar.
Die Beschreibung der Befehle für das Display findet man unter Display SSD1306/SH1106.

a4) Aktionen anwenden

Für den Block "bk02" werden die folgenden Aktionen angewendet; die Reihenfolge ist entscheidend!

Aktionen im Block bk02 Status Beschreibung
ac_bahnsteiganzeige1_update free eine Lok verlässt irgendwie den Block; die Anzeige wird gelöscht;
ac_bahnsteiganzeige1_update enter eine Lok fährt in den Block; Lok und Zug werden angezeigt;
ac_bahnsteiganzeige1_update occupied eine Lok kommt irgendwie in den Block; Lok und Zug werden angezeigt;
ac_bahnsteiganzeige2_recall free tx_bahnsteiganzeige2 aktualisieren
ac_bahnsteiganzeige2_recall enter tx_bahnsteiganzeige2 aktualisieren
ac_bahnsteiganzeige2_recall occupied tx_bahnsteiganzeige2 aktualisieren

Für den Block "bk03" werden die folgenden Aktionen angewendet; auch hier ist die Reihenfolge entscheidend!

Aktionen im Block bk03 Status Beschreibung
ac_bahnsteiganzeige1_recall free tx_bahnsteiganzeige1 aktualisieren
ac_bahnsteiganzeige1_recall enter tx_bahnsteiganzeige1 aktualisieren
ac_bahnsteiganzeige1_recall occupied tx_bahnsteiganzeige1 aktualisieren
ac_bahnsteiganzeige2_update free eine Lok verlässt irgendwie den Block; die Anzeige wird gelöscht;
ac_bahnsteiganzeige2_update enter eine Lok fährt in den Block; Lok und Zug werden angezeigt;
ac_bahnsteiganzeige2_update occupied eine Lok kommt irgendwie in den Block; Lok und Zug werden angezeigt;

a5) Ausblick

Auf der Basis dieser Lösung dürfen gerne eigene Ideen umgesetzt werden. Als Stichworte seien hier genannt: Fahrpläne, Wagenreihung, (Verspätungen gibt es im Modell normal nicht), Sonderzeichen als Bitmaps, Analoguhr, Digitaluhr, Besucherbegrüßungstext, Sondermeldungen, …


b) Bahnsteig-Beleuchtung

Es sollen verschiedene Lösungs-Techniken zur Ansteuerung von LEDs aufgezeigt werden.
b1) Mit einem Rocrail-Ausgang lässt sich eine LED ansteuern.
b2) Mit Rocrail-IOscripts können mit einem Rocrail-Ausgang mehrere LEDs angesteuert werden.
b3) Mit Rocrail-LEDScripts können dynamische Abläufe mit LEDs realisiert werden.

In dem Arbeitsbereich gibt es zahlreiche Ausgänge, mit denen die hier vorgestellten Beispiele ausprobiert werden können.

b1) 5 LEDs und 5 Rocrail-Ausgänge

Jede LED kann mit je einem Rocrail-Ausgang ein- und aus-geschaltet werden. Der Farbton und die Helligkeit sind fest eingestellt. Hier soll ein "warmweißes" Licht verwendet werden, das etwa den RGB-Werten R=100%, G=80%, B=10% entspricht - also R=255, G=204, B=25. Die Helligkeit wird moderat eingestellt (hier mit Sättigung=063); das spart einerseits Energie und stellt andererseits sicher, nicht geblendet zu werden.
Hinweis: LEDs können sehr hell strahlen und die Augen schädigen! Nehmt Rücksicht auf euch und eure Besucher!

Allgemein Schnittstelle Farbe
Kennung Knoten-ID Adresse Wert Verzögerung Option Typ RGB Bemerkung
co_b1_1 39 1 127 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
255 204 025 0 0 063 warmweiß:
co_b1_2 39 2 127 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
255 204 025 0 0 063 warmweiß:
co_b1_3 39 3 127 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
255 204 025 0 0 063 warmweiß:
co_b1_4 39 4 127 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
255 204 025 0 0 063 warmweiß:
co_b1_5 39 5 127 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
255 204 025 0 0 063 warmweiß:

b2) 5 LEDs, ein IOscript und ein Rocrail-Ausgang

Alle 5 LEDs sollen mit einem Rocrail-Ausgang ein- und aus-geschaltet werden; das kann mit einem IOscript erreicht werden. Der Konfigurations-Aufwand wird damit reduziert.

Allgemein Schnittstelle Farbe
Kennung Knoten-ID Adresse Wert Verzögerung Option Typ RGB Bemerkung
co_b2_1 39 15 127 0 Macro rot grün blau weiß_1 weiß_2 Sättigung
0 0 0 0 0 255 alles nicht relevant

Der Name des IOscripts ist "000_14_001.io"; Achtung: die Nummer im Namen ist um 1 kleiner als die Adresse vom Rocrail-Ausgang!
Der Inhalt des IOscripts für eingeschaltetes warmweißes Licht kann dann so aussehen:

#Bahnsteig mit 5 LEDs \\
#alle an \\
#warmweiss = 100% Rot, 80% Grün, 10% Blau \\
#p o t sla bri b de red gre blu \\
00 1 P 000 063 0 00 255 204 025 \\
01 1 P 000 063 0 00 255 204 025 \\
02 1 P 000 063 0 00 255 204 025 \\
03 1 P 000 063 0 00 255 204 025 \\
04 1 P 000 063 0 00 255 204 025 \\

Weitere Details zu IOscripts stehen im Wiki unter IOscript

Der Name des IOscripts für ausgeschaltetes Licht ist "000_14_000.io".
Der Inhalt des IOscripts für ausgeschaltetes warmweißes Licht kann dann so aussehen (die Spalte "o" hat den Wert 0):

#Bahnsteig mit 5 LEDs \\
#alle aus \\
#warmweiss = 100% Rot, 80% Grün, 10% Blau \\
#p o t sla bri b de red gre blu \\
00 0 P 000 063 0 00 255 204 025 \\
01 0 P 000 063 0 00 255 204 025 \\
02 0 P 000 063 0 00 255 204 025 \\
03 0 P 000 063 0 00 255 204 025 \\
04 0 P 000 063 0 00 255 204 025 \\

Beide Dateien müssen in den WIO geladen werden.

b3) 5 LEDs, ein LEDScript und ein Rocrail-Ausgang

In diesem Rocrail-Plan werden fünf LEDScript-Beispiele vorgestellt. Die Ideen und Inhalte zu den LEDScripts stammen zum Teil aus dem Rocrail-Forum und wurden an die hier dargestellte Umgebung angepasst.
Jedes LEDScript wird von je einem Rocrail-Ausgang aktiviert.

Adresse Dateiname Bedeutung
121 ls_bahnsteig_21.led alle 5 LEDs werden mit warmweißem Licht ein-/ausgeschalten
122 ls_lauflicht_22.led ein Lauflicht wie bei einer Baustelle
123 ls_einblenden_23.led alle fünf LEDs werden langsam eingeblendet
124 ls_vielfallt_24.led alle LEDs ändern zufällig ihren Farbton und ihre Helligkeit
125 ls_neonroehre_25.led die mittlere LED simuliert eine defekte Neonröhre

Die Dateinamen beginnen alle mit "ls_", damit die LEDScripts alphabetisch sortiert zusammen stehen.
Weitere Details zu LEDScripts stehen im Wiki unter LEDScript
Mit einem Rocrail-Ausgang kann man ein LEDScript aktivieren (EIN) und de-aktivieren (AUS).
Alle LEDScripts sind in der Download-Datei enthalten.

b3.1) Bahnsteig-Beleuchtung ein/aus

Alle 5 LEDs sollen mit einem Rocrail-Ausgang ein- und aus-geschaltet werden; das kann mit einem LEDScript erreicht werden. Der Konfigurations-Aufwand wird damit reduziert.

Allgemein Schnittstelle Farbe
Kennung Knoten-ID Adresse Wert Verzögerung Option Typ RGB Bemerkung
co_b3_1 39 121 126 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
Datei: ls_bahnsteig_21.led 253 0 0 0 0 255 alles nicht relevant

Hinweis: wenn man unter Schnittstelle / Wert = 126 einträgt und unter Farbe / RGB / rot = 253 einträgt, dann sieht man im Rocrail-Plan für den Ausgang einen optischen Unterschied zwischen EIN und AUS; sonst wäre er immer schwarz.
Die Werte 126 und 253 sind hier willkürlich gewählt; es sollte immer ein heller sichtbarer Farbton sein.
Der Name des LEDScripts ist "ls_bahnsteig_21.led".
Der Inhalt des LEDScripts für ausgeschaltetes warmweißes Licht ist im LEDScript bereits enthalten.
Der Inhalt des LEDScripts für eingeschaltetes warmweißes Licht kann dann so aussehen:

#Skript für Bahnsteig mit 5 WS2812
s0 //Skript läuft immer
#warmweiss = 100% Rot, 80% Grün, 10% Blau
l0 //LED 1. definieren beginnend bei 0 = 1.te LED
c5 //x folgende LEDs
r255 //feste Vorgabe für Rot
g204 //feste Vorgabe für Grün
b25 //feste Vorgabe für blau
i063 //brightness, Helligkeit
#LED-off
D0 //Erste LED definieren
T5 //inkl. der 5 folgenden
e

Weitere Details zu LEDScripts stehen im Wiki unter LEDScript

b3.2) ein Lauflicht wie bei einer Baustelle

Allgemein Schnittstelle Farbe
Kennung Knoten-ID Adresse Wert Verzögerung Option Typ RGB Bemerkung
co_b3_2 39 122 126 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
Datei: ls_lauflicht_22.led 253 0 0 0 0 255 alles nicht relevant

Hinweise: siehe b3.1)

# Lauflicht
s0 			//Skript läuft endlos
l0			//LED definieren beginnend bei 0 = 1.te LED
c1			//nur 1 LED keine folgenden
r255
g204
b025
i017		//brightness, Helligkeit
p005		//bei Großschreibung wird mit Zufallswerten gearbeitet
# LED 
...
#LED-off
D0 //Erste LED definieren
T5 //inkl. der 5 folgenden
e


b3.3) alle fünf LEDs werden langsam eingeblendet

Allgemein Schnittstelle Farbe
Kennung Knoten-ID Adresse Wert Verzögerung Option Typ RGB Bemerkung
co_b3_3 39 123 126 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
Datei: ls_einblenden_23.led 253 0 0 0 0 255 alles nicht relevant

Hinweise: siehe b3.1)

# einblenden
s0 			//Skript läuft endlos
l0			//LED definieren beginnend bei 0 = 1.te LED
c5			//alle 5 LEDs
r255
g204
b025
>063		//brightness, Helligkeit
p005
#LED-off
D0 //Erste LED definieren
T5 //inkl. der 5 folgenden
e


b3.4) alle LEDs ändern zufällig ihren Farbton und ihre Helligkeit

Allgemein Schnittstelle Farbe
Kennung Knoten-ID Adresse Wert Verzögerung Option Typ RGB Bemerkung
co_b3_4 39 124 126 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
Datei: ls_vielfallt_24.led 253 0 0 0 0 255 alles nicht relevant

Hinweise: siehe b3.1)

# vielfallt
s0 			//Skript läuft endlos
l0			//LED definieren beginnend bei 0 = 1.te LED
c1			//nur 1 LED keine folgenden
R51455	// range= 200*256 + 255 = 51455
G38604	// range= 150*256 + 204 = 38604
B00281	// range= 001*256 + 025 = 00281
I017		//brightness, Helligkeit
# LED
...
#LED-off
D0 //Erste LED definieren
T5 //inkl. der 5 folgenden
e


b3.5) die mittlere LED simuliert eine defekte Neonröhre

Allgemein Schnittstelle Farbe
Kennung Knoten-ID Adresse Wert Verzögerung Option Typ RGB Bemerkung
co_b3_5 39 125 126 0 Farbe LED rot grün blau weiß_1 weiß_2 Sättigung
Datei: ls_neonroehre_25.led 253 0 0 0 0 255 alles nicht relevant

Hinweise: siehe b3.1)

# Defekte Neonröhre
s0 		//Skript läuft endlos
l0		// zuerst sind alle an
c5	
r255
g204
b25
i017
p50
#kurze Leuchtzeit (aufblinken) max 50 ms
...
#LED-reset, LED lässt sich dann über den Ausgang ausschalten.
d0
t5
e


c) Rocrail-Arbeitsbereich

In dem Download-Arbeitsbereich "WIO_Bahnsteig.zip" sind folgende Dateien enthalten:

Datei Bedeutung
plan.xml die Rocrail-Plan-Datei
rocrail.ini die Rocrail-Initialisierungs-Datei mit der Definition für die WIO-Zentrale
WIO_data ein Unterordner mit den Scripts für den WIO
000_14_000.io IOscript zum Ausschalten der LEDs
000_14_001.io IOscript zum Einschalten der LEDs
ls_bahnsteig_21.led alle 5 LEDs werden mit warmweißem Licht ein-/ausgeschalten
ls_lauflicht_22.led ein Lauflicht wie bei einer Baustelle
ls_einblenden_23.led alle fünf LEDs werden langsam eingeblendet
ls_vielfallt_24.led alle LEDs ändern zufällig ihren Farbton und ihre Helligkeit
ls_neonroehre_25.led die mittlere LED simuliert eine defekte Neonröhre

zurück zu den Lösung-Details.

d) anwenden

Ein kurzer Überblick, was für die Anwendung zu erledigen ist:

was erledigen
Hardware beschaffen und zusammenbauen
Arduino IDE Arduino Entwicklungsumgebung herunterladen und installieren
WIO Firmware herunterladen, siehe https://wiki.rocrail.net/doku.php?id=arduino:wio-en
WIO Datei USERCNF.h an die eigenen Bedürfnisse anpassen (WIO-ID, WLAN, …)
WIO Firmware übersetzen und auf den WIO laden
WIO Einstellung/Wartung z.B. die Display-Größe anpassen
WIO_data alle IOscripts und LEDScript auf den WIO laden
Rocrail starten mit dem Arbeitsbereich "WIO_Bahnsteig"
Rocrail testen
Rocrail nach einer Datensicherung eigene Wünsche umsetzen

e) Verdrahtung

WIO - Anschluss an I2C-OLED-Displays und WS2812B RGB-LEDs (FastLED, NeoPixel):
wio_esp8266_20220325.pdf
Ohne Gewähr.

Viel Spass und gutes Gelingen.

userpages/hermannk/wio_platform-de.txt · Last modified: 2022/03/25 09:50 by hermannk