DHT11/DHT22, NodeMCU & Volkszähler

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:

DHT11/DHT22, NodeMCU & Volkszähler

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


wallpaper-1019588
Der Wandel der Kundenschnittstelle bei den Banken
wallpaper-1019588
Überlastung am Arbeitsplatz – was ist eine Überlastungsanzeige?
wallpaper-1019588
Also, ich fange wieder an
wallpaper-1019588
Bild der Woche: Mariazeller Advent Vorbereitung
wallpaper-1019588
Top und Body auf Bali
wallpaper-1019588
Alle gemachten Fehler in der EU-, Migrations- und Sozialpolitik werden in einer neuen GroKo weitergeführt und ausgebaut
wallpaper-1019588
WINEACHTEN - table setting letter
wallpaper-1019588
Adventskalender 2017: Türchen Nummer 12