smarthome-tricks.de

NodeMCU ESP8266 Sensoren an ioBroker über MQTT – #1 Prototyp

In diesem Artikel zeige ich, wie Du deinen eigenen Sensor auf NodeMCU ESP8266 Basis in ioBroker integrieren kannst.Vor wenigen Tagen kam mein NodeMCU ESP8266 Starter Kit. In diesem Paket liegt ein NodeMCU ESP8266 Board mit viel Zubehör und einer CD mit vielen Erklärungen und Beispielen. Mein Ziel war es einen einfachen Temperatur und Luftfeuchtigkeitssensor mittels diesem Board zu implementieren, welches die Daten über das integriere WIFI-Board und MQTT an den ioBroker überträgt. Bevor wir nun loslegen, hier der Amazon-Link zum Starter Kit, welches ich verwendet habe:

1. Benötigte Produkte

Wer nicht alle Sensoren und Komponenten des Start-Kits benötigt, kann sich die NodeMCU, den DHT11 Sensor und die Jumper-Kabel natürlich auch einzeln kaufen. Als Einsteiger empfehle ich aber auf jeden Fall das Starter-Kit, da hier auch die Konfiguration und Installation der Entwicklungsumgebung erklärt wird.

2. Installation und Konfiguration der Entwicklungsumgebung

Die Einstellungen und Konfoguration von Arduino lasse ich hier mal aus, da es sonst zu umfangreich wird. Alle erforderlichen Schritte sind ausführlich im Starter-Kit beschrieben und sollten mittels den Beispielen auch einmal exemplarisch durchgeführt werden.

3. Aufbau der Schaltung (Prototyp)
Für die Schaltung benötigen wir nun folgende Produkte (alle im Starter-Kit enthalten)
– NodeMCU Board
– DHT11 Temperatur- und Luftfeuchtigkeitssensor
– Jumper Kabel

Im ersten Schritt bauen wir nun auf unserem Prototyp-Board folgende Schaltung auf:



Nach dem die wirklich sehr einfache Schaltung aufgebaut wurde, schreiben wir nun unseren Sketch um die Sensordaten auszulesen und mittels MQTT an den ioBroker zu senden.

#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

// 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";

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...");
    // Create a random client ID
    String clientId = "ESP8266Client-";
    clientId += String(random(0xffff), HEX);
    // Attempt to connect
    //if you MQTT broker has clientID,username and password
    //please change following line to    if (client.connect(clientId,userName,passWord))
    if (client.connect(clientId.c_str()))
    {
      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() 
{
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
}

void loop() 
{
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  long now = millis();
  // read DHT11 sensor every 6 seconds
  if (now - lastMsg > 10000) {
     lastMsg = now;
     int chk = DHT.read11(DHT11_PIN);
     String msg="";
     char MsgTemp[25];
     char MsgFeutigkeit[25];     
 
     msg= DHT.temperature;
     msg.toCharArray(MsgTemp,25); 
         
     msg=DHT.humidity;
     msg=msg+"%";
     msg.toCharArray(MsgFeutigkeit,25);     
          
     client.publish("Temp", MsgTemp);
     client.publish("Feuchtigkeit", MsgFeutigkeit);
  }
}

Hinweis: Im Sketch muss die SSID, das Kennwort sowie die IP-Adresse des ioBrokers angepasst werden.

Diesen Sketch müssen wir nun per Arduino IDE auf die NodeMCU hochladen.

4. Konfiguration des ioBroker MQTT Adapters
Im ersten Schritt der Konfiguration wechseln wir nun in die Administrationsoberfläche und installieren den Adapter „MQTT Broker/Client“.

Nach der Installation des Adapters wird die Konfiguration geöffnet.
Hier wählen wir bei Typ „Server/broker“ und speichern und schließen die Einstellungen.

Nach der Konfiguration können wir nun den Adapter starten und auch die NodeMCU mit Strom versorgen und damit den Sketch starten.
Nach dem der Adapter und die NodeMCU gestartet wurden, dauert es ca. 10 Sekunden, bis die ersten Informationen in den Objekten des ioBroker sichtbar sind 🙂

So einfach lassen sich eigene Sensoren mittels MQTT und dem NodeMCU Board in ioBroker integrieren. Das war erst der Anfang, ich werde mit diesem genialen Projekt definitiv noch weitere Sensoren oder Aktoren realisieren. Im nächsten Artikel werde ich das ganze in ein Gehäuse einbauen und evtl. noch mit einem Display versehen. Fragen wie immer in die Kommentare oder üer E-Mail 🙂

Die mobile Version verlassen