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
ESP8266WebServer & attachInterrupt
11.01.2021, 14:44
Beitrag #1
ESP8266WebServer & attachInterrupt
Grüß Euch!

Nach mehrtägiger Einlesephase (noch keinen Test gestartet) und einen Sketch gesehen der das angeblich kann, stellt sich für mich die Frage "geht das wirklich, auch für meine Anwendung?"

Soweit läuft der Server auf dem D1 sehr gut. Für die Windgeschwindigkeit und die Regenmenge hab ich zuvor (ohne Server) in der Testanwendung das ganze mit attachInterrupt lauffähig.

Jetzt stellt sich für mich die weitere Frage, stört der Interrupt die Clientanfrage bzw. den Server im Ablauf? Nach der Webseite wie oben, NEIN. Der macht jedoch nur alle Minute eine Abfrage.

Meine Idee dazu, Wind/Regen für sagen wir mal für je 3 Sekunden Auswerten (Also attachInterrupt aktivieren -> Messung für 3 Sekunden durchführen -> attachInterrupt deaktivieren)

Hier die Funktion die so schon Läuft (Wind, Regen ist Ident, andere Berechnung für)

Code:
void meassure() {
  InterruptCounter = 0;
  attachInterrupt(digitalPinToInterrupt(D6), countup, FALLING);
  delay(1000 * RecordTime); // -> 3 Sekunden
  detachInterrupt(digitalPinToInterrupt(D6));
  WindSpeed = (float)InterruptCounter / (float)RecordTime * 1.2;
}

Code:
ICACHE_RAM_ATTR void countup() {
  InterruptCounter++;
}

Idee [THRUE||FALSE] ?

Möchte nur Input bevor ich mich da in eine falsche Richtung bewege, keinen fertigen Code, einfach nur Hinweise - 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
11.01.2021, 15:17
Beitrag #2
RE: ESP8266WebServer & attachInterrupt
Regnet es bei Euch immer nur 3 Sekunden lang?
Prellt Dein Regenmesser nicht?
Das Auslesen des InterruptCounter funktioniert so nicht, auch wenn Du die Deklaration verschweigst. Da der mehrere Bytes umfassen dürfte, muss der atomar geslesen werden.

Ich habe es mal für einen Regenmesser auf D1 mini so gemacht:
Code:
const byte regenPin = 2;  // D4
const uint16_t PRELL_ZEIT = 5;
volatile uint16_t regenCounter = 0;
volatile uint32_t lastRegenMillis = 0;

void ICACHE_RAM_ATTR regenISR() {
  if (millis() - lastRegenMillis >= PRELL_ZEIT) {
    regenCounter++;
    lastRegenMillis = millis();
  }  
}

void setup() {
  Serial.begin(115200);
  Serial.println("Start");
  pinMode(regenPin,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(regenPin),regenISR,FALLING);

}

void getRegenCount() {
static uint16_t regenCounterOld = 0;
uint16_t regenCounterLocal;
uint32_t lastRegenMillisLocal;

  noInterrupts();
  regenCounterLocal = regenCounter;
  lastRegenMillisLocal = lastRegenMillis;
  interrupts();
  if (regenCounterLocal != regenCounterOld) {
    regenCounterOld = regenCounterLocal;
    Serial.print("Counter: ");Serial.print(regenCounterLocal);
    Serial.print(" Millis: ");Serial.println(lastRegenMillisLocal);
  }
}

void loop() {
  getRegenCount();
}

Es sollte aber auch ohne Interrupt machbar sein, wenn der loop nicht zu langsam ist.

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
11.01.2021, 15:59
Beitrag #3
RE: ESP8266WebServer & attachInterrupt
(11.01.2021 15:17)Tommy56 schrieb:  Regnet es bei Euch immer nur 3 Sekunden lang?

Der war gut Tommy TongueTongueTongueTongueTongue

Nein die 3 Sekunden bezogen sich auf den Messintervall - also je aufruf 3 Sekunden Messen. Hier mal für der Test für Wind der Funktioniert und die Werte liefert die dem Sensor entsprechen (Regen ist ja gleich, nur die Clicks Zählen und Umrechnen)

Code:
#define WindSensorPin (D6)

volatile unsigned long InterruptCounter;
float WindSpeed;
const int RecordTime = 3; //Define Measuring Time (Seconds)

ICACHE_RAM_ATTR void countup() {
  InterruptCounter++;
}

void setup() {

  Serial.begin(115200);

}

void loop() {
  meassure();
  Serial.print("Wind Speed: ");
  Serial.print(WindSpeed);       //Speed in km/h
  Serial.print(" km/h - ");
  Serial.print(WindSpeed / 3.6); //Speed in m/s
  Serial.println(" m/s");

}

void meassure() {
  InterruptCounter = 0;
  attachInterrupt(digitalPinToInterrupt(D6), countup, FALLING);
  delay(1000 * RecordTime);
  detachInterrupt(digitalPinToInterrupt(D6));
  WindSpeed = (float)InterruptCounter / (float)RecordTime * 1.2;
}

Zitat:Prellt Dein Regenmesser nicht?

RC-Entprellt, nein.

Zitat:Da der mehrere Bytes umfassen dürfte, muss der atomar geslesen werden.

Da kann ich nicht folgen, da bekomm ich ja nur HIGH/LOW retour? Egal ob Wind/Regen. Was hab ich da nicht Verstanden? Was meinst du mit atomar gelesen? Die Testaufbauten Funktionieren ja eh wie sie sollen.

Mein jetziges Problem D1 Server mit den Wind/Regen - der Loop hat fast nix zu tun. 2 I2C Sensoren auslesen (Intervall von 5 bis 15 Sekunden) und die Clientanfragen beantworten, und die Clicks von Wind und Regen Auswerten.

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
11.01.2021, 16:11
Beitrag #4
RE: ESP8266WebServer & attachInterrupt
(11.01.2021 15:59)rev.antun schrieb:  Da kann ich nicht folgen, da bekomm ich ja nur HIGH/LOW retour? Egal ob Wind/Regen.
Du zählst doch irgendwas oder? Der Zählerstand ist doch nicht nur HIGH/LOW oder?

Den Sinn Deines 3 Sekunden Messintervalls bei Regen sehe ich nicht. Beim Wind könnte das hin kommen, da das ein Durchschnittswert ist. Bei Regen geht es ja um die Menge. Ich weiß nicht, welchen Regenmesser Du verwendest, meiner kippt nach einer bestimmten Wassermenge und gibt einen Impuls, da wären 3 Sekunden lang zählen völliger Unsinn.

Wenn ich nach 15 Minuten den Wert an die Datenbank schicke, dann will ich wissen, wieviel Impulse es in den 15 Minuten gab (umgerechnet über Wassermenge und Fläche). Nach dem Senden stelle ich den Zähler wieder auf 0.

Atomar auslesen heißt, dass man vorher die Interrupts blockiert, dann den Wert kopiert und sie wieder einschaltet. Dann kan man in Ruhe mit den Werten rechnen.
Sonst kann es Dir passieren, dass Du das 1.Byte gelesen hast, dann kommt der Interrupt und Dein 2. Byte ist schon verändert und passt nicht mehr.

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
12.01.2021, 12:03
Beitrag #5
RE: ESP8266WebServer & attachInterrupt
(11.01.2021 16:11)Tommy56 schrieb:  Du zählst doch irgendwas oder? Der Zählerstand ist doch nicht nur HIGH/LOW oder?

Den Sinn Deines 3 Sekunden Messintervalls bei Regen sehe ich nicht. Beim Wind könnte das hin kommen, da das ein Durchschnittswert ist. Bei Regen geht es ja um die Menge. Ich weiß nicht, welchen Regenmesser Du verwendest, meiner kippt nach einer bestimmten Wassermenge und gibt einen Impuls, da wären 3 Sekunden lang zählen völliger Unsinn.

Ja die Clicks je Zeiteinheit

Der 3 Sekunden Messintervall bezog sich nur auf den Wind - sorry das hab ich da nicht klar geschrieben.

Für den Regen hab ich ebenfalls eine Wippe die nach je 7ml einen Click auslöst.

Und ja, das ohne Interrupts könnte man mit millis, auch lösen. Sollte bei Wind/Regen Kombination auch von den Zeitabläufen keine Problem darstellen. Also würde dann einfach im loop IMMER durchlaufen. Für den Regen braucht man dann ja nur für die gewünschten Zeiteinheiten (zb. letzte Stunde, heutiger tag, letzten 24 Stunden etc..) den entsprechenden Zähler auf 0 Stellen.

Und bei dem Windmesser kennt man dann in welcher Zeit wie viele Clicks ausgelöst wurden und das dann eben Umrechnen auf die Windgeschwindigkeit.

Und wie gesagt, dass sollte mM kein Problem sein ohne Interrupt einfach im loop durchlaufen zu lassen, und selbst wenn, die Abweichungen sind denk ich Verkraftbar Big Grin

War da jetzt ein Gedankenfehler dabei?

Warte noch auf mein Gehäuse für den Gartensensor - dann wird das ganze Eingebaut, und in der Wildnis ausgesetzt. Werde mal bis das Gehäuse kommt, den Wind/Regen auf Interruptfrei umstellen. Werde berichten.

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
12.01.2021, 12:13
Beitrag #6
RE: ESP8266WebServer & attachInterrupt
(12.01.2021 12:03)rev.antun schrieb:  War da jetzt ein Gedankenfehler dabei?

Ich kann keinen erkennen Wink

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
12.01.2021, 12:40
Beitrag #7
RE: ESP8266WebServer & attachInterrupt
(12.01.2021 12:13)Tommy56 schrieb:  Ich kann keinen erkennen Wink

Gruß Tommy

Mal sehen was der D1 dazu sagt ... Big GrinBig GrinBig Grin

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
13.01.2021, 22:58
Beitrag #8
RE: ESP8266WebServer & attachInterrupt
(11.01.2021 15:17)Tommy56 schrieb:  Ich habe es mal für einen Regenmesser auf D1 mini so gemacht:
Gruß Tommy

Servus Tommy!

Das mit der Regenwippe ist auch so eine Sache, nicht Technisch, das Funktioniert ja. Nur kommen bei mir da etwas seltsame Werte raus.

Wenn der Trichter einen Durchmesser von 110mm hat komme ich auf 0,63 mm/m² JE Impuls (~6ml) Huh das kann doch nicht sein, oder?

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
  ESP8266WebServer RAW Post Data gesucht Nichtraucher 10 997 12.11.2020 12:11
Letzter Beitrag: Tommy56

Gehe zu:


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