Im Beitrag „Raspberry Pi, DS18B20 & Volkszähler“ habe ich euch gezeigt wie ihr die gemessene Temperatur an den Volkszähler, welcher auf einem Raspberry Pi läuft, gesendet. In diesem Beitrag zeige ich euch wie ihr die Temperatur und Luftfeuchte mit einem DHT22 messt und ebenfalls an den Volkszähler sendet. Auch dieses mal greife ich auf den Quellcode von Florian Knodt zurück.
Benötigte Hardware:
- NodeMCU
- DHT22
- 4,7 kOhm oder 10 kOhm Widerstand
- Breadboard
- Male – Female Jumper Wire oder Male -Male Jumper – Wire
Aufbau:
Sketch:
#include <Arduino.h> #define SERIAL const String host = "IP-Adresse"; const unsigned int port = 80; const String url_start = "/middleware.php/data/"; const String url_stop = ".json?operation=add&value="; const String uuid_temp = "UUID-Temp"; const String uuid_humid = "UUID-Humid"; byte maxwait = 120; #define DHTPIN 2 #define DHTTYPE DHT22 #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> ESP8266WiFiMulti WiFiMulti; DHT_Unified dht(DHTPIN, DHTTYPE); void setup() { #ifdef SERIAL Serial.begin(115200); Serial.println("BOOT"); Serial.print("Wifi..."); #endif WiFiMulti.addAP("Meins2-2,4GHz", "95259760514407391113"); #ifdef SERIAL Serial.println("OK"); Serial.print("DHT..."); #endif dht.begin(); #ifdef SERIAL Serial.print("OK"); #endif sensor_t sensor; #ifdef SERIAL dht.temperature().getSensor(&sensor); Serial.println("------------------------------------"); Serial.println("Temperature"); Serial.print ("Sensor: "); Serial.println(sensor.name); Serial.print ("Driver Ver: "); Serial.println(sensor.version); Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" °C"); Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" °C"); Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" °C"); #endif dht.humidity().getSensor(&sensor); #ifdef SERIAL Serial.println("------------------------------------"); Serial.println("Humidity"); Serial.print ("Sensor: "); Serial.println(sensor.name); Serial.print ("Driver Ver: "); Serial.println(sensor.version); Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println("%"); Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println("%"); Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println("%"); Serial.println("------------------------------------"); #endif } bool waitWifi() { while((WiFiMulti.run() != WL_CONNECTED) & maxwait > 0) { #ifdef SERIAL Serial.println("Wait Wifi"); #endif delay(1000); maxwait--; } if(WiFiMulti.run() == WL_CONNECTED) return true; return false; } void sendHttpData(String url) { HTTPClient http; if(waitWifi()) { #ifdef SERIAL Serial.print("GET: "); Serial.println(url); #endif http.begin(host, port, url); //HTTP int httpCode = http.GET(); #ifdef SERIAL if(httpCode) { if(httpCode == 200) { String payload = http.getString(); Serial.println(payload); }else{ Serial.print("HTTP "); Serial.println(httpCode); } } else { Serial.print("[HTTP] GET... failed, no connection or no HTTP server\n"); } #endif }else{ #ifdef SERIAL Serial.print("No WiFi available\n"); #endif } } void loop() { String url_temp = ""; #ifndef SERIAL digitalWrite(1, HIGH); //LED off #endif delay(2000); //If we've just started the power might be somewhat distorted - lets wait a bit to get things setteled... sensors_event_t event; dht.temperature().getEvent(&event); if (isnan(event.temperature)) { #ifdef SERIAL Serial.println("Error reading temperature!"); #endif } else{ #ifdef SERIAL Serial.print("Temperature: "); Serial.print(event.temperature); Serial.println(" °C"); #endif url_temp = url_start; url_temp += uuid_temp; url_temp += url_stop; url_temp += event.temperature; sendHttpData(url_temp); } dht.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { #ifdef SERIAL Serial.println("Error reading humidity!"); #endif } else { #ifdef SERIAL Serial.print("Humidity: "); Serial.print(event.relative_humidity); Serial.println("%"); #endif url_temp = url_start; url_temp += uuid_humid; url_temp += url_stop; url_temp += event.relative_humidity; sendHttpData(url_temp); } #ifdef SERIAL Serial.println("SLEEP"); Serial.flush(); #endif }
Angepasst werden müssen:
- IP-Adresse
- UUID-Temp
- UUID-Humid
Quelle: BitBastelei/Adlerweb
Anzeige