SIM800 Stromverbrauch (per Software) reduzieren

Hallo,

falls es bei Dir noch klemmt, mein Setup funktioniert mittlerweile ganz gut, ich muss bloss noch ein bisschen an der Power optimieren, weil ich jeden Tag eine LiPo Zelle aussauge.

Gruesse,
Rudi

Machst du schon irgend etwas um den Stromverbrauch zu reduzieren? Sleep mode beim Arduino oder Strom beim GSM per Transistor und MOSFET schalten?

@beefriends
Das hört sich doch gut an. Leider ist aktuell meine Zeit nicht ausreichend, hier Aktivitäten zu starten. Ich hoffe, dass es die nächsten Wochen und Monate etwas ruhiger läuft, damit ich mich hier ein wenig beschäftigen kann.

Kannst du mir mal dein Setup zu Verfügung stellen? Wenn ich dann mal Zeit habe, kann ich ja mal drüber schauen und vllt auch bei mir den Fehler finden.

Grüße Julian

Hallo,

ja ich versetzt den Prozessor in den Modus sodass nur noch der watchdog timer läuft und alle 8s geprüft wird obs was zu tun gibt. einmal in 10minuten wird dann das modem eingeschalten und ein messwert gesendet.

Trotzdem ist nach einem tag ein 13v Lipo mit 2800mAh leer. woher dss genau kommt muss erst herausfinden.

Moegliche ursachen:

  1. die LEDs auf den boards, die sollte ich vielleicht abtrennen

  2. die wägezellen gehen nicht in den powerdown, das geht leicht per software, muss ich erst noch machen

  3. bin nicht ganz sicher ob ich beim prozessor noch was abdrehen kann

Viele grüsse

Rudi

Vielleicht kannst du mal schreiben welche Hardware du verwendest. Mit dem Seeeduino Stalker, dem GPRSBee und einer Waage, Temperatur- und Feuchte-Sensor komme ich bei 20minütigem update per GSM und einem 1200 mA/h-Lipo auf eine Laufzeit von 30 bis 40 Tagen.

LED sollte man auf jeden Fall abklemmen, wenn du aber eine Standard Uno hast, dann verbraten auch Spannungswandler und USB-Interface viel Strom, da sollte ein 3,3 V-System vielleicht geeigneter sein. Von 12 V auf 5 V oder so kann mit einem ungünstigen Spannungswandler auch “teuer” sein.

LED, Wägezelle, Prozessor sind alles Kandidaten um Strom zu sparen, ich denke aber selbst die alleine saugen fast 3 Ah nicht an einem Tag leer.

Nachdem ich auch schon eine Weile mehr oder weniger erfolgreich mit dem SIM800 Modul experimentiere, es aber noch nicht hinbekommen habe das SIM800 Modul entsprechend zu schalten habe ich noch ein wenig weiter gesucht.

Das SIM800 Modul unterstützt “SlowClock” in zwei Ausprägungen:

Auszug aus SIM800 AT-Manual:
AT+CSCLK=<n >
Parameter
0 Disable slow clock, module will not enter sleep mode.
1 Enable slow clock, it is controlled by DTR. When DTR is high, module can enter sleep mode. When DTR changes to low level, module can quit sleep mode.
2 Enable slow clock automatically. When there is no interrupt (on air and hardware such as GPIO interrupt or data in serial port), module can enter sleep mode. Otherwise, it will quit sleep mode.

In der TinyGSMlib wird mit sleepEnable nur der SlowClock Mode 1 unterstützt.

Mittels AT Befehl läßt sich das Modul allerdings auch in Mode 2 befördern:

  modem.sendAT(GF("+CSCLK=2"));
  delay(1000);

Diesen rufe ich auf bevor der ESP in den DeepSleep Modus geht.
Die LED auf dem SIM800 Modul hört dann auf zu blinken.

Noch ein Hinweis:
Wenn der ESP wieder “erwacht” empfiehlt es sich den SlowClock Modus zu deaktivieren (CSCLK=0), da ansonsten evlt. während des Code Ablaufs das SIM800 Moduls schon wieder schlafen geht und die Kommunikation zwischen ESP & SIM800 Modul nicht zu 100% klappt.

In meinen Tests hatte sich gezeigt, das das Modul nach dem “aufwachen” sich zwar mit dem GSM Netz verbindet, allerdings keine GPRS Verbindung aufbauen kann. Meine Vermutung: während das Modul auf die Verbindung wartet, geht es erneut in den Schlafmodus bzw. kann die Verbindung nicht sauber aufbauen.

modem.sendAT(GF("+CSCLK=0"));

Nochmal der Ablauf grob skizziert

void setup();

gsm_setup(); // (meine Funktion zum initialisieren des SIM800 Moduls

modem.sendAT(GF(“+CSCLK=0”)); // SlowClock deaktivieren

gsm_connect(); //(meine Funktion sich ins GSM Netz einzubuchen & GPRS Verbindung aufzubauen)

… // Programm Code

//Schlafzyklus vorbereiten

modem.gprsDisconnect(); // GPRS Verbindung beenden

modem.radioOff(); // Aus TinyGSM Bibliothek

modem.sendAT(GF(“+CSCLK=2”)); //SlowClock aktivieren
delay(1000);

//DeepSleep für ESP aufrufen
ESP.deepSleep(sleepTimeS * 1000000, WAKE_RF_DEFAULT);
delay(100);

1 Like

Ich befürchte das bringt nicht allzuviel für uns. Der sleep mode 2 ist ja nur ein “auto sleep mode” und verbraucht nicht weniger Strom als der geschaltete mode 1. Hast du schon mal Mode 1 und Mode 2 verglichen? Kommt da ein anderer Verbrauch raus?

Auch der absolute Verbrauch im sleep mode – ob 1 oder 2 ist bei uns, denke ich egal – ist “less than 1mA” und damit für uns zu hoch, s. Sleep Application Note zum SIM800 auf S. 7.

Der relativ hohe Verbrauch entsteht, weil das Modem alle ca. 1,5 Sekunden doch wieder aufwacht um zu checken, ob es was zu tun gibt, das sind zwar nur ein paar Zehntel ms, verbraucht aber dennoch einiges.

Da wir diese “hab’ Acht”-Funktion ja nicht brauchen, niemand wird die Waage anrufen oder ihr eine SMS schicken (ausser ggf. zur Konfiguration, aber das bekommen wir auch anders hin) sehe ich bisher keinen anderen Weg als den Strom per zusätzlicher Hardware-Teile zu trennen. Per Software bekommen wir das nicht hin, denke ich.

Falls du mit 1 mA Verbrauch alleine für das SIM800-Modul leben kannst, würde ich eher den sleep mode 1 implementieren. Da kannst du vorm Verschicken per DTR-Pin das Modem aktivieren und danach wieder schlafen schicken. Vielleicht ist das einfacher mit dem Aufwecken. Da das mit dem DTR-Pin funktionier müsste der verbunden wernden, wenn sleepEnable tatsächlich das implementiert. Hast du das gemacht?