ESP32 mit DHT11 Sensor, kapazitiven Bodenfeuchtesensor & LiPo Batterie

In diesem Beitrag möchte ich dir zeigen, wie du den ESP32 Baustein mit DHT11 Sensor, kapazitiven Bodenfeuchtesensor & LiPo Batterie programmierst und betreibst.

ESP32 mit DHT11, kapazitiven Bodenfeuchtesensor, LiPo Batterie
ESP32 mit DHT11, kapazitiven Bodenfeuchtesensor, LiPo Batterie

Im letzten Beitrag Arduino Projekt – Bodenfeuchtesensor & OLED Display habe ich dir bereits gezeigt, wie du die Daten von einem solchen Bodenfeuchtesensor auf einem OLED Display anzeigen lassen kannst. Mit dem verbauten ESP32 Chip hat man nun die Möglichkeit die Sensordaten auch an ein IoT Dienst wie ThingsSpeak zu senden und dort grafisch anzeigen zu lassen.

Bezug des ESP32 Bausteins

Den mir vorliegenden Baustein habe ich über wish.com für knapp 12 € inkl. Versandkosten bestellt. Du bekommst diesen aber auch auf ebay.de jedoch zu einem Preis von knapp 16 € inkl. Versandkosten.

Mikrocontroller ESP32

Auf dem Baustein ist der Mikrocontroller vom Typ ESP32 verbaut, dieser hat folgende technische Daten:

KernXtensa Dual-Core 32-bit LX6
max. Taktfrequenz240 MHz
SchnittstellenCAN, I²C, I²C, SDIO, SPI, UART
Speicher448 KB ROM,
520 KB SRAM
16 KB SRAM in RTC
WiFi802.11b/g/n
BluetoothDual-Mode Bluetooth, BLE
Auszug aus den technischen Daten des ESP32-D0WDQ6

In der Arduino IDE wird dieses Modul als ESP32-D0WDQ6 erkannt.

esptool.py v3.1
Serial port COM28
Connecting.....
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 80:7d:3a:a3:d7:78

Aufbau des ESP32 mit DHT11 & Bodenfeuchtesensor

Der Mikrocontroller ist bestückt mit:

  • einem einfachen DHT11 Sensor,
  • einen kapazitiven Bodenfeuchtesensor, sowie auf der Rückseite
  • ein Batteriefach für eine 18560 LiPo Batterie
Sensor – DatenpinPin am ESP32
DHT11GPIO22
kapazitiver BodenfeuchtesensorGPIO32
Anschluss der Sensoren am ESP32 Baustein

Zusätzlich ist auf der Platine ein Schalter angebracht, welcher mit „ON/OFF“ beschriftet ist.

Ein/Aus Schalter für den ESP32 Baustein
Ein/Aus Schalter für den ESP32 Baustein

Einsetzen der LiPo Batterie

Auf der Rückseite des Bausteins ist eine Halterung für eine LiPo Batterie vom Typ 18650 angebracht, wobei die Pole jeweils mit + & – markiert sind.

ESP32 Baustein & LiPo Batterie 18650
ESP32 Baustein & LiPo Batterie 18650

Beim Einsetzen der LiPo Batterie muss man auf die korrekte Polung achten, ansonsten kann diese oder der Mikrocontroller einen Schaden nehmen!

Programmieren in der Arduino IDE

Da keine gesonderte Verkabelung notwendig ist, können wir fast direkt mit der Programmierung beginnen. Wir benötigen lediglich den Boardtreiber für den ESP32 und eine zusätzliche Bibliothek für den DHT11 Sensor.

Wie du den Boardtreiber für den ESP32 installierst, habe ich dir bereits im Beitrag NodeMCU – „Einer für (fast) Alles!“ erläutert.

Den DHT11 Sensor habe ich bereits in diverse Beiträge eingesetzt und dir auch gezeigt, wie man die Sensordaten an ThingSpeak sendet.

Installieren der DHT11 Bibliothek

Im Bibliotheksverwalter der Arduino IDE findest du diverse Bibliotheken für den DHT11 Sensor, jedoch habe ich sehr gute Erfahrung mit der „DHT sensor library by Adafruit“ gemacht.

Bibliotheksverwalter - installieren der Adafruit DHT11 Bibliothek
Bibliotheksverwalter – installieren der Adafruit DHT11 Bibliothek

Einrichten des ESP32 Chips in der Arduino IDE

Der ESP32 wird wie folgt in der Arduino IDE konfiguriert:

Konfiguration des ESP32 in der Arduino IDE
Konfiguration des ESP32 in der Arduino IDE

Einzig der COM-Port kann bei dir variieren.

Besonderheiten beim Upload eines Sketches

Wenn du einen Sketch / ein Programm auf den Mikrocontroller hochladen möchtest, dann musst du wenn die Zeile nachfolgende Zeile ausgegeben wird, die Taste „Boot“ betätigen.

Der Sketch verwendet 238129 Bytes (18%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
Globale Variablen verwenden 12168 Bytes (3%) des dynamischen Speichers, 315512 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.
esptool.py v3.1
Serial port COM28
Connecting.......

Auslesen des DHT11 Sensors

Der Vollständigkeithalber möchte ich dir zunächst zeigen wie du die Sensordaten des DHT11 Sensors ausliest.

//DHT Bibliothek
#include "DHT.h"
//DHT Sensor am digitalen Pin 22
#define DHTPIN 22
//Sensortyp DHT11
#define DHTTYPE DHT11
//Instanziieren eines Objektes
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));
  //beginn der Kommunikation mit dem DHT11 Sensors
  dht.begin();
}

void loop() {
  //eine kleine Pause von 2 Sekunden,
  //der DHT11 Sensor liefert alle 2,5 Sekunden ein neuen Wert
  delay(2000);
  //lesen der rel. Luftfeuchtigkeit
  float h = dht.readHumidity();
  //lesen der Temperatur in Grad Celsius
  float t = dht.readTemperature();
  //lesen der Temperatur in Grad Fahrenheit
  float f = dht.readTemperature(true);

  //Wenn einer der gelesenen Werte fehlerhaft ist,
  //gebe eine Fehlermeldung aus.
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }

  //Berechnen des HeatIndex
  //Der Hitzeindex (HI) ist eine in Einheiten der Temperatur angegebene Größe
  //zur Beschreibung der gefühlten Temperatur auf Basis der gemessenen
  //Lufttemperatur sowie vor allem der relativen Luftfeuchtigkeit.
  //siehe https://de.wikipedia.org/wiki/Hitzeindex#:~:text=Der%20Hitzeindex%20(HI)%20ist%20eine,vor%20allem%20der%20relativen%20Luftfeuchtigkeit.
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);

  //Ausgeben der Daten auf der seriellen Schnittstelle
  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}

Auf der seriellen Schnittstelle werden die Daten dann Zeilenweise wie folgt ausgegeben.

Ausgabe der DHT11 Sensordaten
Ausgabe der DHT11 Sensordaten

Ermitteln der Bodenfeuchtigkeit mit dem Bodenfeuchtesensor

Wie du einen kapazitiven Bodenfeuchtesensor ausliest, habe ich dir auch bereits in den nachfolgenden Beiträgen gezeigt:

Hier möchte ich dir lediglich kurz der Vollständigkeitshalber ein Sketch anbieten, welches den Wert auf der seriellen Schnittstelle ausgibt.

//analoger kapazitiver Bodenfeuchtesensor am Pin 32
#define SENSOR_PIN 32

void setup() {
  //beginn der seriellen Kommunikation mit 9600 baud
  Serial.begin(9600);
}
void loop() {
  //auslesen der Sensorwertes
  int sensorValue = analogRead(SENSOR_PIN);
  //ausgeben des Sensorwertes auf der seriellen Schnittstelle
  Serial.println(sensorValue);
  //eine kleine Pause von 1,5 Sekunden
  delay(1500);
}

Die Sensorwerte werden im oben gezeigten Sketch einfach auf der seriellen Schnittstelle ausgegeben.

Ausgabe der Sensorwerte vom Bodenfeuchtesensor am ESP32
Ausgabe der Sensorwerte vom Bodenfeuchtesensor am ESP32

Wie gehts es nun weiter?

Der ESP32 verfügt über eine WiFi sowie Bluetooth Schnittstelle, diese beiden können wir nutzen um die Sensordaten zbsp an ein Handy oder einen IoT Service wie ThingSpeak zu senden.

Im nächsten Beitrag möchte ich dir daher zeigen, wie du diesen Baustein autark über eine LiPo Batterie und die Sensordaten erstmal über eine Webseite bereitstellen kannst.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert