Ich bau derzeit an der Arduino Wetterstation, diese wird aber anders als ursprünglich geplant. Das OLED Dislpay fällt weg und statt einem DHT22 und einem BMP180 wird nun ein BME280 verwendet. Die Daten werden an die Volkszähler Instanz auf dem Raspberry Pi gesendet. Die Wemos D1 mini’s sind für den Außeneinsatz gedacht und die Versionen mit einem DHT22 für den Innenbereich.
Benötigte Hardware:
- Wemos D1 mini, NodeMCU oder ähnliches
- BME280
Aufbau:
Anhand eines Wemos D1 Mini zeige ich euch wie das ganze verkabelt werden muss. Das BME280 Modul wird über I2C angesprochen.
Der Sketch:
Der Sketch sollte auf allen Modulen mit einem ESP8266 lauffähig sein. IP-Adresse, die UUIDs sowie SSID und Passwort sind anzupassen!
#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-Temperatur"; const String uuid_humid = "UUID-Luftfeuchtigkeit"; const String uuid_airp = "UUID-Luftdruck"; byte maxwait = 120; #include <ESP8266WiFi.h> #include <ESP8266WiFiMulti.h> #include <ESP8266HTTPClient.h> #include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; ESP8266WiFiMulti WiFiMulti; void setup() { #ifdef SERIAL Serial.begin(115200); Serial.println("BOOT"); Serial.print("Wifi..."); #endif WiFiMulti.addAP("SSID", "Passwort"); #ifdef SERIAL Serial.println("OK"); Serial.print("BME280"); #endif bme.begin(0x76); #ifdef SERIAL Serial.print("OK"); #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... { #ifdef SERIAL Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); #endif url_temp = url_start; url_temp += uuid_temp; url_temp += url_stop; url_temp += bme.readTemperature(); sendHttpData(url_temp); } { #ifdef SERIAL Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); #endif url_temp = url_start; url_temp += uuid_humid; url_temp += url_stop; url_temp += bme.readHumidity(); sendHttpData(url_temp); } { #ifdef SERIAL Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); #endif url_temp = url_start; url_temp += uuid_airp; url_temp += url_stop; url_temp += bme.readPressure() / 100.0F; sendHttpData(url_temp); } #ifdef SERIAL Serial.println("SLEEP"); Serial.flush(); #endif }
Anzeige