Arduino DTH11 Temperatur- und Feuchtigkeitssensor

Arduino DTH11

Auf meiner Seite zum DS18B20-Sensor habe ich bereits dir grundlegenden Dinge zum Thema einrichten und flashen von NodeMCU Boards beschrieben.
Als nächstes war mein Ziel ein Gewächshaus mit Temperatur und Luftfeuchtigkeit zu überwachen. Im Gewächshaus liegt keine Stromversorgung an. Daher musste eine Batteriebetriebe Lösung her.
Als Sensor wird ein DHT11 Sensor verwendet. Dazu kommt ein Batterieclip für 9V Blockbatterien. Zusammen mit den Wago-Klemmen und Kabeln kann man das Ganze wie abgebildet zusammenbasteln. Den 3V und GND-Anschluss entsprechend verbinden und das Datenkabel habe ich an D4 angeschlossen.
Der passende Code dazu:

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

#define DHTTYPE DHT11 

// DHT Sensor
uint8_t DHTPin = D1; 
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                

const char* ssid = "TOLLESSID";
const char* password = "TOLLESPASSWORT";

const char* mqttServer = "mqtt.server";
const int mqttPort = 1883;
const char* mqttUser = "MqttUser";
const char* mqttPassword = "MqttUserPassword";

int connected_wlan = 0;
int connected_mqtt = 0;
 
WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
 
  Serial.begin(9600);

  int counttry_wlan = 0;
  int counttry_mqtt = 0;

  pinMode(DHTPin, INPUT);
  dht.begin();              
 
  WiFi.begin(ssid, password);

  connected_wlan = 0;
  connected_mqtt = 0;
 
  while (WiFi.status() != WL_CONNECTED && counttry_wlan < 4) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
    counttry_wlan++;
  }

  if(WiFi.status() == WL_CONNECTED){
      Serial.println("connected_wlan to the WiFi network");

      connected_wlan = 1;
  
      client.setServer(mqttServer, mqttPort);
    
      while (!client.connected() && connected_mqtt < 4) {
        Serial.println("Connecting to MQTT...");
 
        if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
     
          Serial.println("connected_wlan");
          connected_mqtt = 1;
     
        } else {
     
          Serial.print("failed with state ");
          Serial.print(client.state());
          counttry_mqtt++;
          delay(2000);     
        }
      }  

      if(connected_mqtt == 0){
         Serial.println("go to sleep");
         ESP.deepSleep(1800e6);
      }
  }else{
     Serial.println("go to sleep");
     ESP.deepSleep(1800e6);
  }
}
 
void loop() {
  //client.loop();

  if(connected_wlan == 1 && connected_mqtt == 1){

    float Temperature;
    float Humidity;
    String temp_str; 
    String hum_str;
    char temp[50];
    char hum[50];
    
    Temperature = dht.readTemperature(); // Gets the values of the temperature
    Humidity = dht.readHumidity(); // Gets the values of the humidity 
  
    temp_str = String(Temperature); //converting ftemp (the float variable above) to a string 
    temp_str.toCharArray(temp, temp_str.length() + 1); //packaging up the data to publish to mqtt whoa...
  
    hum_str = String(Humidity); //converting Humidity (the float variable above) to a string
    hum_str.toCharArray(hum, hum_str.length() + 1); //packaging up the data to publish to mqtt whoa...
  
    delay(1000);
    client.publish("/dht11/temp", temp);
    client.publish("/dht11/humidity", hum);
    delay(1000);
    ESP.deepSleep(1800e6); 
  }
}

Ich musste in Richtung Energiesparer optimieren. Daher ist ein deepSleep eingebunden. Leider ist das Ganze noch nicht richtig optimiert. Die Block-Batterien hält aktuell leider keine Woche.

(Diese Seite enthält Affiliate-Links - Datenschutz)