#include <Adafruit_BME280.
h>
#include <WebServer.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
#define BMP_SDA 22 // Pin für SDA (Datenleitung)
#define BMP_SCL 21 // Pin für SCL (Taktleitung)
#define RAIN_SENSOR_PIN 13 // Pin für den Tropfensensor
//Defaultwert für OLED Display setzen
Adafruit_SSD1306 display(OLED_RESET);
//Werte für Connection mit Hotspot
const char* ssid = "hotspot";
const char* password = "passwort";
WebServer server(80);
// Initialisiere den BME280-Sensor
Adafruit_BME280 bme;
//Werte die ausgegeben werden
float temperature, humidity, pressure;
//wenn "/" in URL vorkommt wird diese Funktion aufgerufen - Daten werden an Server
gesendet und ausgegeben
void handleRoot() {
String message = "Temperature: " + String(temperature) + " C\n";
message += "Humidity: " + String(humidity) + " %\n";
message += "Pressure: " + String(pressure) + " hPa\n";
[Link](200, "text/plain", message);
}
//Funktion die den Fehlerfall - [Link](handleNotFound); - aus dem Setup
behandelt
//wenn die Verbindung zum Server nicht funktionieren sollte
void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI: ";
message += [Link]();
message += "\nMethod: ";
message += ([Link]() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += [Link]();
message += "\n";
for (uint8_t i = 0; i < [Link](); i++) {
message += " " + [Link](i) + ": " + [Link](i) + "\n";
}
[Link](404, "text/plain", message);
}
void setup() {
//Display
[Link](SSD1306_SWITCHCAPVCC, 0x3C); //Adressierung beachten, hier 0x3C!
[Link](115200);
//Wifi verbindung erstellen mit oben deklarierten Werten für ssid und passwort
[Link](WIFI_STA);
[Link](ssid, password);
[Link]("");
//Webserver
//Auf Verbindung mit Webserver warten
while ([Link]() != WL_CONNECTED) {
delay(500);
[Link](".");
}
//Ausgabe auf Serial Monitor - Infos um Handy mit Server verbinden zu können
[Link]("");
[Link]("Connected to ");
[Link](ssid);
[Link]("IP address: ");
[Link]([Link]());
//beim Symbol "/" in der URL wird handleRoot aufgerufen
[Link]("/", handleRoot);
[Link]("/inline", []() {
[Link](200, "text/plain", "this works as well");
});
//falls Serververbindung nicht funktionieren sollte -> handleNotFound funktion
wird aufgerufen
[Link](handleNotFound);
[Link](BMP_SDA, BMP_SCL); // Initialisiere die I2C-Verbindung mit den
angegebenen Pins
[Link]();
[Link]("HTTP server started");
unsigned status;
status = [Link](0x76);
// status = [Link](0x76, &Wire2)
//falls [Link] nichts liefert wird der Fehlerfall auf dem Serial Monitor
erklärt
if (!status) {
[Link]("Could not find a valid BME280 sensor, check wiring,
address, sensor ID!");
[Link]("SensorID was: 0x"); [Link]([Link](),16);
[Link](" ID of 0xFF probably means a bad address, a BMP 180
or BMP 085\n");
[Link](" ID of 0x56-0x58 represents a BMP 280,\n");
[Link](" ID of 0x60 represents a BME 280.\n");
[Link](" ID of 0x61 represents a BME 680.\n");
while (1) delay(10);
}
}
void loop() {
//Display wird gecleart und dann werden die Values in die jeweiligen Zeilen
(SetCursor) geschrieben
[Link]();
[Link](WHITE);
[Link](1);
[Link](23, 0);
[Link]("Temp: " + String(temperature) + " C");
[Link](23, 12);
[Link]("Humi: " + String(humidity) + " %");
[Link](23, 24);
[Link]("Pres: " + String(pressure) + " hPa");
[Link]();
//server wartet auf Client anfrage und beginnt dann die Website aufzubauen
[Link]();
delay(2); // Notwendig für die CPU
//jeweilige Werte vom bme Sensor einlesen
temperature = [Link]();
humidity = [Link]();
pressure = [Link]() / 100.0F; // Druck in hPa
}