Der ESP32 ist ein Mikrocontroller, der zum Bau einer Vielzahl elektronischer Geräte verwendet werden kann, einschließlich eines pH-Sensors. Unser ESP32 pH-Sensor wird dazu verwendet, um den Säuregrad oder die Basizität (Alkalität) einer Flüssigkeit zu messen. Idealerweise automatisieren wir sowohl die Messung, als auch die Reaktion darauf. Die automatische Messung kann für Pools oder z.B. im Bereich der Aquakultur / Hydroponik eingesetzt werden.
Um ein pH-Meter mit dem ESP32 zu bauen, müssen wir einen pH-Sensor an den ESP32 anschließen und ein Programm schreiben, das die Sensordaten ausließt. Diesen Wert möchten wir unserem Smart Home angezeigt bekommen, um darauf automatisch reagieren zu können. Zuvor müssen wir den Sensor allerdings kalibrieren, da wir lediglich einen analogen Wert auslesen.
In diesem Tutorial bauen wir nicht nur ein ESP32 pH-Meter (du kannst auch einen ESP8266 verwenden) und kalibrieren diesen, sondern lassen uns die Daten auch gleich noch in Home Assistant anzeigen. Dafür nutzen wir ESPHome, welches unsere Arbeit enorm erleichtert.
Zubehör um den ESP32 pH-Sensor
Folgende Bauteile habe ich für dieses Tutorial benutzt:
- Raspberry Pi (mit Home Assistant installiert)
- ESP32 Devkit (WROOM 32E) – allerdings kannst du auch einen ESP8266 (bspw. ein ESP8266 NodeMCU) nehmen. Der ESP32 bietet sich an, wenn du mehrere analoge Signale an einem ESP auslesen möchtest. Ich möchte ebenfalls einen TDS Sensor anschließen und brauche daher mehr als einen analogen Inputpin.
- pH-Sensor Kit (inkl. PCB Module)
- Widerstände (1k und 2k Ω)
- Jumper Kabel
- optimal: pH Teststreifen (oder gar ein digitales pH-Messgerät)
- pH-Pufferlösungen – andernfalls verschiedene Flüssigkeiten mit unterschiedlichem Säuregehalt (bspw. Zitronensaft, Leitungswasser, etc.)
Je nach Anwendung kannst du weiteres Zubehör nutzen. Ich möchte den pH-Wert konstant halten und habe mir deshalb noch zusätzlich zwei Wasserpumpen bestellt, mit denen ich saure bzw. alkalische Flüssigkeit dazumischen kann.
Plan des Stromkreises und Einrichtung von ESPHome
Den ESP gibt es in verschiedenen Versionen. Beispielsweise gibt es den ESP32 mit 36 als auch 38 Pins. Daher ist es wichtig zu wissen, welche Version man hat und sich entsprechend die Pinbelegung anzusehen. Diese ist im Datenblatt bzw. auf der Website von Espressif zu sehen.
Da ich einen ESP32 WROOM 32E (auch bekannt als ESP32 DevKit) für den pH-Sensor nutze, siehst du hier die Pinbelegung dieses Mikrocontrollers. Du kannst jeden ADC Pin nutzen. Ich nutze GPIO35 (ADC7) zum Auslesen des analogen Wertes. Falls du einen ESP8266 nutzt, so hast du nur einen einzigen ADC Pin und musst daher diesen zum Auslesen benutzen.
Nun schließen wir den pH-Sensor mittels des Boards an. Die Pins des ESP32 können maximal 3.3V Spannungen erkennen. Da der Sensor 5V Eingangsspannung braucht und daher auch Spannungen über 3.3V zurückgeben kann, brauchen wir einen Spannungsteiler. Dafür nutzen zwei bzw. drei Widerstände (1k und 2k Ω) und verbinden sie wie folgt:
Je nach Sensor kann die Beschriftung auch abweichen. Der analoge Pin befindet sich ggf. hinter „Po“.
Anschließend wechseln wir zu Home Assistant und erstellen in ESPHome eine YAML Konfigurationsdatei, in der wir folgendem Inhalt hinzufügen. Wenn der ESP am Raspberry Pi angeschlossen ist, können wir es einfach installieren.
#... sensor: # https://esphome.io/components/sensor/adc.html - platform: adc pin: GPIO35 id: ph name: "pH Sensor" attenuation: auto update_interval: 1s unit_of_measurement: pH # https://esphome.io/components/sensor/index.html#sensor-filters filters: - median: window_size: 7 send_every: 4 send_first_at: 3 # - multiply: 0.3333 # only for ESP8266 # Measured voltage -> Actual pH - calibrate_linear: - 2.54 -> 7.3 - 2.846 -> 5.5 - platform: adc pin: GPIO35 name: "Flex 0" update_interval: 1s attenuation: auto
Hinweise zum Code:
- Falls du einen ESP8266 statt ESP32 nutzt, musst du den Pin anpassen (
A0
) und die Zeileattenuation: auto
auskommentieren. - Der ESP8266 zeigt analoge Werte im Bereich 0V bis 1V an. Beim ESP32 sind es max. 3.3 Volt. Um den Wert entsprechend anzupassen, kannst du ein
- multiply: 3.3
als ersten Filter setzen. - Der untere Teil dient nur zur Kalibrierung und kann anschließend entfernt werden. Wir möchten bekannte Substanzen messen und die Werte entsprechend mappen.
Installiere alles und schaue dir die Ausgabe in der Konsole an. Diese brauchen wir gleich.
Kalibrierung des ESP32 pH-Sensor
Idealerweise hast du ein pH-Messgerät oder einen Teststreifen und kannst den Wert exakt bestimmen und somit für die Kalibrierung nutzen. Falls du diese Möglichkeit nicht hast, gibt es auch noch eine andere Weise: Anhand bekannter pH-Werte (bspw. Leitungswasser, Zitronensaft, etc.) können wir auch eine Kalibrierung durchführen. Diese ist zwar nicht so genau, wie mit einem professionellen Kit, aber die Ergebnisse sind annähernd genau.
Als Erstes bestimmen wir die pH-Werte der Flüssigkeiten. Anschließend messen wir mit unserem angeschlossenen ESP32 pH-Sensor den Spannungswert. Dieser wird in Volt angegeben und entspricht noch nicht dem eigentlichen pH-Wert. Der letzte Teil des Codes gibt diesen aus. Solange unser ESP noch angeschlossen ist, sehen wir in der Konsole die gemessenen Werte. Warte ein wenig, da sich die Spannung anfangs noch verändert. Wenn der Wert gleich bleibt, kannst du ihn zur Kalibrierung verwenden.
Wasche den Sensor etwas ab und messe anschließend die nächste Flüssigkeit. In meinem Fall habe ich folgendes gemessen; ca. 2.846V entspricht einem pH-Wert von 5.5
Passe deine gemessenen Werte entsprechend an und installiere erneut. Nach der Messung kannst du den unteren Teil des Beispielcodes übrigens auch weglassen.
Automatische pH-Messung für den Pool und Hydroponik Systeme
Nun, da wir den pH-Wert von Flüssigkeiten messen können, bieten sich Automatisierungen in Home Assistant an. Diese können ganz vielseitig sein: Beispielsweise habe ich vor, ein automatisiertes Hydrokultur-Projekt zu starten, worin die Pflanzen mit Licht und Nährstoffen versorgt werden. Hierfür ist es u.a. wichtig, dass der pH-Wert im Rahmen bleibt, sodass die Pflanzen besser wachsen. Sobald die Grenze unter- bzw. überschritten werden durch eine kleine Pumpe Nährstofflösungen hinzu gepumpt, dass der Wert konstant bleibt. Bei Interesse können wir dies auch noch im Detail zeigen.
Beim Pool kann man ähnlich vorgehen. Hier geht es häufig darum, Algenwachstum zu vermeiden. Da ein pH-Wert von 7.0 bis 7.4 ideal ist, können wir durch die automatische Messung entsprechend reagieren.
3 Kommentare
Man kann sich zum kalibrieren auch pH-Pufferlösungen besorgen.
Gibts in jeder gutsortierten Galvanikfirma.
Wenn man eher im niedrigen pH-Bereich misst, also 1 – 8,
kalibriert man mit Pufferlösung pH7 und pH4.
Wenn man eher im oberen pH-Bereich messen will, also 7 – 14,
kalibriert man mit Pufferlösung pH7 und pH10.
Hi,
Kann ich die gesammelten Daten des ESP32 auch direkt an einen MQTT schicken und auf den Raspi verzichten?
Bei mir läuft ein Openhab und ich suche eigentlich nur eine Möglichkeit den PH Wert des Pools zu ermitteln. Mit der Sonde, dem PCB Board und dem ESP32 müsste das doch gehen oder?
Alle meine Versuche, eine PH-Sonde dauerhaft im zu überprüfenden Medium (z.B. Wasser) zu lassen, sind gescheitert, da die Sonde sehr schnell defekt wird, wenn sie nicht regelmäßig gereinigt und in Aufbewahrungslösung gelagert wird. Und vor allem „wandert“ der PH-Wert bei stunden- oder gar tagelangem Einsatz. Die Sonde müsste mindestens täglich neu kalibriert werden (und das ist immer ein recht großer Aufwand). Nach Rückfrage bei diversen Herstellern sei das bei allen solchen PH-Sonden so. Haben Sie wirklich eine Sonde, die Wochen oder gar Monate im Wasser liegt und ohne Wartung stets einen korrekten Wert anzeigt?