Kleine Wetterstation mit dem ESP8266 und dem DHT11 Sensor und Thingspeak-Visualisierung

Zur Zeit ist das Internet der Dinge (IoT) natürlich ein großes Thema. Alles ist vernetzt und nicht zuletzt der ESP8266 hat erfolgreich dazu beigetragen. Also habe ich mich mal daran gemacht, eine kleine Wetterstation, welche die Luftfeuchtigkeit und die Temperatur erfasst und an Thingspeak sendet, damit diese dort gespeichert und visualisiert werden.

Die Wetterstation besteht nur aus einer Hand voll Bauteilen, da der ESP8266 stand alone betrieben und so keinen zusätzlichen Mikrocontroller benötigt. Außer dem ESP-Modul wird nur noch ein 3,3 V Spannungsregler (in meinem Fall ein AMS1117), zwei Elkos und der DHT11 Sensor benötigt. Ich benutze das ESP8266-12 Modul, da bei diesem wesentlich mehr Pins herausgeführt sind, als z.B. beim ESP8266-01, bei dem ja nur 2 GPIO-Pins herausgeführt sind. Wichtig ist für mich vor allem der GPIO16 Pin, welchen ich mit dem Reset-Pin verbinde, um den extrem stromsparenden deep sleep Modus des ESP8266 nutzen zu können.

Die fertige Wetterstation, auf der Vorderseite ist nur das ESP8266 Modul auf einer Adapterplatine zu sehen. Per Kabel ist dieses mit dem DHT11 Sensor verbunden. Unter dem ESP sind die zwei Elkos für den AMS1117 verbaut.

Die Rückseite der Platine mit dem AMS1117 Festspannungsregler.

Links die neue Version der Wetterstation, rechts der erste Prototyp. Was mich da beim Platinendesign geritten hat, einen Spannungsregler direkt neben einen Temperatursensor zu verbauen, weiß ich bis heute nicht....

So sieht das ganze dann auf Thingspeak aus.....

Hier noch der Arduino-Sketch für alle, die diese kleine Wetterstation mal nachbauen wollen:

#include <DHT.h>
#include <ESP8266WiFi.h>

// replace with your channel’s thingspeak API key,
String apiKey = "deinthingspeakapikey";
const char* ssid = "deinessid";
const char* password = "deinwlanpasswort";

const char* server = "api.thingspeak.com";
#define DHTPIN 13 // Pin, an dem der DHT11 hängt

DHT dht(DHTPIN, DHT11,15);

// DHT dht(DHTPIN, DHT22,15); bei Verwendung des DHT22
WiFiClient client;

void setup() {
Serial.begin(115200);
delay(10);
dht.begin();

WiFi.begin(ssid, password);

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

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

}

void loop() {

float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

if (client.connect(server,80)) { // "184.106.153.149" or api.thingspeak.com
String postStr = apiKey;
postStr +="&field1=";
postStr += String(t);
postStr +="&field2=";
postStr += String(h);
postStr += "\r\n\r\n";

client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);

Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" degrees Celcius Humidity: ");
Serial.print(h);
Serial.println("% send to Thingspeak");
}
client.stop();

Serial.println("Waiting…");
// thingspeak needs minimum 15 sec delay between updates
delay(20000);
ESP.deepSleep(120000000); //deep sleep für 120 Sekunden
}

Update: DHT11 gegen DHT22 ersetzt

Weil mich der DHT11 für eine Wetterstation nicht so wirklich überzeugt hat (vor allem stört mich da die Auflösung von 1 °C und 1 % im Gegensatz zu der Auflösung von 0,1 °C / 0,1 % beim DHT22 und die Fähigkeit, auch negative Temperaturen zu messen), habe ich diesen nun ersetzt. Hier ein kleiner Überblick über die Eigenschaften der beiden Sensoren:

 

DHT11:                                                                        DHT22:

20 - 80 % Feuchtigkeit (Genauigkeit ca. 5 %)          0 - 100 % Feuchtigkeit (Genauigkeit 2 - 5 %)

0 - 50 °C (Genauigkeit +/- 2 °C)                                -40 - 125 °C (Genauigkeit +/- 0,5 °C)

Sampling Rate 1 Hz (1 Messung/Sekunde)              Sampling Rate 0,5 Hz (2 Messungen/Sekunde)

 

Der einzige Nachteil des DHT22 ist der Preis, dieser ist mit ca. 10 Euro doppelt so teuer wie der ca. 5 Euro teure DHT11.

Rechts, der blaue DHT11, links daneben sein "großer Bruder" DHT22.

Die Wetterstation mit dem neuen Sensor

Update 2: Gehäuse für die Wetterstation:

Nachdem die Wetterstation nun ein paar Monate Indoor im Testlauf ohne Probleme in Betrieb war, habe ich heute im Keller das Kunststoffkästchen von einem Futaba-Servo gesehen und mir gedacht, da könnte doch die Wetterstation mit einem Batteriehalter reinpassen. Also einen Batteriehalter für 4 Mignon-Zellen gesucht und siehe da, der passt perfekt. In den Deckel des Kästchens noch schnell eine Öffnung für den DHT22 gesägt, das ganze mit ein bischen Heißkleber befestigt, und fertig ist die Outdoorversion.