#include <Arduino.h>
#include <ESP8266WiFi.h> //OTA
#include <ESP8266mDNS.h> //OTA
#include <WiFiUdp.h> //OTA
#include <ArduinoOTA.h> //OTA
const char* ssid = "KISTE_BALKON"; //OTA
const char* password = "*****";
// #define SERIAL
const String host = "10.0.0.46";
const unsigned int port = 80;
const String url_start = "/middleware.php/data/";
const String url_stop = ".json?operation=add&value=";
const String uuid_temp = "a1683140-fc40-1***7-a5c5-57ea87495887";
const String uuid_humid = "bc0f7760-fc40-1***7-bfc9-7d155d9a55c3";
byte maxwait = 120;
#define DHTPIN D2
#define DHTTYPE DHT11
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
ESP8266WiFiMulti WiFiMulti;
DHT_Unified dht(DHTPIN, DHTTYPE);
void setup() {
WiFi.mode(WIFI_STA); //OTA
WiFi.begin(ssid, password); //OTA
while (WiFi.waitForConnectResult() != WL_CONNECTED) { //OTA
delay(5000); //OTA
ESP.restart(); //OTA
} //OTA
ArduinoOTA.begin(); //OTA
#ifdef SERIAL
Serial.begin(115200);
Serial.println("BOOT");
Serial.print("Wifi...");
Serial.println(WiFi.localIP());
#endif
//WiFiMulti.addAP("KISTE", "******");
#ifdef SERIAL
Serial.println("OK");
Serial.print("DHT...");
#endif
dht.begin();
#ifdef SERIAL
Serial.print("OK");
#endif
sensor_t sensor;
#ifdef SERIAL
dht.temperature().getSensor(&sensor);
Serial.println("------------------------------------");
Serial.println("Temperature");
Serial.print ("Sensor: "); Serial.println(sensor.name);
Serial.print ("Driver Ver: "); Serial.println(sensor.version);
Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" °C");
Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" °C");
Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" °C");
#endif
dht.humidity().getSensor(&sensor);
#ifdef SERIAL
Serial.println("------------------------------------");
Serial.println("Humidity");
Serial.print ("Sensor: "); Serial.println(sensor.name);
Serial.print ("Driver Ver: "); Serial.println(sensor.version);
Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id);
Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println("%");
Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println("%");
Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println("%");
Serial.println("------------------------------------");
#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() {
ArduinoOTA.handle(); //OTA
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...
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
#ifdef SERIAL
Serial.println("Error reading temperature!");
#endif
} else{
#ifdef SERIAL
Serial.print("Temperatur: ");
Serial.print(event.temperature +1);
Serial.println(" °C");
#endif
url_temp = url_start;
url_temp += uuid_temp;
url_temp += url_stop;
url_temp += event.temperature -2;
sendHttpData(url_temp);
}
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
#ifdef SERIAL
Serial.println("Error reading humidity!");
#endif
}
else {
#ifdef SERIAL
Serial.print("Feuchte: ");
Serial.print(event.relative_humidity +30);
Serial.println("%");
#endif
url_temp = url_start;
url_temp += uuid_humid;
url_temp += url_stop;
url_temp += event.relative_humidity +30;
sendHttpData(url_temp);
delay(10000); // Aktualisierungs Intervall
}
#ifdef SERIAL
// Serial.println("SLEEP");
Serial.flush();
//delay(2000);
#endif
}