(19.01.2021 22:27)Tommy56 schrieb: Ich weiß nicht, warum Du immer einen anderen Sketch hier einstellst und dann ist das sebstverständlich anders. Willst Du uns verarschen?
Gruß Tommy
Tommy ich bin gerade am ändern/aktualisieren. Das zuvor war immer eine Momentaufnahme bzw. nur der Teil den wir gerade besprochen haben
Und es liegt mir fern, Leute die mir Helfen zu verarschen
Somit hier der aktuelle Stand des Sketches im ganzen - diesmal mit allen tab's
Code:
#include "R:\ArduinoSketches\Wetterstation\wwcfg.h"
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <WiFiUdp.h>
#include <ESP8266WebServer.h>
#include <ArduinoJson.h>
#include <Wire.h>;
#include <Adafruit_Sensor.h>;
#include <Adafruit_BME680.h>;
#include <SI1145_WE.h>
#include <ArduinoOTA.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME680 bme;
float tempOUT, pressOUT, gasOUT, altOUT;
uint16_t humiOUT;
SI1145_WE mySI1145 = SI1145_WE();
byte failureCode = 0;
uint16_t lightOUT = 0;
uint16_t irOUT = 0;
uint16_t proximity = 0;
float uvOUT = 0.0;
unsigned long sensorMillis = 0;
const uint16_t sensorinterval = 5000;
#define WIND_FACTOR 2.4
#define RAIN_FACTOR 0.5787 // Liter je m² und Click
#define TEST_PAUSE 60000
#define WH1080_PIN D6
#define WH1080_INT D6
#define KW9015R_PIN D5
#define KW9015R_INT D5
volatile uint32_t WH1080_count = 0;
volatile uint32_t WH1080_last = 0;
volatile uint32_t WH1080_min = 0xffffffff;
volatile uint32_t KW9015R_count = 0;
volatile uint32_t KW9015R_last = 0;
float windOUT = 0.0;
float windMCOUT = 0.0;
float regenOUT = 0.0;
uint16_t tropfenOUT;
ESP8266WebServer server(80);
ESP8266WebServer TelnetServer(8266);
void handleRoot() {
String message = "Hello from Reverend's WiFi Garten01 Sensor at\n\n";
message += "Temperatur in Celsius: " + String(tempOUT) + "\n";
message += "Luftfeuchte : " + String(humiOUT) + "%\n";
message += "Luftdruck in hPa : " + String(pressOUT) + "\n";
message += "Hoehe berechnet in Meter : " + String(altOUT) + "\n";
message += "Gassensor : " + String(gasOUT) + "\n";
message += "Licht : " + String(lightOUT) + "\n";
message += "IR : " + String(irOUT) + "\n";
message += "UV Index : " + String(uvOUT) + "\n";
message += "Wind in KMh : " + String(windOUT) + "\n";
message += "Wind min/Click : " + String(windMCOUT) + "\n";
message += "Regenstaerke : " + String(tropfenOUT) + "\n";
message += "Regenmenge in Liter/m2 : " + String(regenOUT) + "\n";
server.send(200, "text/plain", message);
}
void handleAllSensors() {
String message;
DynamicJsonDocument doc(512);
doc["tempOUT"] = tempOUT;
doc["pressOUT"] = pressOUT;
doc["humiOUT"] = humiOUT;
doc["gasOUT"] = gasOUT;
doc["lightOUT"] = lightOUT;
doc["irOUT"] = irOUT;
doc["uvOUT"] = uvOUT;
doc["proximity"] = proximity;
doc["windOUT"] = windOUT;
doc["windMCOUT"] = windMCOUT;
doc["regenOUT"] = regenOUT;
doc["tropfenOUT"] = tropfenOUT;
serializeJson(doc, message);
server.send(200, "text/plain", message);
}
void handleNotFound() {
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
}
void ICACHE_RAM_ATTR WH1080Click()
{
long thisTime = micros() - WH1080_last;
WH1080_last = micros();
if (thisTime > 500)
{
WH1080_count++;
if (thisTime < WH1080_min)
{
WH1080_min = thisTime;
}
}
}
void ICACHE_RAM_ATTR KW9015RClick()
{
long thisTime = micros() - KW9015R_last;
KW9015R_last = micros();
if (thisTime > 500)
{
KW9015R_count++;
}
}
void setup() {
Serial.begin(115200);
Wire.begin();
WiFi.persistent(false);
WiFi.hostname("Garten01");
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPSK);
Serial.println("");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(STASSID);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.on("/all", handleAllSensors);
server.onNotFound(handleNotFound);
server.begin();
TelnetServer.begin();
Serial.println("HTTP server started");
if (!bme.begin()) {
// -> Fehlerbehandlung Einbauen
}
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150);
mySI1145.init();
mySI1145.enableHighSignalVisRange();
mySI1145.enableHighSignalIrRange();
mySI1145.enableMeasurements(PSALSUV_TYPE, AUTO);
pinMode(WH1080_PIN, INPUT);
digitalWrite(WH1080_PIN, HIGH);
attachInterrupt(WH1080_INT, WH1080Click, FALLING);
pinMode(KW9015R_PIN, INPUT);
digitalWrite(KW9015R_PIN, HIGH);
attachInterrupt(KW9015R_INT, KW9015RClick, FALLING);
ArduinoOTA.onStart([]() {
Serial.println("OTA Start");
});
ArduinoOTA.onEnd([]() {
Serial.println("OTA End");
Serial.println("Rebooting...");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r\n", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
}
void loop(void) {
ArduinoOTA.handle();
server.handleClient();
unsigned long currentMillis = millis();
if (currentMillis - sensorMillis >= sensorinterval) {
sensorMillis = currentMillis;
getBME680();
getSI1145();
getTROPFEN();
windMCOUT = getWH1080();
windOUT = getWINDKmH();
regenOUT = getKW9015R();
}
}
void getBME680() {
if (! bme.performReading()) {
return;
}
tempOUT = bme.temperature;
pressOUT = bme.pressure / 100.0;
humiOUT = bme.humidity;
gasOUT = bme.gas_resistance / 1000.0;
altOUT = bme.readAltitude(SEALEVELPRESSURE_HPA);
}
void getSI1145() {
lightOUT = mySI1145.getAlsVisData();
irOUT = mySI1145.getAlsIrData();
proximity = mySI1145.getPsData();
uvOUT = mySI1145.getUvIndex();
failureCode = mySI1145.getFailureMode(); // reads the response register
if ((failureCode & 128)) { // if bit 7 is set in response register, there is a failure
handleFailure(failureCode);
}
}
void handleFailure(byte code) {
String msg = "";
switch (code) {
case SI1145_RESP_INVALID_SETTING:
msg = "Invalid Setting";
break;
case SI1145_RESP_PS1_ADC_OVERFLOW:
msg = "PS ADC Overflow";
break;
case SI1145_RESP_ALS_VIS_ADC_OVERFLOW:
msg = "ALS VIS ADC Overflow";
break;
case SI1145_RESP_ALS_IR_ADC_OVERFLOW:
msg = "ALS IR Overflow";
break;
case SI1145_RESP_AUX_ADC_OVERFLOW:
msg = "AUX ADC Overflow";
break;
default:
msg = "Unknown Failure";
break;
}
//Serial.println(msg);
mySI1145.clearFailure();
}
void getTROPFEN() {
tropfenOUT = 1024 - analogRead(A0);
}
double getWH1080()
{
noInterrupts();
unsigned long reading = WH1080_count;
interrupts();
WH1080_count = 0;
return (WIND_FACTOR * reading) / (TEST_PAUSE / 1000);
}
double getWINDKmH()
{
unsigned long reading = WH1080_min;
WH1080_min = 0xffffffff;
double time = reading / 1000000.0;
return (1 / (reading / 1000000.0)) * WIND_FACTOR;
}
double getKW9015R() {
noInterrupts();
unsigned long reading = KW9015R_count;
interrupts();
KW9015R_count = 0;
double unit_rain = reading * RAIN_FACTOR;
//--- > Menge für Zeiteinheiten BERECHNEN
//--- > unit_rain gibt die letzte menge je m² die gemessen wurde zurueck
return unit_rain;
}