Auf dieser Seite erfährst du, wo du welche Teile bekommst, wie diese verkabelt werden und wie du die Esp8266 Wifi pHSonde per Wlan und mqtt mit deinem Smarthome verbindest
Wir haben seid langem einen Pool und Anfangs bin ich konstant damit beschäftigt gewesen die Werte zu checken und nachzuregeln.
Irgendwann kam der Wunsch auf, die Werte im Smarthome sichbar zu machen.
Die günstigen ESP8266 Chips gibt es auf etlichen Boards günstig zu haben. die am einfachsten zu handhabenden sind der Wemos D1 & der NodeMCU
Beide können bequem per USB geflasht und einfach programiert werden.
Für unsere pH SOnde habe ich mir außerdem dieses kleines Display und natürlich die pH-Sonde bestellt
Jetzt geht es ans zusammenbauen
Lasst Euch nicht vom Schema Irritieren, Es gab das bild des 4502C nicht, daher das schwarze Board. V+ aus 5V am Wemos G auf G und pO auf A0
Mit ein wenig Arduino-Code ist unsere Sonde fast fertig:
Hier findest du den Code#include <EEPROM.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
#include<Adafruit_GFX.h>
#include<Adafruit_SSD1306.h>
#include <SPI.h>
#define OLED_RESET 4
#define pH_Topic "Pool/Sensoren/ph" // MQTT Topic für pH
String sendphValue;
unsigned long int avgValue; //Store the average value of the sensor feedback
float b;
int buf[10],temp;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH,SCREEN_HEIGHT,&Wire,OLED_RESET);
// Connect to the WiFi
const char* ssid = "deine Wlan SSID";
const char* password = "dein WLAN Passwort;
const char* mqtt_server = "ip des MQTT Brokers";
WiFiClient espClient;
PubSubClient client(espClient);
const byte ledPin = 0; // Pin with LED on Adafruit Huzzah
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
char receivedChar = (char)payload[i];
Serial.print(receivedChar);
if (receivedChar == '0')
// ESP8266 Huzzah outputs are "reversed"
digitalWrite(ledPin, HIGH);
if (receivedChar == '1')
digitalWrite(ledPin, LOW);
}
Serial.println();
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("ESP8266 Client")) {
Serial.println("connected");
// ... and subscribe to topic
client.subscribe("ledStatus");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
void setup()
{
Serial.begin(115200);
WiFi.begin(ssid, password);
// HIER KANNST DU DEN MQTT PORT ÄNDERN, ÄNDERE ABER NUR DEN PORT NICHTS ANDERES!!!
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c))
{
Serial.println(F("SSD1306 allocation failed"));
for(;;);//Dont proceed
}
display.display();
delay(2);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0,5);
display.print("PH Sensor");
display.display();
delay(3000);
pinMode(ledPin, OUTPUT);
}
void loop()
{
//String myData = String(analogRead(A0));
for(int i=0;i<10;i++) //Get 10 sample value from the sensor for smooth the value
{
buf[i]=analogRead(A0);
delay(10);
}
for(int i=0;i<9;i++) //sort the analog from small to large
{
for(int j=i+1;j<10;j++)
{
if(buf[i]>buf[j])
{
temp=buf[i];
buf[i]=buf[j];
buf[j]=temp;
}
}
}
avgValue=0;
for(int i=2;i<8;i++) //take the average value of 6 center sample
avgValue+=buf[i];
float phValue=(float)avgValue*5.0/1024/6; //convert the analog into millivolt
phValue=3.5*phValue; //convert the millivolt into pH value
// Falls dein Wert in einer Kalibrierungslösung abweicht kannst du die -7.51 hier ändern bis es passt
phValue=phValue-7.51;
//String myData = String(analogRead(A0))
Serial.print(" pH:");
Serial.print(phValue,2);
Serial.println(" ");
//=============================oled display======================================
display.clearDisplay();
display.setTextSize(2);
display.setCursor(20,0);
display.print("PH Wert");
display.setTextSize(3);
display.setCursor(30,30);
display.print(phValue);
display.display();
sendphValue=String(phValue,2);
client.publish(pH_Topic, sendphValue.c_str());
if (!client.connected()) {
reconnect();
}
client.loop();
delay(9000);
}
Achtet auf die Bibliotheken die eingebunden werden. Diese musst du erst über Sketch Bibl. einbinden Bibl. verwalten installieren!
Eine Anleitung zum flashen findest du hier: https://makesmart.net/esp8266-d1-mini-programmieren/
Trage vor dem flashen noch deine Wlan-Zugangsdaten und deinen Broker ein. Such ggf. im Codenach dem Abschnitt für den MQTT Port. Eingetragen ist der Port 1883. Dies ist allerdings beim iobroker der Port vom Sonoff-Adapter. Ich habe daher den MQTT Broker im iobroker auf 1884 eigestellt.
Ich habe die pH-Sonde für den Wemos und die vom Phileo lt (pH-Minus-Dosiergerät) in den beiden Messzellen untergebracht damit diese nicht permanent im Hauptstrom hängen.. Der Wemos sitzt in der Abzweigdose neben dem Phileo lt
Hallo, Danke für die Anleitung,
Hast du einen Link zur PH Sonde die du verwendest?
Viele Grüße
Hallo Jacob, ich fahre aktuell mit mehren Systemen. Die aus dem Beitrag ist diese https://amzn.to/3ft8qOj . Regeln lasse ich den pH wert aber mit einer phileo dosieranlage und der blueconnect misst und sendet die Daten (Salz temp, pH und redox) an den iobroker https://amzn.to/3oY9Tzd nach den blueconnect Daten schalte ich auch den Chlorinator ein um den redox Wert zu halten
Mahlzeit
Ich habe dein Sketsch versucht aber leider verbindet er nicht zum MQTT server und das Display geht auch nicht an. Hast du einen Tip für mich?
zeig mir mal deinen Sketch. Hast du deine Wlandaten und den broker eingeragen? Pins stimmen?
Ich habe deinen den du oben reingesetzt hast kopiert und meine Wlan daten eingetragen. Und ich habe den MQTT Port noch auf 1886 geändert. Dann habe ich den sketch geprüft und aufgespielt.
Hi, habe auch dasselbe Problem. WLAN Verbindung steht, aber keine Verbindung zum MQTT Server.
Ich habe dasselbe Problem. WLAN Verbindung steht, PH Werte werden angezeigt, aber keine MQTT Verbindung
Hallo … und auch von mir erstmal ein Danke für die Anleitung.
Ich habe auch Probleme mit den connects…
1) Wo in deinem code wird ssid und password verwendet ?
Müsste da nicht sowas stehen wie…
status = WiFi.begin ( ssid, password );
if ( status != WL_CONNECTED )
Viele Grüße
fred
Hallo, vielen Dank für Deinen Blog. Hast Du das ganze auch im Winter im Einsatz? Ich lasse das Wasser über den Winter drin und bei Frost läuft die Pumpe. Jetzt würde ich natürlich gerne auch in der Winterzeit den PH und Clorwert messen. Meint Ihr, dass die Bauteile (u.a. der Sensor) das „überleben“? Danke und Gruß Micha
Hallo und vielen Dank für die Anleitung.
Nach einigen Experimenten habe ich nun das richtige Display zum „leuchten“ gebacht.
Leider ist es mir noch nicht gelungen, eine WIFI Verbindung herzustellen. Ergo auch keine
MQTT Verbindung. Der ESP bleibt in der Schleife reconnect hängen.
WIFI und MQTT Einstellungen habe ich mehrfach geprüft.
Wo kann der Fehler liegen.
Vielen Dank im voraus und einen schönen 3. Advent
Hallo,
Anleitung ist gut.
es fehlt aber etwas.
Im Abschnitt void setup() fehlt eine Zeile mit WiFi.begin(ssid, password);
Hallo Jürgen,
danke für deine Rückmeldung. Ich habe die Zeile eingefügt. Damit müsste es laufen, ich kann es aber grade nicht testen, weil die gesamte Pooltechnik für einen Umzug in Kisten verpackt ist.
Ich würd mich freuen wenn du dich mit einem Feedback meldest
Moin,
cooles Projekt und Danke das du deine Arbeit veröffentlichst.
Ich habe ebenfalls das Problem das ich keinen Connect zum MQTT bekomme.
WLAN-Daten und Port habe ich eingetragen. Wie sieht es mit Username und Passwort aus?
Kannst du mir erläutern wie ich das in deinen Scetch einbinden muss?
Danke und Grüße
Michael
Hallo Michael,
sorry an dich und die anderen die noch auf Antwort warten. Wir sind grade privat arg eingespannt und ich bin kaum dazu gekommen hier etwas neues zu veröffentlichen oder mir die Beiträge anzuschauen.
Anscheinend habe ich beim kopieren eine Zeile gelöscht.
Ich habe Jürgens Zeile eben eingefügt. Damit müsste es laufen, ich kann es aber grade nicht testen, weil die gesamte Pooltechnik für einen Umzug in Kisten verpackt ist.
Ich würd mich freuen wenn du dich mit einem Feedback meldest
Hallo Micha,
Ich persönlich beende bei uns im Herbst die Badesaison und baue dann alle Kugelhähne aus und mache das System Wasser frei um Frostschäden zu verhindern. Dabei baue ich auch alle Messvorrichtungen aus und lagere sie im Pufferlösung im Keller. Da unser Pool Licht dicht abgedeckt ist spielt der pH-Wert und der Redox wird in der kalten Jahreszeit keine Rolle. Im Frühjahr dann auswintern und alles wieder einbauen. Klappt super
Hallo,
echt geiles Projekt aber ich komme mit dem mqtt nicht klar
was hat das mit dem Mqtt auf sich ?
Lg Timo