BastelprojekteBodenfeuchtesensorESP8266ESP8266 - SmartHome ProjekteioBrokerioBroker Tutorials

NodeMCU ESP8266 Sensoren an ioBroker über MQTT – #2 weiterer Sensor und Test-Gehäuse

Im zweiten Teil der Reihe wird ein weiterer Sensor sowie ein Gehäuse für den Sensor hinzugefügt.Im vorherigen Teil haben wir einen Temperatur und Luftfeuchtigkeitssensor mittels WLAN und dem MQTT-Protokoll an ioBroker angebunden. In diesem Teil wird das bestehende Board um einen Bodenfeuchtigkeitssensor sowie die Grundplatine und ein passendes Gehäuse erweitert. Der komplette Sensor soll im Blumenbeet seinen vorläufigen Platz finden und dort fröhlich Daten sammeln.

In der folgenden Aufstellung zunächst wieder die verbauten Teile:

Da der Bodensensor nach wenigen Wochen keine brauchbaren Werte mehr liefert (Sensor löst sich auf) habe ich anstatt der Messstifte einfach zwei Drahtstifte (12cm Länge) verbaut, welche an die bestehende Sensor-Platinen Eingänge angelötet werden. Mit diesen Stiften werde ich nun einen ersten Outdoor-Test starten.

Das folgende Schaltbild zeigt den Aufbau der Schaltung. Ich habe die Schaltung zunächst auf einem Steckboard aufgebaut und getestet. Im nächsten Schritt habe ich dann die Komponenten auf einer Lochraster-Platine platziert und einen möglichst kleinen Aufbau zu erzielen, sodass dieser in das Testgehäuse passt. Die einzelnen Komponenten wurden dabei nicht direkt auf die Platine gelötet, sondern können auf die entsprechenden Buchsenleisten aufgesteckt werden. Die externen Sensoren werden über Schraubverbinder angebunden. Somit kann ich bei Bedarf einzelne Sensoren auch wieder austauschen und das System anpassen.

Um den Sensor möglichst lange mit einer Akku-Ladung betreiben zu können, wurde zudem ein DeepSleep Jumper integriert, mit dem ich den ESP8266 über den DeepSleep-Befehl für eine maximale Dauer von 71 Minuten schlafen lassen kann. Für meinen Test lasse ich den Sensor alle 15 Minuten die Daten über WLAN und dem MQTT-Protokoll übertragen.

 

Der fertige Prototyp wird nun nochmals getestet und kann dann in das Gehäuse einziehen.



Nach dem auch die letzten Tests positiv verlaufen sind, habe ich dann den Sensor in sein Test-Gehäuse verbaut und mittels einer 5600 mAh Stunden Powerbank ausgestattet. Damit werde ich den Sensor jetzt die nächsten Tage fröhlich Daten aufzeichnen lassen.

Nach nun zwei Tagen Datenaufzeichnung via ioBroker bin ich mit den ersten Ergebnissen sehr zufrieden. Im ersten Diagramm wird die Bodenfeuchtigkeit dargestellt. Hier habe ich am 27.04 gegen 20:00 Uhr die Gartenbewässerung aktiviert, wodurch der Kurve einen deutlichen Knick nach unten macht. Je geringer der Wert ausfällt, desto feuchter ist der Boden.

Auch die Aufzeichnung der Lufttemperatur und Luftfeuchtigkeit funktioniert soweit, wobei der Temperatursensor (DHT11) keine wirklich genauen Werte ermittelt. Hier werde ich nochmals einen anderen Sensor einsetzen und damit testen. Ich habe mittlerweile diesen Sensor bestellt um damit nochmals testen zu können:

Im Großen und Ganzen sieht das aber alles schon sehr gut aus. Ich werde den Test jetzt weiterlaufen lassen und weitere Daten erheben um auch zum Thema Akkulaufzeit weitere Aussagen treffen zu können.

Im nächsten Schritt soll der Sensor dann mit einem deutlich kleineren Akku sowie einer Solar-Zelle und Laderegler ausgestattet werden. Zudem möchte ich den Sensor in einem kleineren Gehäuse unterbringen um ihn besser im Garten platzieren zu können.

Update, hier nun nach vielfachem Wunsch der Sketch:

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <dht.h>
dht DHT;

// Define NodeMCU D3 pin to as temperature data pin of DHT11
#define DHT11_PIN D3

const int echoPin = A0; //D3
int Feuchtigkeit;

// Update these with values suitable for your network.
const char* ssid = "XXX";
const char* password = "XXX";
const char* mqtt_server = "192.168.2.90";
const char* SensorName = "outdoor1";

WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;

void setup_wifi() {
delay(100);
// We start by connecting to a WiFi network
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
randomSeed(micros());
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}

void reconnect()
{
// Loop until we're reconnected
while (!client.connected())
{
Serial.print("Attempting MQTT connection...");

if (client.connect(SensorName))
{
Serial.println("connected");
//once connected to MQTT broker, subscribe command if any
client.subscribe("OsoyooCommand");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 6 seconds before retrying
delay(6000);
}
}
}

void setup()
{
pinMode(echoPin, INPUT);
Serial.begin(9600);
setup_wifi();
client.setServer(mqtt_server, 1883);

if (!client.connected()) {
reconnect();
}

client.loop();

Feuchtigkeit = analogRead(echoPin);

String msg="";
char MsgBodenFeuchtigkeit[25];

msg = Feuchtigkeit;
msg.toCharArray(MsgBodenFeuchtigkeit,25);

int chk = DHT.read11(DHT11_PIN);
char MsgTemp[25];
char MsgFeuchtigkeit[25];

msg= DHT.temperature;
msg.toCharArray(MsgTemp,25);

msg=DHT.humidity;
msg.toCharArray(MsgFeuchtigkeit,25);

// Publizieren der Daten
client.publish("outdoor1_Bodenfeuchtigkeit", MsgBodenFeuchtigkeit);
delay(10);
client.publish("outdoor1_Lufttemperatur", MsgTemp);
delay(10);
client.publish("outdoor1_Luftfeuchtigkeit", MsgFeuchtigkeit);
delay(10);

delay(10);
delay(10);
delay(10);

// DeepSleepModus aktivieren und in 30 Minuten wieder aufwachen
ESP.deepSleep( 60 * 60 * 1000000);
delay(500);
}

void loop()
{
}

Ich hoffe euch gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder Feedback per E-Mail freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

13 Gedanken zu „NodeMCU ESP8266 Sensoren an ioBroker über MQTT – #2 weiterer Sensor und Test-Gehäuse

  • binget

    Hallo, das klingt alles sehr spannend. Ich wäre an dem Sketch interessiert 🙂

    Antwort
  • Eckhard Gerwien

    Ich bin auch am Sketch interessiert.

    Antwort
    • Ralf

      Bestrome den Feutigkeitssensor nur wenn du auch messen willst und er wird deutlich länger halten!

      Antwort
  • Hi, welche Bibliotheken muß man installieren um das Sketch kompilieren zu können?

    Gruß

    Antwort
      • Hallo,

        ich suche nach der Bibliothek, da in dem Sketch nach dieser verlangt wird. Wenn ich das Include von dht.h nach DHT.h ändere bekomme ich immer Fehlermeldungen beim Kompilieren. Das ist im Moment nein Problem.

        Gruß

        Antwort
        • Marvin

          Ich stehe vor dem selben Problem. Hast du schon eine Lösung gefunden?

          Der Autor des Beitrags Interessiert sich ja auch nicht weiter dafür, Schade!

          Antwort
          • Matthias Korte

            Hallo,
            ist mir leider irgendwie untergegangen, sorry.

            Ändert mal bitte das include auf ( #include „DHT.h“ ).
            Der restliche Code sollte so dann trotzdem funktionieren, falls nicht, schickt mir mal bitte eure Fehermeldung.

            Viele Grüße,
            Matthias

  • Reiner Feldkamp

    Hallo,
    habe jetzt die Arduino libraries und my sensor libraries getestet.

    Ardunio wirft immer den Fehler aus: ‚class DHT‘ has no member named ‚temperatrure‘
    und MY Sensors immer: ‚class DHT‘ has no member named ‚read11‘.

    read und get funktioniert auch nicht. Ardunio IDE ist version : 1.8.8.

    daher die Frage nach der dht.h library die hier benutzt wird.

    grüße

    Reiner

    Antwort
  • Pingback: ESP8266 Sensoren an ioBroker über MQTT – Finaler Sensor mit Solarmodul und Sensoren – smarthome-tricks.de

  • Josef Jessnitz

    Hallo zusammen,
    soweit so gut, aber mein MQTT-Server benötigt „User“ + „Passwort“☹️

    Wo und wie kann ich das im Sketch unterbringen. Nur mit IP- Adresse bekomme ich immer
    Attempting MQTT connection… failed, rc=5 try Alain in 5 seconds 🤨

    Antwort
  • Claas

    Hallo zusammen,
    ich möchte das ganze mit einem BME280 umsetzen. An die Daten für Temp, Feuchtigkeit und Luftdruck komme ich auch, allerdings werden diese mir nicht im ioBroker angezeigt. Ich sehe die Nachrichten für die Werte, aber es kommen keine Zahlenwerte an. Hat da jemand eine Idee? Ich bin mir auch nicht sicher, ob die MQTT Verbindung richtig hergestellt wird, weil im ioBroker Protokoll „connection closed: timeout“ angezeigt wird.

    Ich hoffe mir kann hier jemand weiterhelfen.

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.