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
- ESP8266 ESP-12E
- Leiterplatten für Board (z.B. diese hier: Leiterplatten-Set)
- Temperatur und Luftfeuchtigkeitssensor DHT22
- Analoger kapazitiver Bodenfeuchtesensor
- TP4056 Lademodul Lithium Akku
- Akku 18650 3,7V 2.600 mAh
- Akkuhalter 18650 – Gibt’s auch günstiger auf ebay 🙂
- Solarmodul 6V, 3Watt
- Gehäuse – In der Liste die gewünschte Größe auswählen
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 ?
Wie hast du das Solarpanel an die Box befestigt? thx
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
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
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
Matthias, was hast du letztendlich für ein Gehäuse verwendet? (jenes von deinem Bericht „Teil2“ wohl nicht weil du ja kleiner werden wolltest)
Hallo,
richtig, ist ein kleineres Gehäuse geworden. Geht aber bestimmt noch kleiner 😉
Ich habe das hier verwendet: http://r.ebay.com/ghe7lf
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
Pingback: Der MQTT-Adapter – smarthome-tricks.de
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
Hi,
meiner wacht nicht mehr aus dem deepsleep auf… muss da was spezielles beachtet werden?
Danke für die tolle Anleitung!
Hallo,
bitte prüfe mal deine Verkabelung, hast Du D0 mit RSP verbunden?
Grüße,
Matthias
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
Moin,
danke für den Hinweis. Werde ich direkt aktualisieren.
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?
Hi, welche DHT-Bibliothek hast du verwendet? Arduinio bietet mir 10 verschiedene an.
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
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
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
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
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
Hallo Matthias
Hast du schon eine Idee, wie die Lösung für das Problem sein könnte?
Mfg
Stephan
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?
Wie viele Bodenfeuchtesensoren kann ich an einen nodemcu esp8266 dranhängen?
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 🙂
Hallo.
Wie muss ich denn den Sketch anpassen, wenn ich einen ads1115 mit 2 oder 3 Bodenfeuchte Sensoren verwenden möchte?
Gruß Flo
Hi, kannst du nochmal ein Bild/Skizze mit der Verkabelung inkl. des Ladereglers machen.
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!
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);
Hallo Hermann,
hast Du die entsprechende Bibliothek für den DHT Sensor auch installiert?
LG Matthias
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
Alles klar, das werde ich im Artikel direkt anpassen. Danke für die Rückmeldung 🙂
Halli Hallo,
Vielen Dank für den Beitrag bzw. Die Anregungenähnlich bin ich dann auch vorgegangen, nur dass ich eine PowerBank mit integriertem SolarPanel nutze. Hier geht’s zu meiner Anleitung:
http://ihr-it-profi.de/index.php/blog
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
Pingback: ESP8266: Pinout, Tutorials, Projekte, Programmierung und alles Wichtige, was Du wissen musst