Aktionen

ESP8266 Wemos D1 Mini mit DHT22 Sensor Beispiel

Aus znilwiki

Da ich fast 2h rumprobieren musste um an einen Wemos D1 Mini einen DHT22 Sensor zu betreiben - hier nun meine erfolgreiche Version.
Ein Problem war das in vielen anderen Beispielen der Pin D8 genutzt wird - wenn der DATA Pin des DHT22 daran hängt konnte ich den ESP8266 nicht mehr flashen und er bootete auch nach einem Reset nicht mehr.
Ein anderes Problem war die Bezeichnung des Pin bei der Verwendung der DHT-Bibliothek.


1 Bauteile

  • 1 x Wemos D1 Mini
  • 1 x DHT22 Sensor
  • 1 x 10KOhm Wiederstand



2 Schaltung

Der DHT22 hat zwar 4 Pins, genutzt werden aber nur diese 3:

ClipCapIt-190228-204541.PNG
VCC  :  Stromversorgung mit 3,3V oder 5V (funktioniert beides) / Plus
DATA :  Zum Auslesen der Daten
GND  :  Masse / Minus


Die Schaltung sieht so aus:
DHT22 WemosD1Mini Steckplatine.png Der Widerstand hat eine Größe von 10KOhm.


3 Arduiono Entwicklungsumgebung

Ich nutze das Programm Arduino zur Programmierung. Zum Zeitpunkt der Erstellung dieses Artikels war das die Version 1.8.8
Es wurde die ESP8266 Bibliothek eingebunden:
Zuerst diese URL unter Datei => Voreinstellungen einbinden

ClipCapIt-190228-205734.PNG
http://arduino.esp8266.com/stable/package_esp8266com_index.json

Und danach das Board (NICHT Bibliothek!) installieren unter Werkzeuge => Board: "irgenetwas" => Boardverwalter

ClipCapIt-190303-153010.PNG

Hier nach ESP8266 suchen udn den einzigen gefundenen Eintrag installieren:

ClipCapIt-190303-153145.PNG


Neben dem ES8266 Board brauchen wir auch folgende Bibliothek:

DHT sensor library Version 1.3.4

nachinstalliert:

ClipCapIt-190228-205434.PNG



4 Sketch

Hier mein Sketch für den Test:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include "DHT.h"
// DHT22:   PIN 1:  VCC     mit 3,3 oder 5V verbinden (funzte beides)
//          PIN 2:  Data    mit D2 oder D6 funktioniert es, an D8 auch aber dann lässt sich der ESP8266 nicht mehr flashen. Spannungsteiler mit 10K Widerstand
//                          Siehe Zeichnung wemos_d1_mini_dht22_bb.jpg im Verzeichnis dieses Skriptes
//          PIN 3:  NC      bleibt unbelegt
//          PIN 4:  GND     mit Masse / G verbinden

// Typ des Sensors, hier DHT22
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321

// Zugangsdaten zum WLAN:
const char* ssid = "MeinWLAN";
const char* password = "Passwort";

ESP8266WebServer server(80);

// DHT Sensor
// PIN mit dem "Data" des DHT22 verbunden ist
uint8_t DHTPin = D2; 
               
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);                

float Temperature;
float Humidity;
 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  pinMode(DHTPin, INPUT);

  dht.begin();              

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");

}
void loop() {
  
  server.handleClient();
  
}

void handle_OnConnect() {

 Temperature = dht.readTemperature(); // Gets the values of the temperature
  Humidity = dht.readHumidity(); // Gets the values of the humidity 
  server.send(200, "text/html", SendHTML(Temperature,Humidity)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float Temperaturestat,float Humiditystat){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<title>ESP8266 Weather Report</title>\n";
  ptr +="<meta http-equiv=\"refresh\" content=\"2\" >";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>ESP8266 NodeMCU Weather Report</h1>\n";
  
  ptr +="<p>Temperature: ";
  ptr +=(int)Temperaturestat;
  ptr +=" C</p>";
  ptr +="<p>Humidity: ";
  ptr +=(int)Humiditystat;
  ptr +=" %</p>";
  
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}

Ihr müsst eigentlich nur die Zugangsdaten zu eurem WLAN anpassen.


5 Testausgabe

Wenn Ihr den Sketch hochladet und den Seriellen Monitor anhabt könnt Ihr sehen wann der ESP8266 verbunden ist:

ClipCapIt-190228-210915.PNG

Geben wir nun die IP-Adresse in einen Webbrowser ein:

ClipCapIt-190228-211045.PNG

Die Seite lädt sich alle 2 Sekunden neu.


6 Quellen

Dort ist insbesondere das Skript gut erklärt und wie man es erweitert. Den Pin D8 aber nicht nutzen, zumindest an meinen Wemos D1 Mini hat dieser dann nicht mehr gebootet und lies sich nicht flashen. Zudem geht es auch mit 3,3V.



7 Kommentare


Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.