smarthome-tricks.de

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 🙂

Die mobile Version verlassen