Exakt diese Antwort hatte ich vermutet, ich wollte nur sichergehen, dass es am aktuellen Kompromiss zum Sommer- vs. Winter-Meßintervall liegt, was wiederum das Thema Energiebudget aus genannten Gründen berührt. Merci!
Die automatische Steuerung des Meßintervalls erfolgt bei meiner Solarinstallation abhängig vom Ladezustand des Lipos.
Ist der Ladezustand über 75% werden die Daten alle 15min übermittelt, bei einem Wert darunter ist das Intervall auf 60 min ausgedehnt.
Da die Spannungsmessung via SIM800 Modul ab und an “Spitzen” nach unten hat, die auch unter den Schwellwert gehen, wird das 60min Meßintervall erst nach zweimaligem Unterschreiten des Schwellwertes aktiviert.
Den Messwert lege ich im EEPROM des ESP8266 ab.
Somit steht der Wert auch nach dem DeepSleep wieder zur Verfügung und kann mit dem aktuellen Messwert verglichen werden.
Um auch von “außen” zu sehen, wie lange das aktuelle Meßintervall ist, wird der Wert PowerSaveMode übermittelt - beim PowerSaveMode=1 ist das Intervall 60min, bei PowerSaveMode=0 ist das Meßintervall auf 15min gesetzt.
Da sag ich nicht nein. Will mich bald selbst mit dem Thema Tiefschlaf und einer möglichen variablen Zeit nach Akkustand beschäftigen. Da wäre ein Codebeispiel natürlich mehr als Genial.
Macht es eigendlich Sinn, die Tiefschlafphase nachts generell Recht hoch zu setzen, da Nachts ja eigentlich nicht so wirklich viel spannendes passiert?
Kommt immer darauf an was einen interessiert, wenn es nur um “normale” z.B. Gewichtsveränderungen geht wird nicht so viel passieren. Wenn man die Waage aber auch als Diebstahlsanzeige nutzt, möchte man vielleicht doch höhere Raten und im Forschungskontext evtl. auch.
Aber für den praktischen Einsatz wäre eine Tag-/Nacht-Anpassung sicher eine Überlegung wert! Wichtiger finde ich allerdings die Anpassung im Winter bei Solarbetrieb!
ich verwende ein WeMos D1 MINI - ESP8266 allederdings ohne PRO - ob das jetzt der Grund ist warum es bei mir geklappt hat kann ich nicht beurteilen.
Da ich mir nicht sicher bin wie schnell ich meinen Code im Github ablegen kann, hier das Test Beispiel mit dem ich die Speicherung & das Auslesen des EEPROMS getestet habe.
Die Adresse=1 zur Ablage im EEPROM ist vollkommen willkürlich gewählt.
Das Beispiel liest die EEPROM Adresse 1 aus, erhöht den ausgelesenen Wert um +1 und speichert diesen wieder ab. Der neue Wert wird als Wert für den DeepSleep in Sekunden genommen.
#include <EEPROM.h>
void setup() {
Serial.begin(115200);
int address = 1;
int value;
int newvalue;
EEPROM.begin(512);
value = EEPROM.read(address);
Serial.print("Read Value:");
Serial.println(value);
newvalue=value+1;
Serial.print("Write Value:");
Serial.println(newvalue);
EEPROM.write(address, newvalue );
EEPROM.commit();
Serial.print("Going to sleep");
ESP.deepSleep(newvalue * 1000000, WAKE_RF_DEFAULT);
delay(100);
}
void loop() {
// put your main code here, to run repeatedly:
}
Viel Erfolg beim Testen.
PS.: Für den DeepSleep bzw. den WakeUp aus dem DeepSleep die Verbindung zwischen D0 & RST PIN nicht vergessen.
ich muß mich erst noch ein bisschen mit Github auseinandersetzen bevor ich hier meinen Teil beitragen kann. Insofern bitte noch ein wenig Geduld.
Das simple Beispiel bzgl. EEPROM & DeepSleep findest Du weiter unten im meinem Reply an Martin.
Der Punkt ist berechtigt, allerdings müßte man sich aus einer Quelle zum einen die aktuelle Uhrzeit sowie die zum Datum passenden Sonnenuntergangs & Aufgangszeiten besorgen - idealerweise noch abhängig vom Standort und dann daraus den Sleep Dauer ableiten.
Zudem ist, soweit ich es richtig in Erinnerung habe, die maximale Sleep Dauer beim ESP8266 auf knapp über 60 min begrenzt.
Da mir das oben genannte ein wenig zu kompliziert erschien habe ich mich für die simplere Lösung der Dauer des SleepTimers abhängig vom Akku Stand entschieden, die sich in meinen Tests auch als ganz praktikabel erwiesen hat.
Man kann auch das pseudomäßig umgehen, indem man 1, 2, 3, 4, im EEPROM hochzählt oder einem Speicher der RTC ohne zu messen und Daten zu verschicken.
Aber auch diese Beschränkung und vor allem, dass man nur ein hard reset zum wakeup machen kann sprechen für einen ESP32 statt einen ESP8266. Da ist der wakeup nicht auf 70 Minuten oder so begrenz und er kann sich auch über den deep sleep mode Variableninhalte merken.
Heyho in die Runde,
für unser nb-iot Arduino Board wollen wir den Messintervall und andere Paramter über Befehle vom Server an das Board regeln können.
Das funktioniert bei unserer UDP Verbindung ganz gut, da der Server direkt auf die UDP Nachricht des Clients eine Nachricht zurückschicken kann an den Client.
die Nachricht wird dann auf dem Client verarbeitet. Den gesamten Code könnt ihr hier einsehen. Die eigentliche Funktion von der ich spreche kopiere ich hier mal rein:
void checkMessage(const char msg[STDSTRINGLEN])
{
String data = msg;