Hallo zusammen,
ich bastle gerade mal wieder neues Equipment für meinen Bruder.
Diesmal ist es ein ESP8266-01 mit einer 8-fach Relaiskarte, die über einen PCF8574 angesteuert wird.
Als Anhaltspunkt für die Stromversorgung diente -> dieses Projekt <-.
Was wird benötigt?
- 1 x ESP8266-01 Modul, es geht aber auch ein anderes Modul
- 1 x 8-fach Relaiskarte, z.B. -> so was hier <- ...
für die Stromversorgung:
- 1 x Elko 1200 µF 6V3
- 1 x Elko 47 µF 25 V
- 1 x PCF8574
- 1 x AMS1117 3V3
- 1 x Steckernetzteil 5V 1A
ausserdem:
- einige Kabel
- Buchsenleiste 2 x 4 abhängig vom verwendeten ESP-Modul
So, ich hoffe, ich hab' jetzt nichts vergessen.
Da die Schaltung für die Spannungsversorgung auf der oben verlinkten Seite http://esp8266-server.de/8-I2C-WiFi-Relais.html ausführlich beschrieben ist, spare ich mir an dieser Stelle weitere Kommentare dazu.
Beschreibung:
Elektronik:
Mit einem ESP-Modul - möglichst einem ESP8266-01, weil davon noch einige auf Halde liegen - und einer 8-fach-Relaiskarte soll eine Art Zeitschalt-Uhr realisiert werden. Als Treiberbaustein für die Relais-Karte wird ein PCF8574 verwendet.
Durch den Treiberbaustein wird das ESP8266-01 Modul um acht Ausgänge erweitert. Die Ansteuerung des PCF8574 erfolgt über I2C. Dazu werden Pin #0 des ESP8266-01 als SCL- und Pin #2 des ESP8266-01 als SDA-Leitung des I2C Bus verwendet.
Die Verwendung des Pin #0 (GPIO00) des ESP ist in diesem Fall unproblematisch, da dieser Pin zum Einleiten der Flash-Sequenz dient und während eines Restart des ESP konstant auf GND gelegt werden muss.
Software:
Für jeden Ausgang des PCF8574 soll es möglich sein, zwei verschiedene Ein- und Ausschalt-Zeiten zu definieren. Da das ESP-Modul keine RTC besitzt, soll die jeweils aktuelle Zeit über NTP ermittelt werden.
Die Eingabe dieser Zeiten erfolgt über ein HTML-Formular, das vom ESP8266 im HTTP-Server-Modus zur Verfügung gestellt und ausgewertet wird. Dazu ist im Formular eine Tabelle mit acht Zeilen enthalten, in die jeweils zwei Ein- und zwei Aus-Schaltzeiten eingegeben werden können.
Jede Ein-/Aus-Schaltkombination hat einen zusätzliches Merker, der gesetzt werden kann um den Modus für die jeweilge Schaltsequenz festzulegen.
Jeder Ausgang hat drei Modi:
Im Modus ON oder OFF wird der Ausgang, unabhängig vom aktuellen Schaltstatus, ein- bzw. ausgeschaltet.
Im dritten Modus, AUTO, greifen die Schaltzeiten und der jeweilige Ausgang wird entsprechend der definierten Schaltzyklen ein- oder ausgeschaltet wenn der entsprechende Merker aktiviert ist.
Für jeden Ausgang gibt es zudem zwei weitere Merker die mit "Ext 1" und "Ext 2" bezeichnet sind. Diese beiden Merker kennzeichnen, ob der zugehörige Schaltzyklus von einer externen Quelle übersteuert werden kann. Hintergrund ist hier, dass es z.B. keinen Sinn macht das geschlossene Gartentor im Falle eines Alarms zyklisch zu öffnen und zu schliessen.
Diese Einstellungen werden im EEPROM des ESP gespeichert und bei jedem Neustart des Moduls aus dem EEPROM gelesen.
Die Übersteuerungen erfolgen, soweit möglich, über das Eingabeformular oder über die Web-API des auf dem ESP laufenden HTTP-Servers. Eine detaillierte Beschreibung der Web-API erfolgt zu einem späteren Zeitpunkt.
Mit seinen vier Schaltflächen stellt das Formular folgende Funktionen zur Verfügung: CANCEL macht alle Änderungen rückgängig. SAVE speichert die Änderungen im EEPROM des ESP. Alle vorgenommenen Änderungen werden zudem sofort wirksam. Mit dem RESET-Button können alle Werte auf ihre Grundeinstellungen und die Schaltzeiten auf 00:00 Uhr gesetzt werden, wobei alle Schaltzyklen deaktivert sind.
Mit dem Button REBOOT wird ein Software-Reset des ESP-Moduls durchgeführt - d.h. das Modul wird neu gestartet und die Einstellungen aus dem EEPROM gelesen.
Projekt-Verlauf:
16.11.2016: Ich hatte da noch einen Bug in der eeprom-Library ... der ist mittlerweile gefixed, das Attachment ist aktualisiert, github ebenfalls
17.11.2016: Ausführliche Doku für die EEPROM-Bibliothek erstellen.
17.11.2016: Attachments mit der EEPROM- und der Log-Bibliothek entfernt. Bitte ab jetzt nur noch die im github Repository veröffentlichten Versionen verwenden.
05.01.2017: Attachment mit sketch entfernt. Bitte nur noch von github herunterladen. Web-API als letzter Punkt wurde Ende 2016 bereits implementiert. Projekt erst einmal erledigt.
... tbc
TODO-Liste:Design und Erstellen des HTML-Formulars für die Eingaben (07.11.2016)Vereinfachte EEPROM-Zugriffe (endlich) mal in eine eigene Library packen (07.11.2016)NTP-Zugriffe implementieren (07.11.2016)HTML-Formular Vorlage posten (07.11.2016)EEPROM-Library posten (07.11.2016)Log-Library posten (07.11.2016)Fix in der EEPROM Lib (10.11.2016)NTP- und Zeitzonen Code kommentieren und posten (10.11.2016)Doku zur EEPROM Lib auf deutsch erstellen und veröffentlichen (16.11.2016)Doku zur Logging-Bibliothek auf englisch erstellen und auf github einpflegen (17.11.2016)An diesen Beitrag angehängte Versionen der EEPROM- und der SimpleLog-Bibliothek entfernen. Hinweis auf das jeweilge Repository auf github einfügen (17.11.2016)Definieren system- und funktionsrelevante Daten (22.11.2016)System-Daten in das EEPROM schreiben (22.11.2016)Funktions-Daten (Schalttabelle) in das EEPROM schreiben (22.11.2016)EEPROM bei jedem Neustart auslesen (22.11.2016)Allgemeines setup des sketch implementieren (22.11.2016)Zwischenfunktionen implementieren, um die existierenden Code-Fragmente sinnvoll zu nutzen (22.11.2016)Doku zur EEPROM Lib auf englisch erstellen und auf github einpflegen (22.11.2016 -> in eigenes Projekt ausgelagert)Doku zur Logging-Bibliothek auf deutsch erstellen und im Notiznbuch veröffentlichen (22.11.2016 -> in eigenes Projekt ausgelagert)EEPROM Lib und Logging-Bibliothek erweitern und jeweils einen Release erstellen (22.11.2016 -> in eigenes Projekt ausgelagert)Für beide Bibliotheken ein oder zwei einfache Beispiele erstellen und auf github einpflegen (22.11.2016 -> in eigenes Projekt ausgelagert)Die zugehörigen Dokus aktualisieren (22.11.2016 -> in eigenes Projekt ausgelagert)Neues Eingabe-Formular erstellt und eingepflegt (22.11.2016)Erster Prototyp - nur Datenverwaltung (22.11.2016)Erster kompletter Prototyp (27.11.2016)Erster Release fertigstellen (Zieltermin: spätestens 1. Advent) (18.12.2016)Kosmetik (18.12.2016)Sketch-Grösse optimieren auf max. 50% eines ESP-01 (wegen OTA-Update) (18.12.2016)Einfache Prüfungen der Werte (18.12.2016)Schaltlogik vereinfachen (18.12.2016)Unterstützung für direktes Schalten zweier Relais über GPIO00/GPIO02 und Treiber (18.12.2016)OTA (Over The Air) -Update (18.12.2016)Implementieren der WEB-API (05.01.2017)
Nächste Schritte:
Für die Zukunft:
In Version 2 unbedingt eine RTC verbauen
Den Sourcecode des sketch findet ihr ab sofort in meinem -> github-Repository <-.
Es ist einfacher, den Sourcecode dort zu verwalten.
Die beiden Libraries (für den vereinfachten EEPROM-Zugriff und das Logging) sind dort ebenfalls in eigenen Repos zu finden.
Die vereinfachte Formular-Vorlage findet ihr im Anhang.
Ich hoffe, ich konnte das einigermassen verständlich beschreiben. Wenn irgendwas unklar ist, einfach hier melden
cu,
-ds-