Regeln günstig und mit wenig Aufwand mit ESP32 und Micropython

Anforderungen
- Billig – ein kompletter Aufbau mit Display etc. für unter 50€
- Einfach zu programmieren – du brauchst nur eine Hand voll Python Kommandos kennen um professionelle Regelungen zu realisieren
- Remote übers Netz programmierbar – die RegulatorCard verbindet sich über WLAN und bietet dir eine Webseite auf der du einfach dein Programm ändern kannst. Hast du am Standort der Regelung kein WLAN – so arbeitet die Karte als WLAN-AccessPoint
- Schnittstellen für Visualisierungs/Einstellungsprogramme
- Bei Bedarf erweiterbar über I2C (z.B. mehr Relais oder zusätzliche Eingänge)
- Einfach für Anfänger aber auch individuell nutzbar für embedded Profis die ihr komplett eigenes Programm schreiben wollen
Features
- 4 x PT-100 Analoge Temperatursensoren
- 3 x 18C20 Digitale Temperatursensoren
- 3 x Flusssensor
- 3 x PWM-Ausgang mit variabler Spannung
- 8 x Relais
- 1 x DotMatrix-Display via I2C
Hardware

Legende: V : Voltage/Versorgung; G : Ground; S: Signal; AP : AccessPoint; STA : Station; 5 : 5 Volt; VIn : Spannung für PWM

Relais im Betrieb / PWM für geregelte Pumpen (LED-Helligkeit als Demo)
Gehäuse

Das Gehäuse besteht aus 3 3D-Druck Teilen und kann so mit jedem normalen 3D-Drucker gedruckt werden. STL-Dateien findest du weiter unten.
Du brauchst zum Druck (mit Support) etwa 180g Filament (mit einer Filamentrolle etwa 5 komplette Gehäuse) – bei 14€ für die Rolle sind das etwa 3€ fürs komplette Gehäuse

Das Gehäuse hat die Abmessungen 145x130x90 mm (LxBxH)
Die Befestigung ist für die Hutschiene vorgesehen
Du brauchst insgesamt 16 Schrauben
- 4 x M3 fürs Display – nehm am Besten Kunststoffschrauben 14 mm reichen knapp aber nimm lieber 20 mm mit Muttern und schneide den Überstand ab
- 6 x M3 Befestigung der Hutschienenclips am Unterteil 10 mm selbstschneidende Blechschrauben (es reichen eigentlich auch 4)
- 4 x M3 für die Befestigung der beiden Unterteile an der Platine 10 mm selbstschneidende Blechschrauben
- 1 x M3 Links und 1 x M3 Rechts zum fixieren der oberen Abdeckung 10 mm selbstschneidende Blechschrauben
- kein Kleben – alle Komponenten sind durch das Zusammenstecken bereits fixiert und haben kaum Spiel
Display

Das Display zeigt den aktuellen Modus RUN / STOP / HANG
Du bekommst die Information ob AP AccessPoint oder STA Wlan Station (Client) Modus aktiv ist und die IP-Adresse über die du dich verbinden kannst
Der #-Balken zeigt die Ausführungen deines Programms (Nicht unbedingt nützlich – aber die Zeile war noch frei 🙂 )
Schaltplan
einfach und übersichtlich

Software
Das hier ist die Webseite mit der du deine Regelungen realisieren kannst. Es gibt links einen Bereich, in dem du die aktuellen Eingangs- und Ausgangswerte siehst. Rechts kannst du drauf los programmieren. Die Konstanten für dein Programm packst du am besten oben in die Settings (zeig später warum). Die Anmeldedaten sind initial admin/12345 das WLAN-Passwort ist initial 12345678


Um das Programm zu ändern musst du:
- Laufende Regelung erstmal mit dem Stop-Knopf stoppen.
- Code ändern und ausführen (mit Execute Code) bis alles passt
- Unter dem Programm ist eine grüne Box die dir anzeigt wie lange dein Programm gebraucht hat und auch deine print()-Ausgaben.
- Ist der Rahmen grün ist alles Okay
- Speichere mit Save Code deinen code in den controller
- Jetzt kannst dann die Regelung mit dem Start-Knopf starten
- Schaltest du aus und wieder an, so startet die RegulatorCard sofort wieder dein letztes Programm auszuführen
Schau dir den kurzen Beispielcode mal an:
# So Easy :-)
# some substitution helps you to understand your code later
tempCollector = t1
tempMixer = t5
pwmSolarPump = pwm1
relaisThermNeeded = relais1
flowAfterMixer = flow1
if SolarPumpMode == "AUTO" and tempCollector > SolarPumpOnValue:
pwmSolarPump = 20 + min(80, (tempCollector - SolarPumpOnValue) * 3)
else:
pwmSolarPump = 0
if flowAfterMixer > 100 and tempMixer > RegulatorValveOn:
relaisThermNeeded = 1
else:
relaisThermNeeded = 0
# Remember things over iterations
counter1 = get_var("counter1")
counter1 += 1
if counter1 > 5:
relais5 = 1
counter1 = 0
else:
relais5 = 0
set_var("counter1", counter1)
# back substitution (only outputs needed)
pwm1 = pwmSolarPump
relais1 = relaisThermNeeded
print("Dein erstes Programm läuft !!!")
Eigentlich ist in diesem Minimalbeispiel schon alles was du an Python brauchst um los zu programmieren
Ich hoffe du hast jetzt schon Lust bekommen damit zu Arbeiten 🙂
Aber einwas hab ich noch:
Schnittstellen
Ich hab vorher schon von Schnittstellen gesprochen.
Über den Endpoint http://<IP-Adresse>/data bekommst du die aktuellen Sensor und Aktorenwerte als einfaches JSON
{
"t1": "18",
"t2": "-9999",
"t3": "-9999"
"t4": "18",
"t5": "-9999",
"t6": "-9999",
"t7": "-9999",
"relais1": 0,
"relais2": 0,
"relais3": 1,
"relais4": 0,
"relais5": 0,
"relais6": 0,
"relais7": 1,
"relais8": 0,
"flow1": 0,
"flow2": 0,
"flow3": 0,
"pwm1": 0,
"pwm2": 0,
"pwm3": 0,
"mode": "STOP",
"error": ""
}
Über den Endpoint http://<IP-Adresse>/get-settings bekommst du die aktuellen Konstanten diesmal gleich als Python-Code
SolarPumpMode = "AUS"
SolarPumpOnValue = 7.0
RegulatorValveOn = 42.0
Über den Endpoint http://<IP-Adresse>/save-settings kannst du diese in selber Form setzen (schau dir einfach den Code auf der Webseite dazu an)
Über den Endpoint http://<IP-Adresse>/set-time kannst du im AP-Modus die Zeit setzen (Das Visualisierungs-Programm unten macht das natürlich) beim STA-Modus passiert das automatisch über die Netzwerkzeit und du brauchst dich nicht darum kümmern
curl -X POST http://192.168.42.1/set-time
-H "Content-Type: application/json"
-d '{"year": 2026, "month": 11, "day": 5, "weekday": 3, "hour": 14, "minute": 30, "second": 0}'
Damit kannst du dir solche Visualisierungen bauen:
Visualisierung

Im Textfeld wo gerade „Everything is okay !“ steht kommen deine print() Ausgaben die du während deines Programms machst. So siehst du gleich was los ist

Für die Visualisierung (und Einstellungen) reicht ein günstiges Android Tablet das kommt oft günstiger als RPI plus Display, Kabel Netzteil etc. Ein einfaches Tablet bekommt man bei Amazon schon ab etwas über 40€.
Die Applikation ist diesmal Mit GoDot erstellt und lässt sicht leicht auf deine Wünsche anpassen
Wenn du Fragen hast schreib mich gerne an
Ich werd wieder versuchen diesen Artikel als Dokumentation schrittweise zu verbessern
Aber schon mal viel Spaß damit
Euer Stefan
Anhang
Software Architektur
einfach und robust

Einstellungen
Es gibt ein paar Einstellungen
- PIN für die Webseite
- WLAN SSID
- WLAN Passwort
Führe einfach diesen Code aus um se zu setzen:
(Vorher starten im AP-Modus ohne Jumper und verbinden mit dem WLAN RegulatorCard-XXX – IP-Adresse steht auf dem Display)
regulatorCardSettings("PIN","SSID","WIFI_PWD")
Den PIN brauchst du um auf die Webseite zu kommen. Initial sind die Anmeldedaten admin/12345 – danach admin/<deine PIN>

BOM
| ID | Name | Designator | Footprint | Quantity | Manufacturer Part | Price | Link |
| 1 | 0.1u | C1,C2,C3 | C0603 | 3 | |||
| 2 | HDR-M-2.54_1x10 | J1 | HDR-M-2.54_1X10 | 1 | 0.071 | ||
| 3 | HDR-M-2.54_1x4 | J2 | HDR-M-2.54_1X4 | 1 | 0.057 | ||
| 4 | HDR-M-2.54_1x2 | J3 | HDR-M-2.54_1X2 | 1 | 0.03 | ||
| 5 | 400 | R1 | R0603 | 1 | |||
| 6 | 4k7 | R2,R3,R10,R11,R12 | R0603 | 5 | |||
| 7 | 1k | R4,R7,R8 | R0603 | 3 | |||
| 8 | 330 | R5,R6,R9 | R0603 | 3 | |||
| 9 | ESP32-DEVKITC | U1 | BULETM-SMD_ESP32-DEVKITC | 1 | ESP32-DevKitC | https://www.amazon.de/dp/B074RGW2VQ | |
| 10 | MAX31865AAP+ | U2 | SSOP-20_L7.2-W5.3-P0.65-LS7.8-BL | 1 | MAX31865AAP+ | 8.95 | https://www.digikey.de/de/products/detail/analog-devices-inc-maxim-integrated/MAX31865AAP-T/5396623 |
| 11 | ADG804YRM-REEL | U3 | MSOP-10_L3.0-W3.0-P0.50-LS5.0-BL | 1 | ADG804YRM-REEL | 0.868 | https://www.digikey.de/de/products/detail/analog-devices-inc/ADG804YRMZ/997617 |
| 12 | PCF8574TS/3 | U4 | SSOP-20_L7.5-W5.2-P0.65-LS8.0-BL | 1 | PCF8574TS/3 | https://www.digikey.de/de/products/detail/texas-instruments/PCF8574PWR/484761 | |
| 13 | JL301-50009U01 | U5,U6,U7,U8 | CONN-TH_JL301-50009U01 | 4 | JL301-50009U01 | 0.317 | https://www.amazon.de/dp/B0CBWXQQD1 |
| 14 | PC817X C档 | U9,U10,U11 | DIP-4_L6.5-W4.6-P2.54-LS7.6-BL | 3 | PC817X C档 | https://www.digikey.de/de/products/detail/sharp-socle-technology/PC817X2NSZ9F/7942022 |
Sensoren / Zubehör
Downloads
Gerber
Hier der Gerber-Daten-Link – damit kannst du dir Leiterplatten z.B. bel JLC-PCB bestellen
Natürlich hab ich ein paar vorrätig und schicke dir gerne eine zu – schreib mich einfach an
Software-Image
Hier kommt bald das Image mit der kompletten Software das du direkt mit esptool oder Thonny auf deinen Controller flashen kannst
Hier schon mal der Befehl: esptool –baud 460800 write-flash 0x1000 RegulatorCard_v0_1.bin
Mist hab bei der finalen Leiterplatte einen Fehler gemacht und GPIO12 verwendet der für die Umschaltung der Flash-Spannung verwendet wird.
Glücklicherweise gibt es einen Softwarepatch: führe einfach espefuse –port /dev/ttyUSB0 set-flash-voltage 3.3V aus (Das Programm ist Teil der esptools)
und natürlich der
Code
Firmware: https://bitbucket.org/bobbery/regulatorcard/commits/tag/v0.1
und die Visualisierung: https://bitbucket.org/bobbery/regulatorapp/src/main/
Gehäuse
Hier die STL-Daten für das Gehäuse
Danksagungen
Danke an Hans Markl für die erste Projektidee ( mal wieder 🙂 )

Danke an Hans Reif, meinem Elektronikervorbild, für viele tolle Gespräche mit Hopfengetränk und die Tipps beim Entwurf der Elektronik
Danke an meine Bürokollegen Michi, Leon und Jens mit eurer unkomplizierten Denkweise in Sachen Software und eure tollen Denkanstöße
Danke an Susanne dir kann ich immer schreiben was ich grad mach auch wenn ich grad Mist bau und du findest irgendwie Alles toll – ich bin so froh dass wir wieder Kontakt haben – hab dich sehr vermisst. Weiß blos immer ned was ich schreiben soll – hoffe dich störts ned dass es meistens Technik is


























































