BastelprojekteBodenfeuchtesensorESP8266ESP8266 - SmartHome Projekte

ESP8266 Sensoren an ioBroker über MQTT – Finaler Sensor mit Solarmodul und Sensoren

In diesem Artikel zeige ich Dir meinen Fortschritt an der Entwicklung des Outdoor-Sensors.

Im ersten Schritt der Weiterentwicklung habe ich das gesamte Board ausgetauscht und den Mikroprozessor durch einen ESP8266 ESP-12E ersetzt. Die Anschlussbelegung der Sensoren wurde dabei belassen, sodass die Software zunächst nicht angepasst werden muss. Der neue Sensor für die Bodenfeuchtigkeit liefert die Daten ebenfalls über den analogen Eingang, sodass hier auch keine Anpassungen gemacht würden. Das folgende Bild zeigt den eigentlichen Sensor nach dem Aufbau.

 

 

Im nächsten Schritt wurde das Gehäuse vorbereitet und ein Schlitz für den Bodenfeuchtigkeitssensor sowie Bohrungen für die Kabel-Ausleitungen an der Unterseite des Gehäuses angebracht.

 

Das folgende Foto zeigt das Sensor-Board im Gehäuse. Nach einem Funktionstest wurden dann alle Öffnungen abgedichtet und der Bodenfeuchtigkeitssensor mit Heißkleber fixiert.

 

Im Abschluss wurde der Sensor dann im Gemüsebeet installiert.

 

 



 

 

Verwendete Materialien

 

Weitere Links zum Projekt

 

Sketch

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"

// Define NodeMCU D3 pin to as temperature data pin of DHT22
#define DHTPIN D3
#define DHTTYPE DHT22

DHT dht(DHTPIN,DHTTYPE);

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

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

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");
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();

String msg="";

pinMode(A0,INPUT);
dht.begin();
delay(2000);

// read sensor data
float h = dht.readHumidity();
float d = dht.readTemperature();
int bodenfeuchte = analogRead(A0);

// publish sensor data to mqtt server
delay(10);
client.publish("outdoor1_Lufttemperatur", String(d).c_str(),true);
delay(10);
client.publish("outdoor1_Bodenfeuchtigkeit", String(bodenfeuchte).c_str(),true);
delay(10);
client.publish("outdoor1_Luftfeuchtigkeit", String(h).c_str(),true);
delay(100);

// Go sleep for 30 minutes
ESP.deepSleep( 30 * 60 * 1000000);
delay(100);
}

void loop() {
}

 

Ich hoffe euch gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder 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.

35 Gedanken zu „ESP8266 Sensoren an ioBroker über MQTT – Finaler Sensor mit Solarmodul und Sensoren

  • Wie hast du das Solarpanel an die Box befestigt? thx

    Antwort
    • Matthias Korte

      Hallo,
      ich habe als Halterung einen alten Regalträger verwendet (z.B. diesen hier https://amzn.to/2MkJqs4)
      Den Winkel habe ich mit ein wenig Heisskleber unter das Solarpanel geklept und den Winkel mit dem Regalträger verschraubt.
      Dann kann auch das eigentliche Gehäuse mittels einer Schraube am Regalträger verschraubt werden, zudem bietet der Regalträger die Chance, nachträglich noch die Höhe des Gehäuses und somit des Sensors anzupassen. Ich hoffe ich konnte Dir damit weiterhelfen 🙂

      Grüße,
      Matthias

      Antwort
  • danke Matthias für deine Infos, Teile hab ich auch bereits geordert und werde das auch so umsetzen bis auf den DHT22 Sensor, welche Teil vom Sketch kann ich weglassen wenn ich nur den Bodenfeuchtesensor benutze?!
    danke dir
    Grüße
    Reini

    Antwort
  • Pingback: ioBroker Datenupload zu ThingSpeak – smarthome-tricks.de

  • Matthias, welche Arduino Einstellungen verwendest du hierfür oder werden eh alle Einstellungen vom Sketch überschrieben ?!
    thx, Reini

    Antwort
  • Matthias, was hast du letztendlich für ein Gehäuse verwendet? (jenes von deinem Bericht „Teil2“ wohl nicht weil du ja kleiner werden wolltest)

    Antwort
    • Matthias Korte

      Hallo,
      richtig, ist ein kleineres Gehäuse geworden. Geht aber bestimmt noch kleiner 😉
      Ich habe das hier verwendet: http://r.ebay.com/ghe7lf

      Antwort
      • Hallo Matthias,
        könntest du mir bitte ein Foto deiner Halterung zusenden damit ich mir das besser vorstellen kann
        gerne auch per Mail, dank dir Reini

        Antwort
  • Pingback: Der MQTT-Adapter – smarthome-tricks.de

  • Meik Jerzinowski

    Hallo Matthias,

    hast Du einen Ansicht der Anschlüsse an den einzelnen Platinen?

    Ich kämpfe hier, auch weil ich wahrscheinlich ein falsches TP4056 habe, da meiner keine Out´s hat.

    Danke!

    Meik

    Antwort
  • Hi,
    meiner wacht nicht mehr aus dem deepsleep auf… muss da was spezielles beachtet werden?

    Danke für die tolle Anleitung!

    Antwort
    • Matthias Korte

      Hallo,
      bitte prüfe mal deine Verkabelung, hast Du D0 mit RSP verbunden?

      Grüße,
      Matthias

      Antwort
  • Michael

    Hallo Matthias,

    ich plane gerade die Anbindung meiner Bewässerung per MQTT.
    Da kommt mir dein Sensorprojekt gerade recht 🙂 Danke dafür

    Leider funktionieren die meisten Links der benötigten Elemente nicht mehr.
    Könntest du sie bei Gelegenheit vielleicht aktualisieren?

    Grüße aus Friedberg,
    Michael

    Antwort
    • Matthias Korte

      Moin,

      danke für den Hinweis. Werde ich direkt aktualisieren.

      Antwort
      • Michael

        Vielen Dank für die aktualisierten Links.
        Bei dem Gehäuse kann ich mir noch nicht so richtig vorstellen, wie groß das Ganze wird.
        Welche Größe hat denn das Gehäuse, welches bei dir nun zum Einsatz kommt?

        Antwort
  • Hi, welche DHT-Bibliothek hast du verwendet? Arduinio bietet mir 10 verschiedene an.

    Antwort
  • Stephan

    Hallo
    beim ausführen deines Sketches, bekomme ich folgenden Fehler und weiß leider nicht weiter

    sketch_jun14c:3:17: error: DHT.h: No such file or directory

    #include „DHT.h“

    ^

    compilation terminated.

    exit status 1
    DHT.h: No such file or directory

    Welche DHT Bibliothek muss ich denn auswählen?

    Hoffe du kannst mir helfen.

    MFG Stephan

    Antwort
    • Matthias Korte

      Moin Stephan,

      hast Du im Bibliotheksverwalter die Library für den DHT-Sensor installiert?
      Ich habe die Adafruit DHT sensor library (Version 1.3.0) im Einsatz.

      Viele Grüße,
      Matthias

      Antwort
  • Stephan

    Hallo Matthias

    Erstmal danke für deine schnelle Antwort

    Hatte jeden DHT mal ausprobiert, keiner ging. Habe es nochmal mit dem von dir genannten probiert.

    Nun kommt folgender Fehler :

    In file included from C:\Users\Megapoort\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.cpp:22:0:

    C:\Users\Megapoort\Documents\Arduino\libraries\DHT_sensor_library\DHT_U.h:25:29: fatal error: Adafruit_Sensor.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Fehler beim Kompilieren für das Board WeMos D1 R1.

    MFG

    Stephan

    Antwort
  • Stephan

    Hallo Matthias

    Habe nochmal nen bissel geschaut und anscheinend den Fehler gefunden.

    Habe alle Versionen von dem von dir genannten DHT probiert.

    Bis zu der Version 1.2.3. geht es ohne probleme, alle die danach kommen, gehen nicht mehr, also ab 1.3.0.

    Komisch das bei dir 1.3.0 geht.

    Mfg Stephan

    Antwort
  • Stephan

    Hallo Matthias

    Das nächste Problem lässt nicht lange auf sich warten 🙁

    Der Sketch wurde erfolgreich aufgespielt. In der Fritzbox soweit auch erkannt und eingerichtet.

    Aber im IoBroker bekomme ich nichts angezeigt.

    Die Mqtt Server IP im Sketch habe ich auf die IP des IoBroker geändert.

    Den Port habe ich im Sketch von 1883 auf 1888 geändert, weil ich schon andere Geräte mit dem Port im Mqtt laufen habe.

    Bei mir läuft Mqtt mit Username und PW, muss ich das im Sketch irgendwo eingeben, habe da nichts zu gefunden. In deinem ersten Sketch wurde das abgefragt, in dem aktullen nicht mehr, oder seh ich das nur nicht oder ist das nicht wichtig?

    Bei meinen anderen Mqtt Projekte musste ich Username und PW eingben.

    Mfg Stephan

    Antwort
    • Stephan

      Hallo Matthias

      Hast du schon eine Idee, wie die Lösung für das Problem sein könnte?

      Mfg

      Stephan

      Antwort
  • Arnulf Henrich

    Hallo,
    vielen Dank für den Artikel.
    Genau so einen Bodenfeuchtesensor wollte ich auch bauen.
    Zwar nicht mit Luft-Sensor und auch ohne Solar, aber das Prinzip wäre gleich.
    Was ich noch nicht ganz verstanden habe:
    Ich wollte möglichst den Akku schonen. Also auch mit Deep-Sleep arbeiten.
    Ich verstehe die Schaltung aber so, dass zwar der ESP einschläft, aber der kapazitive Sensor trotzdem immer noch mit Dauerstrom arbeitet. Das wäre suboptimal.

    Oder mache ich hier einen Denkfehler?

    Antwort
  • Wie viele Bodenfeuchtesensoren kann ich an einen nodemcu esp8266 dranhängen?

    Antwort
  • Axel

    Hallo Matthias,

    ich bekomme leider, wie mein Vorredner Stefan, auch mit der Library V1.2.3 die folgende Meldung:

    ESP8266_Bodenfeuchte_Temp:3:17: error: dht.h: No such file or directory

    #include „dht.h“

    ^

    compilation terminated.

    exit status 1
    dht.h: No such file or directory

    Bestünde die Möglichkeit, die Library von deiner Seite aus zu überprüfen?

    Danke und viele Grüße 🙂

    Antwort
  • Florian Kraus

    Hallo.

    Wie muss ich denn den Sketch anpassen, wenn ich einen ads1115 mit 2 oder 3 Bodenfeuchte Sensoren verwenden möchte?

    Gruß Flo

    Antwort
  • Marco

    Hi, kannst du nochmal ein Bild/Skizze mit der Verkabelung inkl. des Ladereglers machen.

    Antwort
  • Moin und vielen Dank für die Anleitung.
    Genau das was ich gesucht habe.
    Ich habe nur noch 2 Probleme. Vielleicht hast du eine Idee.
    Der Bodenfeuchtigkeitssensor gibt immer nur 1 aus. Bei der Suche ist mir aufgefallen, dass der für 5V ausgelegt ist, du hast ihn bei dir aber auch an 3,3 V angeschlossen.
    Außerdem funktioniert der DeepSleep bzw. das aufwachen bei mir nicht obwohl ich den RST PIN mit D0 (Wake up) Verbunden habe.

    Danke!

    Antwort
  • Hermann-Josef Stark

    Hallo Mattihas,
    ich komme hier nicht weiter, habe deinen Sketch kompiliert und er bricht mit diese Fehlermeldun ab.

    Arduino: 1.8.13 (Linux), Board: „NodeMCU 0.9 (ESP-12 Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), v2 Lower Memory, Disabled, None, Only Sketch, 115200“

    Outdoor3:9:1: error: expected initializer before ‚DHT‘
    DHT dht(DHTPIN,DHTTYPE);
    ^
    /home/hstark/Dokumente/arduinoprojecte/Outdoor3/Outdoor3.ino: In function ‚void setup()‘:
    Outdoor3:79:4: error: expected unqualified-id before ‚.‘ token
    dht.begin();
    ^
    Outdoor3:83:14: error: expected primary-expression before ‚.‘ token
    float h = dht.readHumidity();
    ^
    Outdoor3:84:14: error: expected primary-expression before ‚.‘ token
    float d = dht.readTemperature();
    ^
    Mehrere Bibliotheken wurden für „PubSubClient.h“ gefunden
    Benutzt: /home/hstark/Dokumente/arduinoprojecte/libraries/pubsubclient
    Nicht benutzt: /home/hstark/Arduino/arduino-1.8.13/libraries/pubsubclient
    exit status 1
    expected initializer before ‚DHT‘

    Hier mein Skript bis zum Abbruch:
    #include
    #include
    #include „dht.h“
    dht DHT
    // Define NodeMCU D3 pin to as temperature data pin of DHT22
    #define DHTPIN D3
    #define DHTTYPE DHT22

    DHT dht(DHTPIN,DHTTYPE);

    Antwort
    • Matthias Korte

      Hallo Hermann,

      hast Du die entsprechende Bibliothek für den DHT Sensor auch installiert?

      LG Matthias

      Antwort
      • Hermann-Josef Stark

        Hallo Mattias, ich hatte eine installiert, aber da kam auch eine Fehlermeldung. Nach dem ich die Kommentare gelesen habe, habe ich die von Adafruit installiert

        Antwort
        • Matthias Korte

          Alles klar, das werde ich im Artikel direkt anpassen. Danke für die Rückmeldung 🙂

          Antwort
  • Thorsten Alex

    Hallo ich versuche den Sensor auch gerade zu bauen und hab da ein paar Fragen zu.

    Koennte man den DHT 11 auch weglassen und und nur den feuchtesensor nehmen wenn jha was muesste ich da alles weglassen.

    Gruss Thorsten

    Antwort
  • Pingback: ESP8266: Pinout, Tutorials, Projekte, Programmierung und alles Wichtige, was Du wissen musst

Schreibe einen Kommentar zu Matthias Korte Antworten abbrechen

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