iot:aussenthermometer:programmversion_0.2
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
iot:aussenthermometer:programmversion_0.2 [21.10.2018 13:03] – ↷ Seite von arduino:aussenthermometer:programmversion_0.2 nach iot:aussenthermometer:programmversion_0.2 verschoben Frickelpiet | iot:aussenthermometer:programmversion_0.2 [30.03.2019 14:54] – Frickelpiet | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Außenthermometer - Programmversion 0.2 ====== | ====== Außenthermometer - Programmversion 0.2 ====== | ||
- | In dieser Programmversion wurde der Code entfernt, der die Daten an Opensensemap sendet. Stattdessen werden die Messwerte an meinen eigenen Server übertragen. Davon abgesehen liegt der Fokus auf einem zuverlässigen Betrieb. Das heißt, dass der ESP32 niemals im Code hängen bleiben soll, wenn irgendetwas nicht wie geplant funktioniert. Beispielsweise legt sich der Außensensor sofort wieder schlafen, wenn keine Verbindung zum WLAN etabliert werden kann. Dennoch bleibt das Programm zwei- bis dreimal im Monat hängen. | + | In dieser Programmversion wurde der Code entfernt, der die Daten an Opensensemap sendet. Stattdessen werden die Messwerte an meinen eigenen Server übertragen. Davon abgesehen liegt der Fokus auf einem zuverlässigen Betrieb. Das heißt, dass der ESP32 niemals im Code hängen bleiben soll, wenn irgendetwas nicht wie geplant funktioniert. Beispielsweise legt sich der Außensensor sofort wieder schlafen, wenn keine Verbindung zum WLAN etabliert werden kann. Diese Programmversion läuft sehr stabil: seit Mitte Dezember |
+ | |||
+ | < | ||
+ | // Außenthermometer | ||
+ | // Läuft auf einem Lolin D32 | ||
+ | // Misst Temperatur, Luftfeuchtigkeit und Luftdruck | ||
+ | // Berechnet den Taupunkt und den Hitzeindex | ||
+ | // Sendet die Daten an meinen eigenen Server | ||
+ | |||
+ | // Bibliotheken | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | |||
+ | // Sensor Objekt | ||
+ | Adafruit_BME280 bme; // I2C | ||
+ | |||
+ | uint64_t chipid; | ||
+ | |||
+ | // WLAN SSDI und Passwort | ||
+ | const char* ssid = " | ||
+ | const char* password | ||
+ | |||
+ | // Webserver XXXXXXXXXXXXXXX | ||
+ | char server[] = " | ||
+ | const int port = 80; | ||
+ | |||
+ | WiFiClient client; | ||
+ | |||
+ | const int sensorbox = 1; // Eindeutige ID des Außenthermometers. Wird von adddata.php ausgewertet | ||
+ | float temperature; | ||
+ | float humidity; | ||
+ | float pressure; | ||
+ | float dewpoint; | ||
+ | float heatindex; | ||
+ | float voltage; | ||
+ | int rssi; // Signalqualität des WiFi | ||
+ | int wifiCounter = 0; // Zählt die Verbindungsversuche zum WiFi | ||
+ | String data; // String, der an den Webserver übertragen | ||
+ | |||
+ | #define uS_TO_S_FACTOR 1000000 | ||
+ | #define TIME_TO_SLEEP | ||
+ | |||
+ | |||
+ | void setup () { | ||
+ | // Serielle Schnittstelle | ||
+ | Serial.begin(115200); | ||
+ | delay(1000); | ||
+ | |||
+ | esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); | ||
+ | Serial.println(" | ||
+ | |||
+ | // Chip ID | ||
+ | chipid = ESP.getEfuseMac(); | ||
+ | Serial.printf(" | ||
+ | Serial.printf(" | ||
+ | |||
+ | // Initialisiert Wire | ||
+ | Wire.begin(25, | ||
+ | |||
+ | // Verbindung zum WLAN Router aufbauen | ||
+ | Serial.printf(" | ||
+ | WiFi.begin(ssid, | ||
+ | |||
+ | while (WiFi.status() != WL_CONNECTED) { // Es wird 5 Sekunden eine Verbingung gesucht, danach wird abgebrochen | ||
+ | if (wifiCounter <= 19) { | ||
+ | wifiCounter ++; | ||
+ | delay(500); | ||
+ | Serial.print(" | ||
+ | } | ||
+ | else { | ||
+ | Serial.println(" | ||
+ | Serial.println(" | ||
+ | delay(100); | ||
+ | esp_deep_sleep_start(); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Serial.println(" | ||
+ | Serial.print(" | ||
+ | Serial.println(WiFi.localIP()); | ||
+ | |||
+ | // BME280 initialisieren | ||
+ | bool status; | ||
+ | status = bme.begin(); | ||
+ | if (!status) { | ||
+ | Serial.println(" | ||
+ | while (1); | ||
+ | } | ||
+ | bme.setSampling(Adafruit_BME280:: | ||
+ | Adafruit_BME280:: | ||
+ | Adafruit_BME280:: | ||
+ | Adafruit_BME280:: | ||
+ | Adafruit_BME280:: | ||
+ | |||
+ | // BME 280 abfragen | ||
+ | temperature = bme.readTemperature(); | ||
+ | humidity = bme.readHumidity(); | ||
+ | pressure = bme.readPressure() / 100.0F; | ||
+ | |||
+ | // Taupunkt berechnen | ||
+ | float a = 17.271; | ||
+ | float b = 237.7; | ||
+ | float dewpointTmp = (a * temperature) / (b + temperature) + log(humidity/ | ||
+ | dewpoint = (b * dewpointTmp) / (a - dewpointTmp); | ||
+ | Serial.print(" | ||
+ | Serial.print(dewpoint); | ||
+ | Serial.println(" | ||
+ | |||
+ | // Hitzeindex berechnen | ||
+ | float c1 = -8.784695; | ||
+ | float c2 = 1.61139411; | ||
+ | float c3 = 2.338549; | ||
+ | float c4 = -0.14611605; | ||
+ | float c5 = -1.2308094e-2; | ||
+ | float c6 = -1.6424828e-2; | ||
+ | float c7 = 2.211732e-3; | ||
+ | float c8 = 7.2546e-4; | ||
+ | float c9 = -3.582e-6; | ||
+ | heatindex = c1 + c2 * temperature + c3 * humidity + c4 * temperature * humidity + c5 * sq(temperature) + c6 * sq(humidity) + c7 * sq(temperature) * humidity + c8 * temperature * sq(humidity) + c9 * sq(temperature) * sq(humidity); | ||
+ | Serial.print(" | ||
+ | Serial.print(heatindex); | ||
+ | Serial.println(" | ||
+ | |||
+ | // Batteriespannung lesen | ||
+ | voltage = analogRead(35) / 4096.0 * 7.445; | ||
+ | Serial.print(" | ||
+ | Serial.print(voltage); | ||
+ | Serial.println(" | ||
+ | |||
+ | // Signalqualität WiFi | ||
+ | rssi = (WiFi.RSSI() + 100) * 2; | ||
+ | Serial.print(" | ||
+ | Serial.print(rssi); | ||
+ | Serial.println(" | ||
+ | |||
+ | // String erzeugen | ||
+ | data = " | ||
+ | + "& | ||
+ | + "& | ||
+ | + "& | ||
+ | + "& | ||
+ | + "& | ||
+ | + "& | ||
+ | + "& | ||
+ | |||
+ | Serial.print(" | ||
+ | |||
+ | // Daten an den Webserver senden | ||
+ | Serial.print(" | ||
+ | Serial.println(server); | ||
+ | |||
+ | if (client.connect(server, | ||
+ | Serial.print(" | ||
+ | Serial.println(server); | ||
+ | client.print(" | ||
+ | client.print(data); | ||
+ | client.println(" | ||
+ | client.print(" | ||
+ | client.println(server); | ||
+ | client.println(" | ||
+ | client.println(); | ||
+ | client.stop(); | ||
+ | } | ||
+ | else { | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | // Schickt den ESP32 in den Tiefschlaf | ||
+ | Serial.println(" | ||
+ | delay(100); | ||
+ | esp_deep_sleep_start(); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | void loop() { | ||
+ | |||
+ | } | ||
+ | </ |
iot/aussenthermometer/programmversion_0.2.txt · Zuletzt geändert: 18.05.2023 12:34 von 127.0.0.1