Aus Raspberry Pi Geek 06/2017

Mehr serielle Schnittstellen für den ESP8266 (Seite 3)

In der Funktion setup() in Zeile 63 legen Sie die Geschwindigkeiten der zwei seriellen Schnittstellen fest. Ja, Sie haben richtig gelesen: Der Stromzähler überträgt nur 300 Zeichen in der Sekunde – nicht gerade schnell, aber für unseren Zweck ausreichend. Des Weiteren startet die Funktion die WLAN-Verbindung und den Webserver. Die Funktion loop() (Zeile 83) ruft die Methode handleClient() des Server-Objekts auf, um den Server zu betreiben.

Die Funktion handleRoot() ab Zeile 16 sendet die Steuersequenz an den Stromzähler. Der erwartet 7 Datenbits, eine gerade Parität und ein Stoppbit. Hier tricksen wir etwas: Anstatt das Parity-Bit nachträglich hinter den Datenbits zu übertragen, senden wir es als erstes Bit im Byte. Der UART im Zähler errechnet die Parität aus allen Bits, die ankommen. Da es sich nur um wenige Bytes handelt, die Sie anpassen müssen, sind die Parity-Bits in die zu übertragenden Bytes der Steuersequenz eingefügt.

Das erklärt die Diskrepanz zwischen ASCII-Zeichen und dazugehörigen hexadezimalen Werten in den Zeilen mit irSerial.write(). Als Beispiel: Aus 0x0D (CR) wird 0x8D, damit die Parität wieder passt. Der Wert 0x0A (LF) hat schon eine gerade Parität, Sie brauchen also das höchste Bit im Byte nicht zu setzen.

Nach dem Senden der ersten Steuersequenz gibt der Rechner dem Zähler eine Sekunde Zeit für die Antwort (Zeile 30). Danach liest er den Buffer aus und sendet ihn zum Debugging an die erste serielle Schnittstelle, die mit dem Rechner verbunden ist. Beim Auslesen des Puffers löscht das Programm das vom Zähler übertragene Parity-Bit mit der Anweisung in &= 0x7F; aus dem Byte heraus (Zeile 34).

Was Sie jetzt über die Debug-Schnittstelle angezeigt bekommen, ist die Kennung des Stromzählers, aus der Sie unter anderem dessen maximale Schnittstellengeschwindigkeit ersehen.

Mit der zweiten Steuersequenz ab Zeile 39 veranlasst die Software den Stromzähler, die gemessenen Werte zu übertragen. Hier finden sich ebenfalls die für das Parity-Bit nötigen Anpassungen im Code. Diesmal ist die Verzögerung etwas länger, bevor das Programm den Buffer ausliest: Es laufen mehr Daten über die Leitung. Letztendlich schreibt die Software diese in die Zeichenkette message und übergibt diese an die Methode send() des Server-Objekts (Zeile 60).

Vergessen Sie nicht, dass dieses Programm als Beispiel für die Funktionsweise der in Software implementierten seriellen Schnittstelle dient. Es arbeitet so nur mit dem Stromzähler E350 von Landis & Gyr zusammen. Zudem ließe sich die rudimentäre Ausgabe mit wenigen Handgriffen optisch ansprechender oder maschinenlesbar gestalten. Für Letzteres böte sich die Ausgabe in JSON an, sodass eine App die Daten direkt lesen könnte.

Fazit

Eine in Software implementierte serielle Schnittstelle erweist sich für viele Fälle als eine gute Alternative zum echten Hardware-UART. Sie lässt sich leicht konfigurieren und kommt auch mit ungewöhnlicheren Protokollen zurecht, wie dem 7E1 unseres Stromzählers. Der wohl größte Vorteil gegenüber einem Hardware-UART: Die Kosten beschränken sich auf RAM für den Buffer und CPU-Leistung zum Verwalten.

Im Bastler-Bereich gibt es noch eine Menge Geräte, die serielle Schnittstellen mitbringen. Daher lohnt es sich, einen Nachmittag zu investieren und mit der vorgestellten Bibliothek zu arbeiten. Sie öffnet die Tür zu vielen weiteren interessanten Projekten, wie zum Beispiel Volkszähler.org, das interessante Ansätze zur Heimautomation bietet. 

Der Autor

Martin Mohr hat die komplette Entwicklung der modernen Computertechnik live miterlebt. Bereits in früher Jugend entwickelte er eine Vorliebe für alles, was blinkt. Mit dem RasPi erwachte seine alte Liebe zur Elektronik wieder.

Glossar

Parity-Bit

Das Paritätsbit zeigt in einer Folge von Bits an, ob die Anzahl der mit 1 belegten Bits gerade oder ungerade ausfällt. Dieser Mechanismus dient dazu, die Integrität einer Nachricht zu kontrollieren.

Infos

  1. ESP8266-Workshop, Teil 1: Martin Mohr, “Starkes Team”, RPG 02/2016, S. 78, http://www.raspi-geek.de/35195
  2. Volkszähler.org: http://volkszaehler.org
  3. Wandlermodul OKLT1W12NC: https://www.reichelt.de/?ARTICLE=140737
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben