PumpControl mit ESP8266 01

In diesem Blog beschreibe ich dir, wie du deine Brunnenwasserpumpe mit dem Smartphone steuern kannst. Dabei kannst du die Wasserpumpe ein- und ausschalten, sowie die Leistung mittels einer Phasenanschnittsteuerung regulieren. Zusätzlich können Controller-Informationen sowie die Restzeit auf das Smartphone übertragen werden. Als Controller-Modul kommt der ESP8266 01 zum Einsatz, welcher über dein Home WLAN die Kommunikation zu deinem Smartphone herstellt. Gleichzeig steuert er deine Wasserpumpe. Mit der „PumpControl“ App (nur für Android), kannst du deine Wasserpumpe dann steuern. Deine bestehende WiFi Infrastruktur wird, ohne Änderungen machen zu müssen, voll unterstützt – auch mit mehreren Access Points. Wichtig ist, dass dein ESP8266 über WLAN eine Verbindung herstellen kann (2,4GHz IPv4, DHCP ist nicht relevant, da für den ESP-Controller static IP benutzt wird).

Voraussetzungen:

  • Da es sich im Leistungsbereich um Hardware am 230V Stromnetz handelt, musst du ein Fachmann sein im Bezug auf elektrische Spannungen bis 230 Volt. Sicherheitsregeln unbedingt beachten! Achtung Lebensgefahr!!!  Ziehe ggf.  einen Fachmann  hinzu, der dich beim Aufbau oder der Verdrahtung im Leitungsteil unterstützt.   
  • Du solltest mit der Arduino IDE Umgebung in der Lage sein eine Bibliothek sowie ein Programm (Sketch) laden bzw. öffnen zu können. Im Internet gibt es sehr viele Tutorials dazu. Fortgeschrittene können dies natürlich auch mit Visual Studio machen.
  • Du solltest Wissen, wie man das ESP8266 01 in den Programmiermodus versetzt, um deine Firmware übertragen zu können. Hier gibt es auch viele Dokumentationen und Videos im Internet.
  • Handwerkliches Geschick und Engagement zum Projekt haben.

Du musst keine einzige Zeile Programmcode schreiben, du machst nur Anpassungen in der Firmware für deine Hardware (Servoparameter) und deinem Netzwerk (SSDI, WLAN-Key sowie IP-Adr, Sub,DNS, Gateway und Port) – das ist alles.

 

Gesamter Schaltplan

(Gesamtschaltplan als PDF)

Schaltplan KiCAD (Date: 14.02.2021)

Servomotor mit mechanischer Kopplung an die Phasenanschnittsteuerung. 

Achtung! Hier muss unbedingt auf eine galvanische Trennung geachtet werden! Je nachdem wie du den Stecker deines Fertig-Moduls in die Steckdose steckst, können bei diesem Modul am Kühlkörper, Gehäuse und am Poti Netzspannung anliegen. Ich habe dieses Modul inklusive Servomotor aus isoliertem Material aufgebaut. Bei einem 180 Grad Servo könnte theoretisch auch eine axiale mechanische Kopplung angewendet werden, da die Motorleistung nicht auf 0 zurück geregelt werden soll. Das soll bedeuten, der gesamte Poti-Drehwinkelbereich von ca. 270 Grad wird nicht benötigt. Ausgehend vom Poti-Maximum Anschlag und dann 180 Grad zurück ist völlig ausreichend. Achte hier besonders darauf, dass deine Mechanik wenig Schlupf aufweist.

 

Das Steuermodul

Spannungsversorgung, elektronisches Relais, 4011-NAND, ESP8266 01, Reset-Taster sowie die Pullup Widerstände und Kondensatoren. Das elektronische Relais steuert einzig das Schaltschütz (kleine Leistung erforderlich) und benötigt zur Ansteuerung eine Spannung zwischen 3 bis 30 Volt.   

Das Gesamtmodul

Ein Schaltschütz deshalb, weil bei Nichtgebrauch die Stromzufuhr zur Pumpe zweipolig  unterbrochen werden soll (Pumpe im Außenbereich – Brunnen). Ggf. kannst du auch ein Relais oder eine eigene Schaltstufe verwenden.

Die Firmware für das ESP8266 01


(PumpControl V1.11.zip ESP8266 01 – Date: 23.07.2022)


[MD5 Hash: 794c5c01af45ab089efef8814eae5ffa]
Changelog: Automatische WiFi-Neuverbindung (reconnect) bei WLAN-Verlust. Zusätzliche Übertragung der Soll-Daten beim Erststart und bei Leistungsänderung. Erweiterungen an den beiden AppInfo(1 & 2) Daten eingefügt. Neu hinzu gekommen ist ein PowerOn-Counter, der die Einschaltvorgänge mitzählt. Das Problem mit der Steuerungsvariable RemoteOnlyOne wurde behoben und funktioniert jetzt, wie in der Anleitung beschrieben. Neu und zusätzlich kann jetzt über die „ShowError“ Konstante gesteuert werden, ob evtl. Parameterfehler/Hinweise am Client angezeigt werden oder nicht. Allgemeine Codeoptimierungen und Textanpassungen durchgeführt.


(PumpControl V1.10.zip für ESP8266 01 – Date: 14.01.2022)

[MD5 Hash: 7b3ba51e919b1b2530b146dca94e8e11]
Changelog: Servomotor konnte keine 180 Grad Drehung ausführen. Das Problem wurde behoben.


Öffne deine IDE-Umgebung und lade dir über den Board Manager die Arduino Core for ESP8266 WiFi chip herunter, damit deine IDE auch dieses Board ansprechen kann.

Öffne dann den Sketch PumpControl und mache die Anpassungen wie im Code-Kommentar beschrieben. Die Änderungen der Netzwerk IPs sind nur im Setup-Block zu finden.

* ssid - Your WiFi SSID name
* password - Your WiFi password
* localUdpPort - UDP communication port number
* IPAddress ip - ###.###.###.###
* IPAddress gateway - ###.###.###.###
* IPAddress subnet - ###.###.###.###
* IPAddress dns - ###.###.###.###
* servoStart - Potentiometer left stop
* servoEnd - Potentiometer right stop
* servoOffset - minimum flow rate at which the engine is still running well | The value can also be set via smartphone app.
* Token - Your personal key to operate the controller; only with this correct key will received data processed; Note: Token must not contain a semicolon character (;)
* RemoteOnlyOne - true = only one IP adr can send commands to controller / false = any IP adr may send commands ...
* ShowError - true = Show Info & Errors on Client / false = no Infos and Errors (from version V1.11 available)

* !!!Caution!!! Do not change any other variables, methods or functions in the code - the function is then no longer guaranteed.
Befinden sich im Setup()
IPAddress ip(192, 168, xxx, xxx);
IPAddress gateway(192, 168, xxx, xxx);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, xxx, xxx);

Überprüfe deine Änderungen, kompiliere den Sketch und übertrage die Firmware

Setze dein ESP8266 01 in den Programmier Modus und übertrage (flashen) die geänderte Firmware. Nach erfolgreicher Übertragung schaltest du den Programmier Modus aus und führst einen Restart durch. Wenn du, wie im Schaltplan beschrieben, einen Summer installiert hast, sollten nach einigen kurzen Tönen drei lange Töne folgen. Dies ist die Bestätigung, dass eine WLAN-Verbindung aufgebaut werden konnte.

 

PumpControl – Smartphone App 

Installiere dir die kostenlose App „PumpControl„. Du findest diese im Google Play Store (ohne lästige Werbung).  

 

Als nächsten Schritt öffnest du die Konfigurationsseite ( Open Config) und tätigst deine Einstellungen. 

IP Adr.: die IP deines ESP Controllers
UDP Port: die Portnummer, welche du im Code definiert hast
Power min: kleinste Einstellung in der App Skala-Beschriftung [1..99] – % Leistung
Power max: größter Wert in der App Skala-Beschriftung [2..100] – % Leistung
Empfehlung

Time min:
kürzeste Zeit in Minuten [>0 und <60]
Time max: längste Zeit in Minuten [>Time min und <=60]
Servo Offset: dieser Wert bestimmt die Mindestleistung der Pumpe. Das Vorzeichen hängt davon ab, wie deine mechanische Kopplung vom Servo zum Poti aufgebaut wurde. [-180 .. 180]
Drive Speed: Wie schnell sollen Leistungsänderungen umgestellt werden. [1…300] – (kleiner Wert: Änderung schnell; großer Wert: Änderung langsam)
Token: dein persönlicher Key, der immer überprüft wird – ansonsten keine Steuerung möglich.

Nach der Parametrierung schließt du mit „Save and Close“  den Screen. Der Rest auf dem Mainscreen sollte selbsterklärend sein. Ist dein ESP-Controller online, kannst du nun mit der App deine Pumpe steuern.

Ein nützliches Tool bei der Entwicklung und den Tests ist der Packet Sender. Mit dem Tool kannst du alle Funktionen testen. 

Technische Erklärung

Nach dem Start des ESP8266 01 werden die Ausgänge auf OFF (low aktiv) gesetzt und danach die von dir konfigurierte WLAN Verbindung aufgebaut. Klappt dies, bestätigt der Controller dies mit drei langen Tönen. Und dann beginnt schon die Loop-Schleife – also das Warten auf ein korrektes Kommando per UDP Empfang. Zyklus drei mal je Sekunde.

Der Empfang Stream des ESP8266 01 muss wie nachfolgend aufgebaut sein und am korrekten Port  eintreffen. Dies wird von der App PumpControl realisiert bzw. sichergestellt – praktisch nur zur Information.

Beispiel: ON;33;10;30;100;1;20;-70;180;123abc;

Value1: erlaubte Kommandos (ON, OFF, APPINFO01, APPINFO02, RESTART)
[RESTART wurde in der App nicht implementiert – Diente nur für Tests]
Value2: Soll Leistung der Pumpe
Value3: Soll Einschaltdauer der Pumpe in Minuten
Value4: Bereich Power min
Value5: Bereich Power max
Value6: Bereich Einschaltdauer min
Value7: Bereich Einschaltdauer max
Value8: Servo Offset
Value9: Servo Geschwindigkeit
Value10: dein persönlicher Key [WICHTIG!!! Dein Schlüssel darf kein Semikolon-Zeichen enthalten]

Kommt der erste korrekte Befehl am ESP an, merkt sich der Controller die Remote IP und sendet dem Device eine entsprechende Antwort bzw. agiert mit der Hardware (Servo, Schaltschütz, Summer). In Abhängigkeit der Variable RemoteOnlyOne kommuniziert das ESP dann nur mit diesem Gerät oder mit mehreren Geräten, die ein gültiges Kommando zum ESP senden. Somit kann konfiguriert werden, dass der Controller bis zum nächsten Restart oder Reset immer nur von einem Device gesteuert werden kann. Im anderen Fall, wird mit dem Gerät kommuniziert, welches den letzten korrekten Befehl gesendet hat.

const boolean RemoteOnlyOne = true; //true = only one Client / false = any clients

Fehlerhafte Datenpakete oder Pakete mit nicht autorisierter Geräte IPs an dem Controller werden nicht quittiert – das Daten-Paket wird ohne Quittierung verworfen.

Pumpe ON – Kommando
Wird die Pumpe eingeschaltet, bewegt sich der Servo im Eilgang immer zuerst auf 100% Leistung und regelt dann erst auf die gewünschte Soll-Leistung herunter. Damit soll sichergestellt werden, dass der Motor sicher unter Last anläuft. Ist die Pumpe bereits eingeschaltet, werden nur Änderungen der Leistung und Einschaltdauer unter Berücksichtigung  der Servo-Geschwindigkeit ausgeführt.

Alternative
Du kannst natürlich jedes Modul aus der ESP8266- oder ESP32 – Familie verwenden. Ändere entsprechend die Beschaltung und ggf. dein Board in der IDE.

Datenschutz
Die zum Download bereitgestellte Firmware und die App „PumpControl“ im Google Play Store kommunizieren einzig im lokalen Netzwerk (Benutzer Konfiguration) und übertragen keinerlei Daten in ein externes Drittsystem (Cloud, Web-DB, Webservice, usw…). Ausnahme Update Funktion Google Play Store – Check nach neuer APP-Version.  


PumpControl Nachbau am 25.01.2022

Hier drei Bilder von Gerhard H. aus Österreich, der die Pumpensteuerung erfolgreich nachgebaut hat. Er hat dies mit besonderer Sorgfalt und Präzision umgesetzt. Siehe nachfolgende Bilder.

Bild 01 – Spannungsversorgung und Controllermodul von hinten

Bild 02 – Servomotor mit Phasenanschnitt-Steuerung und  Controllermodul

Bild 03 – gesamte Steuerung


FAQ 
Die Frage war:
Warum die mechanische Kopplung mit dem Servomotor zum Poti der Phasenanschnittsteuerung? Mit Optokoppler oder Zündtransformatoren  und Netzsynchronisation kann von einem Controller der Phasenwinkel auch bestimmt werden. Der Servomotor könnte dann entfallen.

  • Ja – das ist alles bekannt und auch realisierbar, aber mit sehr viel Aufwand an die Controller Hardware.
    Ein Controller müsste im 10ms Zyklus (bei 50 Hz) per Interrupt den jeweiligen Phasenwinkel je nach Sollleistung an den Optokoppler zum Triac ausgeben – und das zyklisch. Mit einem ESP8266 ist dies nicht realisierbar. Zudem soll das ESP8266 auch noch interne Timerfunktionen, UDP und App-Kommunikation übernehmen. Damit wäre das Teil komplett überlastet. Soweit bekannt hat das ESP8266-01 keinen externen Interrupt Eingang – also völlig ungeeignet.

Die Frage war:
Welche IP Adresse muss ich für mein Netzwerk zu Hause im Code und in der App eintragen?

  • Gute Frage – Antwort darauf, ich weiß es nicht.
    Das hängt von deinem Netzwerk/Router zu Hause ab. In der Regel werden private IP Adr.  beginnend mit 192.168.x.x verwendet – diese sind im Internet nicht vergeben (ausgespart). Bereich: 192.168.0.0 bis 192.168.255.255, 172.16.0.0 bis 172.31.255.255 oder 10.0.0.0 bis 10.255.255.255.
    Link: https://de.wikipedia.org/wiki/Private_IP-Adresse
    Welches lokale IP-Band und den definierten DHCP Bereich dein Netzwerk verwendet, musst du in deinem Router einsehen. 

    Beispiel:
    Dein Router ist eine FritzBox mit der IP 192.168.178.1. Dein DHCP-Bereich ist konfiguriert von 192.168.178.50 bis 192.168.178.100. Dann hast du zum einen die Möglichkeit eine feste IP innerhalb des DHCP Bereiches für das ESP8266 zu reservieren. Anderenfalls kannst du dem ESP8266 die IP 192.168.178.2 bis 192.168.178.49 oder 192.168.178.101 bis 192.168.178.253 geben. 

Netzwerk Architektur soll aber nicht das Thema dieses Projektes sein.

Stand: 27. Apr. 2021