Startseite>Mehr serielle Schnittstellen für den ESP8266
Aus Raspberry Pi Geek 06/2017

Mehr serielle Schnittstellen für den ESP8266

© Mearicon, 123RF

Alles in einer Reihe

Martin Mohr

Wer mehr als eine serielle Schnittstelle am Mikrocontroller braucht, dem hilft eine in Software implementierte Lösung auf elegante Weise weiter.

Der ESP8266 verfügt über eine serielle Schnittstelle. Seit dem ersten Teil dieser Reihe [1] laden Sie über diese die Programme in den Mikrocontroller hoch. Vermutlich haben Sie sich mehr als einmal die Debug-Ausgaben der Programme über diese Schnittstelle angesehen.

Wollen Sie ein weiteres Gerät mit serieller Schnittstelle an den ESP8266 anschließen, könnten Sie das vorhandene Interface des ESP8266 abwechselnd zum Hochladen und für das zusätzliche Gerät nutzen. Das klappt zwar, ist aber umständlich. Zudem verlieren Sie damit die Möglichkeit, die Debug-Informationen einzusehen. Hier muss ein anderer Ansatz her.

Alles seriell

Vor dem Aufkommen von USB brachte jedes professionelle IT-Gerät eine serielle Schnittstelle mit. Sie kam unter anderem bei Druckern, Terminals und sogar Computermäusen zum Einsatz. Damals war es sehr einfach, ein Objekt mit einer seriellen Schnittstelle zum Testen zu finden. Heutige Geräte setzen eher auf USB oder drahtlose Techniken wie WLAN und Bluetooth.

Im modernen Haushalt des Autors findet sich aber doch noch ein Gerät mit seriellem Interface: Der digitale Stromzähler in der Hausverteilung verfügt über eine optische serielle Schnittstelle, über die er die Zählerstände ausgibt – ein gut geeignetes Testgerät. Das Projekt umfasst das Auslesen aus einem handelsüblichen Stromzähler und die Ausgabe im Webbrowser. Das klingt erst einmal recht einfach, entpuppt sich bei genauerer Betrachtung aber als ziemlich komplexes Projekt. Das beginnt schon damit, an die Daten des Zählers zu kommen.

Zum Glück haben sich bereits andere mit diesem Thema beschäftigt: Das Team von Volkszähler.org [2] (siehe Kasten) hat hier schon sehr viel Entwicklungsarbeit geleistet. In diesem Projekt kommt daher der Lesekopf aus diesem Projekt zum Einsatz, um den Mikrocontroller zu verbinden (Abbildung 1).

Für die verschiedenen Modelle der Stromzähler benötigen Sie unterschiedliche Steuersequenzen. Diese finden sich im Wiki von Volkszähler.org. Beispielhaft kommt in diesem Artikel der Stromzähler E350 von Landis & Gyr zum Einsatz.

Abbildung 1: Der TTL-Lesekopf von Volkszähler.org auf dem Stromzähler aus dem Testaufbau. Unterschiedliche Stromzählermodelle benötigen allerdings auch verschiedene Steuersequenzen.

Abbildung 1: Der TTL-Lesekopf von Volkszähler.org auf dem Stromzähler aus dem Testaufbau. Unterschiedliche Stromzählermodelle benötigen allerdings auch verschiedene Steuersequenzen.

Volkszähler.org

Das Open-Source-Projekt Volkszähler.org befasst sich mit dem Auswerten von Daten über den Stromverbrauch in Privathaushalten. Das Kernstück des Projekts bildet das Auslesen und Weiterverarbeiten der Daten und Messwerte aus dem Smartmeter. Dahinter verbirgt sich ein Stromzähler mit Schnittstelle zum Bereitstellen von Messwerten und Zählerständen.

Alle Stromversorger müssen ihren Kunden seit dem 1. Januar 2010 diese intelligenten Zähler anbieten. Die Grundidee ist, dass der Kunde im Besitz seines eigenen Verbrauchsprofils bleibt. Bei allen Lösungen, bei denen der Energieversorger die Informationen bereitstellt, könnten die Profildaten an Dritte gelangen. Für Einbrecher wäre etwa interessant zu wissen, zu welchen Zeiten ein Gebäude nur die Grundlast verbraucht – also wann die Bewohner nicht anwesend sind.

Das Projekt offeriert eine Software, an die sich unterschiedliche Datenquellen anschließen lassen, wie etwa Gaszähler, Solar-Wechselrichter, Temperatursensoren, Hygrometer oder Ähnliches. Damit bietet Volkszähler.org all jenen einen Anlaufpunkt, die ihren Energieverbrauch optimieren wollen.

Serielle Schnittstelle

Logischerweise überträgt eine serielle Schnittstelle die Daten seriell – doch wie unterscheidet sie dabei die einzelnen Bits voneinander?

Sowohl die I2C-Schnittstelle als auch das SPI-Interface senden zu diesem Zweck ein Taktsignal mit. So wissen die Teilnehmer, ob es sich bei dem Signal um ein Bit handelt oder nicht; das Taktsignal gibt dabei die Geschwindigkeit vor. Sowohl bei I2C als auch bei SPI handelt es sich damit um sogenannte synchrone serielle Schnittstellen.

Die klassische serielle Schnittstelle, wie sie in diesem Beitrag im Fokus steht, arbeitet dagegen als asynchrones Interface. Es gibt keine Leitung für den Takt, sondern nur je eine RX- und TX-Leitung. Dabei stehen das R für “read”, das T für “transmit” und das X für eine beliebige Anzahl von Bits. Manchmal finden Sie auch die Bezeichnung TXD und RXD – das D bedeutet hier “data”.

Die Technologie grenzt die einzelnen Datenbits über ein Zeitraster ab. Damit das fehlerfrei funktioniert, müssen einige Rahmenbedingungen vorliegen. So ist es notwendig, dass Sender und Empfänger dasselbe Raster verwenden, sprich: mit der gleichen Geschwindigkeit arbeiten. Die heißt in diesem Kontext Baud-Rate. Ein Baud entspricht einem übertragenen Zeichen pro Sekunde.

Damit der Empfänger mitbekommt, dass das Übertragen der Daten beginnt, sendet eine Seite zuerst ein Startbit. Darauf folgen zwischen fünf und acht Datenbits. Diesen folgt in manchen Fällen ein Parity-Bit. Ein bis zwei Stoppbits markieren schließlich das Ende des Transfers.

Ein bis zwei Bits? Das klingt auf den ersten Blick seltsam und wird bei genauem Hinsehen noch eigenartiger: Tatsächlich darf es sich um 1, 1,5 oder 2 Stoppbits handeln. Die “1,5 Bits” erklären sich aus der Dauer des Signalpegels: Das Stoppbit dauert dann so lang wie 1,5 Daten-Bits.

Neben ungleichen Übertragungsraten zwischen Sender und Empfänger stellt eine falsch gesetzte Parität die zweithäufigste Fehlerursache beim Einrichten serieller Verbindungen dar. Die Paritätsprüfung lässt sich aber abstellen, sodass nach der vollständigen Übertragung eines Bytes sofort die des nächsten beginnt.

Da beim Übertragen das Timing eine entscheidende Rolle spielt, puffern die beiden Gegenstellen die Daten immer in einem Zwischenspeicher (Buffer). Dazu muss der Puffer eine ausreichende Kapazität zur Verfügung stellen. Er kann sowohl als Teil des Programms wie auch als Hardware implementiert sein; nicht selten ist beides gleichzeitig der Fall.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland