Benutzer-Werkzeuge

Webseiten-Werkzeuge


iot:aussenthermometer:programmversion_0.2

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nä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 Frickelpietiot:aussenthermometer:programmversion_0.2 [30.03.2019 14:52] 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. Das wird nun beobachtet.+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 bis Ende März (Stand: Ende März) blieb sie nicht einmal hängen. 
 + 
 +<code> 
 +// Außenthermometer 
 +// Läuft auf einem Lolin D32  
 +// Misst Temperatur, Luftfeuchtigkeit und Luftdruck 
 +// Berechnet den Taupunkt und den Hitzeindex 
 +// Sendet die Daten an iot.frickelpiet.de 
 + 
 +// Bibliotheken 
 +#include <WiFi.h> 
 +#include <Wire.h> 
 +#include <SPI.h>   
 +#include <Adafruit_Sensor.h> 
 +#include <Adafruit_BME280.h> 
 + 
 + 
 +// Sensor Objekt 
 +Adafruit_BME280 bme; // I2C 
 + 
 +uint64_t chipid;  
 + 
 +// WLAN SSDI und Passwort 
 +const char* ssid       = "XXXXXXXXXXXXXX";         // Name des WLAN 
 +const char* password   = "XXXXXXXXXXXXXXXXXXXX";   // Passwort des WLAN 
 + 
 +// Webserver iot.frickelpiet.de 
 +char server[] = "iot.frickelpiet.de"; 
 +const int port = 80; 
 + 
 +WiFiClient client; 
 + 
 +const int sensorbox = 1;                           // Eindeutige ID des Außenthermometers. Wird von adddata.php ausgewertet 
 +float temperature;                                 // Temperatur 
 +float humidity;                                    // Luftfeuchtigkeit 
 +float pressure;                                    // Luftdruck 
 +float dewpoint;                                    // Taupunkt 
 +float heatindex;                                   // Hitzeindex 
 +float voltage;                                     // Spannung der Batterie 
 +int rssi;                                          // Signalqualität des WiFi 
 +int wifiCounter = 0;                               // Zählt die Verbindungsversuche zum WiFi 
 +String data;                                       // String, der an den Webserver übertragen wird 
 + 
 +#define uS_TO_S_FACTOR 1000000                     // Conversion factor for micro seconds to seconds */ 
 +#define TIME_TO_SLEEP  600                         // Time ESP32 will go to sleep (in seconds) */ 
 + 
 + 
 +void setup () { 
 +  // Serielle Schnittstelle 
 +  Serial.begin(115200); 
 +  delay(1000); //Take some time to open up the Serial Monitor 
 + 
 +  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); 
 +  Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) + " Seconds"); 
 + 
 +  // Chip ID  
 +  chipid = ESP.getEfuseMac();                      //The chip ID is essentially its MAC address(length: 6 bytes). 
 +  Serial.printf("ESP32 Chip ID = %04X",(uint16_t)(chipid>>32));//print High 2 bytes 
 +  Serial.printf("%08X\n",(uint32_t)chipid);//print Low 4bytes. 
 + 
 +  // Initialisiert Wire 
 +  Wire.begin(25, 26);           // SDA, SCL 
 +   
 +  // Verbindung zum WLAN Router aufbauen 
 +  Serial.printf("Connecting to %s ", ssid); 
 +  WiFi.begin(ssid, password); 
 + 
 +  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("Connection to wifi failed!"); 
 +      Serial.println("Going to sleep now"); 
 +      delay(100); 
 +      esp_deep_sleep_start();                                  // Wenn keine Verbindung zum WLAN hergestellt werden kann, geht der ESP32 in den Tiefschlaf 
 +    } 
 +  } 
 +   
 +  Serial.println(" Connected!"); 
 +  Serial.print("IP address: "); 
 +  Serial.println(WiFi.localIP()); 
 +  
 +  // BME280 initialisieren  
 +  bool status; 
 +  status = bme.begin();   
 +  if (!status) { 
 +      Serial.println("Could not find a valid BME280 sensor, check wiring!"); 
 +      while (1); 
 +  } 
 +  bme.setSampling(Adafruit_BME280::MODE_FORCED, 
 +                    Adafruit_BME280::SAMPLING_X1, // temperature 
 +                    Adafruit_BME280::SAMPLING_X1, // pressure 
 +                    Adafruit_BME280::SAMPLING_X1, // humidity 
 +                    Adafruit_BME280::FILTER_OFF   ); 
 +   
 +  // 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/100);  
 +  dewpoint = (b * dewpointTmp) / (a - dewpointTmp); 
 +  Serial.print("Dewpoint: "); 
 +  Serial.print(dewpoint); 
 +  Serial.println(" °C"); 
 + 
 +  // 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("Heatindex: "); 
 +  Serial.print(heatindex); 
 +  Serial.println(" °C"); 
 +   
 +  // Batteriespannung lesen 
 +  voltage = analogRead(35) / 4096.0 * 7.445; 
 +  Serial.print("Battery voltage: "); 
 +  Serial.print(voltage); 
 +  Serial.println(" volts"); 
 + 
 +  // Signalqualität WiFi 
 +  rssi = (WiFi.RSSI() + 100) * 2; 
 +  Serial.print("WiFi signal: "); 
 +  Serial.print(rssi); 
 +  Serial.println(" %"); 
 + 
 +  // String erzeugen 
 +  data = "sensorbox=" + String(sensorbox) 
 +       + "&temperature=" + String(temperature)  
 +       + "&humidity=" + String(humidity)  
 +       + "&pressure=" + String(pressure)  
 +       + "&dewpoint=" + String(dewpoint) 
 +       + "&heatindex=" + String(heatindex) 
 +       + "&rssi=" + String(rssi) 
 +       + "&voltage=" + String(voltage); 
 + 
 +  Serial.print("Data String: "); Serial.println(data); 
 +   
 +  // Daten an den Webserver iot.frickelpiet.de senden  
 +  Serial.print("Connecting to: "); 
 +  Serial.println(server); 
 +   
 +  if (client.connect(server, port)) { 
 +    Serial.print("Connected to: "); 
 +    Serial.println(server); 
 +    client.print("GET /adddata.php?"); 
 +    client.print(data); 
 +    client.println(" HTTP/1.1"); 
 +    client.print("Host: "); 
 +    client.println(server); 
 +    client.println("Connection: close"); 
 +    client.println();  
 +    client.stop(); 
 +  } 
 +  else { 
 +    Serial.println("connection failed"); 
 +  } 
 +   
 +  // Schickt den ESP32 in den Tiefschlaf 
 +  Serial.println("Going to sleep now"); 
 +  delay(100); 
 +  esp_deep_sleep_start(); 
 + 
 +
 + 
 + 
 +void loop() { 
 + 
 +
 +</code>
iot/aussenthermometer/programmversion_0.2.txt · Zuletzt geändert: 18.05.2023 12:34 von 127.0.0.1