IT97 Blog

12. Januar 2024

Arduino und der DHT21

Sensordaten

Spannung: 3,3V bis 5,2V
Temperatur: -40 bis 80°C, ±0.5°C Genauigkeit
Luftfeuchtigkeit: 0-99.9%,  3%RH Genauigkeit

Benötigte Bauteile

Arduino UNO, Mega ect.
DHT21
Kabel


/* How to use the DHT-21 sensor with Arduino uno
   Temperature and humidity sensor
  
//Libraries
#include <dht.h>
dht DHT;
//Constants
#define DHT21_PIN 2     //what pin we're connected to

//Variables
float hum;  //Stores humidity value
float temp; //Stores temperature value

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

void loop()
{
    int chk = DHT.read21(DHT21_PIN);
    //Read data and store it to variables hum and temp
    hum = DHT.humidity;
    temp= DHT.temperature;
    //Print temp and humidity values to serial monitor
    Serial.print("Humidity: ");
    Serial.print(hum);
    Serial.print(" %, Temp: ");
    Serial.print(temp);
    Serial.println(" Celsius");
    delay(2000); //Delay 2 sec.
}

#include <DHT.h>
#include <PubSubClient.h>
#include <WiFi.h>

// WiFi-Details
const char* ssid = "Ihr_WiFi_Name";
const char* password = "Ihr_WiFi_Passwort";

// MQTT-Server
const char* mqtt_server = "MQTT_Broker_Adresse";

WiFiClient espClient;
PubSubClient client(espClient);

// DHT Sensor
#define DHTPIN 2     // Der Pin, an dem der Sensor angeschlossen ist
#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  setup_wifi();
  client.setServer(mqtt_server, 1883);
  dht.begin();
}

void setup_wifi() {
  delay(10);
  Serial.println("Verbindung zu WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi verbunden");
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  // Lesen der Temperatur und Feuchtigkeit
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Überprüfung, ob die Messung gültig ist
  if (isnan(h) || isnan(t)) {
    Serial.println("Fehler beim Lesen des Sensors!");
    return;
  }

  // Daten auf Serial ausgeben
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(h);
  Serial.print("%  Temperatur: ");
  Serial.print(t);
  Serial.println("°C ");

  // Daten an MQTT senden
  char tempString[8];
  dtostrf(t, 1, 2, tempString);
  client.publish("home/temperature", tempString);

  char humString[8];
  dtostrf(h, 1, 2, humString);
  client.publish("home/humidity", humString);

  delay(2000); // Warte 2 Sekunden zwischen Messungen
}

void reconnect() {
  // Verbindungsversuche, bis die Verbindung steht
  while (!client.connected()) {
    Serial.print("Versuche, eine MQTT-Verbindung herzustellen...");
    if (client.connect("ArduinoClient")) {
      Serial.println("verbunden");
    } else {
      Serial.print("fehlgeschlagen, rc=");
      Serial.print(client.state());
      Serial.println(" erneuter Versuch in 5 Sekunden");
      delay(5000);
    }
  }
}
About Dirscher Martin
IT-Administrator - Tech.- & eMobility Enthusiast. - Lizenzierte Drohnen Pilot