ich möchte auf einem ESP einen Webserver bereitstellen und auch gleichzeitig eine Temperatursensor auslesen und das Ergebnis an einen anderen Webserver senden.
Meines Wissens Unterricht der Webserver wenn die Temperaturdaten auslesen und gesendet werden.
Außerm benötige ich den Temperaturwert nicht bei jedem Takt, daher habe ich ich den loop() aktuelle etwa so aufgebaut:
void loop() {
if (WiFi.status() != WL_CONNECTED)
{
WiFiStart();
}
server.handleClient();
test ++;
delay(1);
if(test == 5000)
{
//bmeSend();
test = 0;
}
Dabei wird der Webserver natürlich auch beim senden der Temperaturdaten unterbrochen, das passiert aber nur wenn der test Zähler auf 5000 (oder welchen Interval auch immer ich haben will ) kommt
Oder gibt es elegantere Lösungen um quasi Aktionen parallel auf dem Arduino auszuführen?
Schau Dir mal millis() an. Das ist genau das Mittel, um bestimmte Aktionen in bestimmten Intervallen auszuführen.
Dass dabei der Webserver mal warten muss ist kein Problem, wenn das Messen schnell genug geht.
ahh das klingt gut und vermutlich sinniger als etwas "ähnliches" selber bauen
funktioniert es auch eine LED mit millis() blinken zu lassen, wenn ich durch (zB einen Taster) eine Funktion aufrufe, die aktuelle die LED an macht und nach 1 Sekunde wieder aus macht also in einer nur einmal aufgerufenen Funktion LED AN, warten, LED AUS ohne die Funktion ein zweites mal aufzurufen? oder muss ich das LED aus dazu aus der Funktion auslagern und in die loop() einbinden?
ich werde mich mal versuchen^^
in der regel breche ich meine Programme immer so weit wie möglich runter und wenn das läuft wird es weiter abstrahiert. Das macht mir die Fehleranalyse meist wesentlich einfacher.
Ich melde mich wieder wenn ich einfachen funktionierenden code habe
mit einem serverHandle() setzte ich eine Variable auf 1
und dann das hier im loop()
void loop() {
if (WiFi.status() != WL_CONNECTED)
{
WiFiStart();
}
server.handleClient();
// nach serverHandle() Pin auf AN
if (wama_start == 1){
wama_millis = millis();
digitalWrite(D4, HIGH);
wama_start = 2;
}
// nach 1sek Pin AN wieder auf AUS
if (wama_start == 2 & millis() - wama_millis > wama_start_time){
wama_start = 0;
digitalWrite(D4, LOW);
}
}
habe das ganze mit seriellen ausgaben überprüft und es macht augenscheinlich was ich will, ohne das nebenbei der Arduino hängt
nach setup() verschieben würdest. Ich habe allerdings noch keine Erfahrungen mit einer NodeMCU (aber bald :-)
Gruß
Gregor
das habe ich aus einem Beispiel übernommen, mit der Begründung, das es dadurch bei einem möglichen Verbindungsabbruch die WLAN Verbindung wieder herstellt.
was mich nur gerade irritiert, ist das der ESP eine merklich Wärmeentwicklung aufzeigt, obwohl er gerade nur alle 10sec meine hochzählende zahl auf der seriellen Konsole abgibt,
alle anderen esps, die ich hängen habe, bei denen der wifi Connect im Setup hängt und die schon einige Wochen laufen, zeigen keine wahrnehmbare Wärmeentwicklung