Automatische Spülsteuerung auf ESP8266 mit VL53L0X-Abstandssensor. Das System erkennt Anwesenheit, wartet auf das Verlassen des Bereichs und startet danach eine zeitgesteuerte Spülung.
- Abstandsmessung mit VL53L0X (I2C)
- Mindest-Anwesenheitszeit zur Verifikation
- Spülung über bistabiles Ventil (L9110S H-Brücke, Pulssteuerung)
- WLAN-Setup über WiFiManager (Captive Portal)
- MQTT-Anbindung mit Reconnect
- Konfigurationszustand wird als MQTT State publiziert und ist per MQTT zur Laufzeit änderbar
- Spülstatus wird als MQTT-Status true/false publiziert
- Elegant OTA Web-Update über Browser
- platformio.ini: Board-, Build- und Library-Konfiguration
- src/main.cpp: Hauptlogik (Sensor, Ablauf, WLAN, MQTT)
- include/, lib/, test/: Standard-Ordner von PlatformIO
Das Ventil wird über eine L9110S H-Brücke angesteuert. Es ist bistabil und benötigt zum Öffnen und Schließen jeweils einen kurzen 5V-Puls (ca. 30 ms) in die jeweilige Richtung.
Pinbelegung (siehe src/main.cpp):
- L9110_IN1 = GPIO12 (D6)
- L9110_IN2 = GPIO13 (D7)
Funktionsweise:
- Zum Öffnen: IN1 = HIGH, IN2 = LOW für 100 ms, dann beide LOW
- Zum Schließen: IN1 = LOW, IN2 = HIGH für 100 ms, dann beide LOW
- SDA -> D2 (GPIO4)
- SCL -> D1 (GPIO5)
- GND -> GND
- VCC -> 3.3V
Im Projektordner ausführen:
- Build: ~/.platformio/penv/bin/platformio run
- Upload: ~/.platformio/penv/bin/platformio run --target upload
- Serial Monitor: ~/.platformio/penv/bin/platformio device monitor --baud 115200
Beim ersten Start öffnet WiFiManager ein Konfigurationsportal mit SSID:
- SmartPissoir-Setup
Dort WLAN auswählen und Zugangsdaten speichern.
Zusatzfelder im Portal:
- MQTT Server
- MQTT Port
Diese Werte werden nach dem Speichern persistent im Dateisystem (LittleFS) abgelegt und beim nächsten Start automatisch geladen.
Standardwerte in src/main.cpp:
- mqttBroker = 192.168.0.5
- mqttPort = 1883
- MQTT_CLIENT_ID = smartpissoir-esp8266
Empfohlen: MQTT Server und MQTT Port im WiFiManager-Portal setzen. Ein Neu-Flashen ist dafür nicht nötig.
Nach WLAN-Verbindung ist das OTA-Webinterface unter der Geräte-IP erreichbar:
- http://<gerät-ip>/update
Basis-Statusseite:
- http://<gerät-ip>/
Damit kannst du neue Firmware direkt im Browser hochladen.
Status/State (retained):
- smartpissoir/config/state
- smartpissoir/status/online (LWT: "online" bei Verbindung, "offline" bei Trennung)
- smartpissoir/status/enabled ("enabled" oder "disabled")
- smartpissoir/status/flushing ("true" während der Spülung, sonst "false")
Set-Topics (zur Laufzeit verändern):
- smartpissoir/config/set/activationThresh
- smartpissoir/config/set/minPresenceTime
- smartpissoir/config/set/flushDuration
- smartpissoir/config/set/enabled
Command-Topics:
- smartpissoir/command/flush
Payload-Format für Set-Topics:
- Positive Ganzzahl als Text, z. B. 300
- Für smartpissoir/config/set/enabled: enabled/disabled, true/false, on/off, 1/0
Aktuell implementierte Wertebereiche:
- activationThresh: 50 bis 2000 (mm)
- minPresenceTime: 500 bis 30000 (ms)
- flushDuration: 500 bis 30000 (ms)
Diese drei Werte werden nach MQTT-Änderungen auf LittleFS gespeichert und nach einem Neustart wieder geladen.
Enable/Disable-Status:
- Standard beim Start ist enabled
- Der Wert wird persistent gespeichert und nach Neustart wiederhergestellt
- Bei disabled werden Anwesenheitsauslösung und Fernspülung ignoriert
- Jede Änderung publiziert sofort smartpissoir/status/enabled und den aktualisierten smartpissoir/config/state
Beispiel:
Wenn auf smartpissoir/config/set/flushDuration der Wert 7000 publiziert wird, setzt das Gerät die Spüldauer auf 7000 ms und publiziert den neuen Zustand auf smartpissoir/config/state.
Wenn auf smartpissoir/command/flush eine Nachricht gesendet wird, startet sofort eine Spülung.
Wenn das System disabled ist, wird smartpissoir/command/flush ignoriert.
Während einer aktiven Spülung publiziert das Gerät smartpissoir/status/flushing mit dem Wert true und danach wieder false.
Das Topic smartpissoir/config/state enthält den kompletten aktuellen Zustand als JSON, zum Beispiel:
{ "activationThresh": 300, "minPresenceTime": 5000, "flushDuration": 10000, "enabled": true, "mqttBroker": "192.168.0.5", "mqttPort": 1883, "ip": "192.168.0.42" }
Beispiel zum Deaktivieren:
- Topic: smartpissoir/config/set/enabled
- Payload: disabled
- Nutzer unterschreitet activationThresh.
- Anwesenheit muss mindestens minPresenceTime anhalten.
- System wartet, bis der Bereich wieder frei ist.
- Ventil wird für flushDuration aktiviert.
- System geht direkt zurück in den Wartezustand.
In platformio.ini:
- pololu/VL53L0X
- tzapu/WiFiManager
- knolleary/PubSubClient
- ayushsharma82/ElegantOTA
- Keine WLAN-Verbindung: Neustart, dann erneut mit SmartPissoir-Setup verbinden.
- Keine MQTT-Verbindung: Broker-IP/Port prüfen und sicherstellen, dass Broker im gleichen Netz erreichbar ist.
- Keine Distanzwerte: I2C-Verdrahtung und Sensorversorgung prüfen.
- Unerwartetes Schaltverhalten: Verdrahtung von Ventil, L9110S und Versorgungsspannung prüfen.