BME280 & Volkszähler

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:

Aufbau:

Anhand eines Wemos D1 Mini zeige ich euch wie das ganze verkabelt werden muss. Das BME280 Modul wird über I2C angesprochen.

BME280 & Volkszähler

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


wallpaper-1019588
Weißer Bohnensalat (Einfach und Vegan)
wallpaper-1019588
Xiaomi Watch Color 2 Smartwatch mit 12 Tagen Akkulaufzeit
wallpaper-1019588
[Comic] Seven to Eternity [1]
wallpaper-1019588
Deutschland hat gewählt – Bundestagswahl 2021