INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Esp8266 - Client, immer wieder ...
19.01.2021, 21:56
Beitrag #33
RE: Esp8266 - Client, immer wieder ...
Und du willst wirklich die Ergebnisse der Interrupts in jedem Loopdurchlauf auslesen? Viel Spaß.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2021, 22:20
Beitrag #34
RE: Esp8266 - Client, immer wieder ...
Tommy, natürlich nicht

sensorinterval ist auf 5 Sekunden vorerst mal eingestellt ...

Und ja, das ist im Moment der ganze loop.

Code:
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();
  }
}

Gruß aus Wiener Neustadt
Toni

=================================================================
Seit die Mathematiker über die Relativitätstheorie hergefallen sind, verstehe ich sie selbst nicht mehr.

Wer Rechtschreibfehler findet darf sie behalten Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2021, 22:27 (Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2021 22:30 von Tommy56.)
Beitrag #35
RE: Esp8266 - Client, immer wieder ...
Ich weiß nicht, warum Du immer einen anderen Sketch hier einstellst und dann ist das sebstverständlich anders. Willst Du uns verarschen?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2021, 22:47
Beitrag #36
RE: Esp8266 - Client, immer wieder ...
(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 Confused

Und es liegt mir fern, Leute die mir Helfen zu verarschen Sad

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;
}

Gruß aus Wiener Neustadt
Toni

=================================================================
Seit die Mathematiker über die Relativitätstheorie hergefallen sind, verstehe ich sie selbst nicht mehr.

Wer Rechtschreibfehler findet darf sie behalten Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2021, 22:54
Beitrag #37
RE: Esp8266 - Client, immer wieder ...
Code:
WH1080_count = 0;
muss vor interrupts()

und warum wird der Wert vom WH1080_min nicht atomar ausgelesen?

Du verstehst anscheinend immer noch nicht, was Du tust.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.01.2021, 23:09
Beitrag #38
RE: Esp8266 - Client, immer wieder ...
(19.01.2021 22:54)Tommy56 schrieb:  
Code:
WH1080_count = 0;
muss vor interrupts()

und warum wird der Wert vom WH1080_min nicht atomar ausgelesen?

Du verstehst anscheinend immer noch nicht, was Du tust.

Gruß Tommy

Hab den Fehler in beiden ITR Reed's drinnen gehabt. Und ja, schon Verstanden, aber ich sollte mir dafür wirklich Zeit & Ruhe nehmen, sonst passieren solche Fehler.

Und bitte nicht Böse sein, ich will keinesfalls hier jemanden Verarschen - ok?

Danke!

Gruß aus Wiener Neustadt
Toni

=================================================================
Seit die Mathematiker über die Relativitätstheorie hergefallen sind, verstehe ich sie selbst nicht mehr.

Wer Rechtschreibfehler findet darf sie behalten Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP8266 SPIFF Daten schreiben und zeilenweise lesen? foto2004 10 309 15.04.2021 14:26
Letzter Beitrag: hotsystems
  ESP8266 OTA - ich bin am Ende meiner Ideen miq19 11 751 02.04.2021 10:13
Letzter Beitrag: Tommy56
  Libraries für ESP8266 wonk 9 877 24.03.2021 20:18
Letzter Beitrag: wonk
  vom MEGA zum ESP8266 uk1408 24 2.051 19.03.2021 13:56
Letzter Beitrag: hotsystems
  ESP8266 Zeit vom NTP Server verändert sich Kupferwurm 18 1.897 11.03.2021 11:03
Letzter Beitrag: Tommy56
  ESP8266 NTP fadeValue bob 2 503 10.03.2021 18:29
Letzter Beitrag: Tommy56
  HTML-Ausgabe von ESP8266 D1 Mini + DHT 11 Temperatursensor auf Webseite Bobo83600 3 701 10.03.2021 09:42
Letzter Beitrag: Bobo83600
  [Gelöst] ESP8266 OTA bleibt ohne Wirkung miq19 5 788 07.03.2021 18:35
Letzter Beitrag: Tommy56
  ESP8266-12E & Pullup I2C rev.antun 33 4.122 07.03.2021 01:46
Letzter Beitrag: rev.antun
  ESP8266 exception[9] beim datei schreiben in SPIFFS gk_1 15 1.852 05.03.2021 11:52
Letzter Beitrag: gk_1

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste