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.

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.

Hinweis
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.


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 zu sitzen hat, 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, ausprobieren oder schÀtzen 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