Arduino DTH11 Temperatur- und Feuchtigkeitssensor

Arduino DTH11

Auf meiner Seite über den DS18B20-Sensor habe ich bereits die grundlegenden Dinge zum Thema Konfiguration und Flashen von NodeMCU Boards beschrieben.
Als nächstes wollte ich ein Gewächshaus mit Temperatur und Luftfeuchtigkeit überwachen. Das Gewächshaus hat keinen Stromanschluss. Deshalb musste eine batteriebetriebene Lösung gefunden werden.
Als Sensor wurde 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. Die 3V und GND Klemmen sind entsprechend verbunden und das Datenkabel habe ich an D4 angeschlossen.
Hier der entsprechende Code:

#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)