Elektronik_Header_3L�ftersteuerung mit ESP-01

 

Universal Zähleradapter

Um Impulsausgänge von verschiedenen Verbrauchserfassungseinrichtungen, gemeinhin Zähler genannt, zu erfassen, benötigen wir einen Microprozessor mit einem Impulseingang, nach eigenem Empfinden ein Display zur Anzeige der Werte vor Ort und ggf. eine Möglichkeit, die erfassten Daten per WLAN abgesetzt zur Verfügung zu stellen.

Gut geeignet für so eine Aufgabe ist der ESP-01. Er ist klein, hat WLAN on board und kann einen I²C Bus zur Verfügung stellen, der ein kleines OLED Display ansteuern kann. Zwei digitale IOs sind dann ebenfalls noch vorhanden, einer für den Taster zum Aufwecken des Display, der zweite für den Sensor.


Der ESP-01 benötigt mehrere Anschlüsse, eine 3,3 V Stromversorgung und das vorgesehene Display muss auch irgendwie befestigt werden. Eine passende Platine wird mit EAGLE V7.7 entworfen.

Gas-Wasserzähler-Sender          (Click auf das Bild für größere Darstellung)

Da auf der Platine noch Platz war und der ESP-01 grundsätzlich zu wenig Anschlüsse bereit stellt, habe ich noch einen PCF8574T Portexpander und einen Piezo Signalgeber spendiert. Den Piepser kann man dazu verwenden, eine Warnung auszugeben, wenn z.B. zu viel Wasser in gegebener Zeit fließt.

Gas-Wasserzähler-Sende

Zusätzlich habe ich drei der insgesamt 8 zur Verfügung stehenden IOs des PCF8574T auf Steckkontakten zugänglich gemacht. Portexpander, Piezopiepser und Steckkontakte sind optional und müssen für die reine Erfassung der Gas- oder Wassermenge nicht bestückt werden.

Die rot eingezeichnete Leiterbahn wird durch eine Drahtbrücke auf der Oberseite realisiert, ansonsten ist das Layout einseitig entworfen. Der Kondensator wird liegend eingebaut, der Platz dafür ist eingezeichnet.

Die Stromversorgung erfolgt mit einem normalen USB-Steckernetzteil, angeschlossen über eine MINI-USB Buchse auf der Unterseite der Platine.

Der Taster dient dazu, das OLED Display wieder einzuschalten, wenn es zeitgesteuert zur Schonung der Pixel abgeschaltet wurde.

Wenn zusätzliche Taster oder Schalter an den Steckkontakten angeschlossen werden sollen, können diese gegen Masse oder gegen Plus 3,3 V schaltend realisiert werden. Sind PullUps für die vorgesehene Funktion notwendig, müssen diese auf der Lötseite zwischen die Anschlüsse der Steckkontakte gelötet werden. Sie sind im Schaltplan eingezeichnet, im Layout war leider kein Platz mehr dafür vorhanden.

Nachtrag
Mein Vorrat an OLED Displays ging mal wieder zur Neige, ich musste nachbestellen. Nach Murphy haben die neuen Displays natürlich eine andere Anschlussbelegung für VCC und GND, so dass ich eine alternative Versorgung vorsehen musste. Auf meinem vorhandenen Board habe ich dafür zwei kurze Drahtbrücken verwendet, was für das hier zur Verfügung gestellte Layout natürlich nicht so bleiben kann. Es gibt also eine Version V1.2 des Layouts mit der Möglichkeit, diese beiden Anschlüsse für das OLED Display zu tauschen.

Gas-Wasserzähler-Sender V1.2

Um die Polarität der OLED Versorgung zu ändern mit einem Skalpell die beiden im nachfolgenden Bild ROT markierten Verbindungen auftrennen und dafür die beiden GRÜN markierten Stellen verbinden.

Polarität der OLED-Versorgung ändern

Die Designfiles dieses geänderten Entwurfs stelle ich im Format EAGLE V7 zur Verfügung.


Der Elektronikteil muss natürlich auch in ein Gehäuse eingebaut werden, erzeugt mit dem 3D-Drucker. Eine ähnliche Konstruktion wurde bereits für die Ausleseschaltung des Stromzählers erstellt, die jetzige fällt kleiner aus, weil die dort vorgesehene Option der Versorgung mit 230 V per Mini-Schaltnetzteil entfallen ist.

Gehäuse komplett

In den großen Ausschnitt passt genau ein normaler Mini-USB-Stecker, durch das kleine Loch wird das Sensorkabel nach Innen geführt. Die Platine liegt auf den Abstandshaltern auf und wird vom Deckel in Postion gehalten. Es sind keine Schrauben zur Fixierung notwendig.

Korpus mit Aufhängeöse

Mit einer 4 mm Senkkopfschraube kann das Gehäuse aufgehängt werden.

Der Deckel hat einen Ausschnitt für das OLED Display und eine Führung für den ebenfalls 3D-gedruckten Taststößel.

Deckel mit Kopf

Der Stößel sollte liegend gedruckt werden, dann flutscht er sauber in der Führung ohne sich mit den vom Druck herrührenden Rillen zu verhaken.


Die Software ist sowohl für die Wasseruhr als auch für den Gaszähler geeignet, die Unterscheidung wird per Define im Code in Zeile 74 vorgenommen:

#define WASSER                     // Code und Anzeige für Wasserzähler sonst für Gaszähler

Wird diese Zeile auskommentiert, werden die Texte und die Mathematik im Programm passend für den Gaszähler Elster BK-G4M umgebaut.

In den Zeilen 79 und 81 sind die Bezeichnungen der Zähler hinterlegt, die auf dem OLED angezeigt werden:

#define COUNTERNAME "   Sensus 420"
#define COUNTERNAME "elster BK-G4M"

Hier können eigene Namen eingegeben werden, es muss nur darauf geachtet werden, die zur Verfügung stehende Zeilenlänge nicht zu überschreiten. Die angegebenen Namen können nur einen Anhaltspunkt geben, denn ich verwende einen Proportionalfont.

Die Erfassung der Sensorimpulse sowie die Anzeige lokal auf dem OLED Display funktioniert nicht ohne WLAN. Deshalb müssen die Credentials für den Zugang zum WLAN im Code ab Zeile 84 eingetragen werden:

// Credentials für das eigene WLAN
#define OwnSSID "OwnSSID"          // -->> hier die eigenen Credentials eintragen <<--
#define OwnPassword "OwnPassword"  // -->> hier die eigenen Credentials eintragen <<--

Für das WEB Interface habe ich Anleihen bei Jens Fleischer genommen, genauso für die Speicherung der Zählerwerte im Flash des ESP8266.

Da das Flash des ESP nur 10000 bis 100000 Schreibzyklen verträgt, darf nicht bei jeder Zähleränderung ein Schreibvorgang ausgelöst werden. Folglich wird alle 4 Stunden überprüft, ob sich der Zähler gegenüber dem letzten Schreiben geändert hat. Nur wenn das der Fall ist, wird der neue Wert ins Flash geschrieben. Zusammen mit dem automatischen wear leveling der LittleFS Bibliothek überlebt das Flash des ESP so mehrere Jahrzehnte.

Der Code ist so geschrieben, dass er sowohl auf einem ESP-01 als auch auf einem Wemos D1 R2 ablauffähig ist. Per implizitem Define werden z.B. die für I²C zu nutzenden Pins und andere Eigenschaften korrekt gesetzt. Verantwortlich dafür sind zwei Defines, die durch die IDE automatisch anhand des selektierten µC Typs gesetzt werden.
Für den ESP-01 lautet das entsprechende Define ARDUINO_ESP8266_GENERIC, für den Wemos D1 R2 lautet es ARDUINO_ESP8266_WEMOS_D1MINI.

Hinweis
Wenn beim ESP-01 Serial.begin() aufgerufen wird, wird der RX-Pin des ESP-01 bedingungslos auf die serielle SS geroutet. Es ist dann nicht möglich, den Pin als normalen IO zu verwenden. Einzelheiten dazu hier.

Debugausgaben auf der Seriellen, die beim Wemos problemlos funktionieren, sind beim ESP-01 nicht möglich. Im Programm werden die Pins der seriellen Schnittstelle für den I²C Bus verwendet, mit dem das OLED Display angesprochen wird. Wird die serielle SS initialisiert, bleibt das OLED tot.

In diesem Zusammenhang ist vielleicht erwähnenswert, dass beim ESP8266 der Pin D0 (GPIO16) nicht in der Lage ist, einen IRQ auszulösen. Man ist also gezwungen, den längeren Tastendruck per Polling des IO und anschließender, krauser Programmlogik abzuhandeln. Diese Einschränkung kommt nur zum Tragen, weil im Sinne von minimalistischer Lösung ein ESP-01 eingesetzt wird. Beim Wemos D1 oder einem der anderen, größeren ESP8266 Derivate hätte man einfach einen anderen Pin verwenden können um die Taste per Interrupt abfragen zu können.

Ich habe den Code ausführlich kommentiert (auf Deutsch) und stelle ihn Nachbauwilligen zur Verfügung.

Aktualisierung
Im Prinzip war der Code fertig und funktionierte wie geplant. Nun hatte ich den einen Zähleradapter zwar schon in Betrieb genommen, aber noch nicht in sein Gehäuse eingepflanzt, die Platine hing unverpackt an der Wand und staubte nach und nach ein. Um die Schaltung ohne Datenverlust in das Gehäuse einsetzen zu können, hätte ich kurz vorher die Firmware einfach nochmal per OTA flashen können, dabei wäre der aktuelle Zählerstand ohnehin ins Flash geschrieben worden. Die Alternative, den Zählerwert hinterher abzulesen und neu einzugeben, existiert natürlich ebenfalls. Aber beides grenzt an Weicheilösung.

Ich habe also die Firmware um die Funktion erweitert, per längerem Tastendruck eine manuell ausgelöste Speicherung des aktuellen Zählerstands zu initiieren. Man hält den Taster für etwas länger als 2 Sekunden fest, dann wird der Wert gespeichert und auf dem Display wird “gespeichert” angezeigt.  Zusätzlich habe ich die Formatierung der Ausgabe im WEB Interface geändert, so dass der Dezimalpunkt immer auf dem roten Rahmen sitzt. Diese Funktionalität ist in der Version V1.2 der Firmware enthalten.

Update
Im Zuge der Renovierung der Darstellung des Iskra Zähleradapters hat auch der Universal Zähleradapter eine überarbeitete Firmware erhalten. Der Hintergrund im WEB Interface ist jetzt weiß und jede Variante hat ein passendes Favicon erhalten.


Der jeweiligen Sensor muss am Zähler des zu erfassenden Mediums befestigt werden.

Bei der Wasseruhr ist das vergleichsweise einfach erledigt, man sieht, wo der Sensor platziert werden muss, damit er die Abtastung zuverlässig erledigen kann.

Beim Gaszähler sieht die Sache etwas anders aus. Man sieht hier nicht unbedingt, wo im Innern des Zählergehäuses der Magnet rotiert, schätzen und überprüfen ist angesagt.

 


Beim Aufruf dieser Funktion werden Daten an Google in USA übermittelt. Neben Ihrer IP-Adresse wird auch die URL der besuchten Seite übertragen.
Besucherzaehler

Besucher seit
25.11.2000