Stromsparmaßnahmen für die MicroPython-Firmware im Batteriebetrieb

Gestern startete ich einen Versuch, um zu testen wie lange das aktuelle Hardware-setup

  • FiPy mit Platine von Clemens
  • mit expansion board
  • mit China-Wägezelle (vergleichbar mit Bosche H40)
  • und 5x DS18B20
  • plus 1x BME280

zusammen mit der momentanen Software (ohne deep sleep!) mit einem LiPo läuft.

Der LiPo hat eine Kapazität von 2200 mAh (die auf den BOB-workshops verteilten haben 2000 mAh) und war mit 4,2 V voll geladen. Start war um 17:30 h, gemessen wirde alle 20 Sekunden.

Die Messung endete um 4:00 h am Folgetag. Hier schaltete der Tiefenentladungsschutz des LiPos den Strom ab, der LiPo hatte da eine Restspannung von 3,2 V.

D.h. mit einem vollen LiPo lauft der BOB-node momentan ca. 10,5 Stunden mit einem Messzyklus von 20 Sekunden.

Fazit: Wir müssen dringend den deep sleep-mode für BOB implementieren.

Komisch ist jetzt, dass nach dem Tausch des Akkus gegen einen vollen oder der Stromversorgung via USB die Firmware nicht mehr losläuft. In Atom wird auch nur die normale REPL angzeigt und nichts passiert.

Gibt es einen Automatismus beim FiPy, der z.B. bei Unterspannung das System resettet oder in einen früheren (?) / anderen firmware-Mode schaltet? Kanns mir gerade nicht erklären.

1 Like

I hear you.

Implement deep sleep between readings · Issue #2 · hiveeyes/terkin-datalogger · GitHub

1 Like

I hear you, too.
Bin schon in den ersten Planungen.
Muß aber vorher noch ein anderes Projekt abschließen.

Hab im ersten Schritt vor ein Testsetup aufzubauen. Welches die Solarleistung und den Akkustand über eine zusätzliche MCU überwacht und übertägt. Bei leerem Akku soll er automatisch extern noch etwas nachladen.
Stelle mir vor, das wir so einen besseren Überblick bekommen, was übers Jahr so an Leistung erzeugt und aufgenommen wird.
Und so auch ein paar Firmware-Versionen testen und vergleichen können.

@clemens hast mir ja sicherlich nicht ganz ohne Hintergedanken, beim Workshop noch etwas zusätzlich mitgebracht.

Gruß Michael

Auch der Solarlader / die Solarzelle macht das “Kraut nicht fett” wenn der deep sleep zwischen den Messungen nicht aktiviert ist. Das muss als erstes passieren, alles andere wäre Symptombehandlung statt Ursachenbekämpfung! Naja, und das Messintervall von 20 Sekunden werden wir im Batteriebetrieb auch nicht halten können! ;-)

Sobald wir die Situation verbessert haben, bin ich gespannt über entsprechende Meßwerte zum Stromverbrauch. Habe hier kurz aufgeschnappt, was sich zum Firmware Release v1.19.0.b1 erzählt wird und für den FiPy ursprünglich versprochen wurde.

Light sleep

New development firmware release v1.19.0.b1 | Pycom user forum


Deep sleep

In deep sleep mode, Pycom promised ultra low power operation with ~1uA for the FiPy.

https://www.kickstarter.com/projects/pycom/fipy-the-worlds-first-5-network-iot-dev-board

@Andreas klingt doch schon Mal vielversprechend.
Hoffe Mal das sind nicht nur blasen.

@clemens Ja ich weiß Deep Sleep ist unumgänglich.
Das Testsetup würde ich auch dazu nutzen, um zu schauen, wie häufig man messen kann, und ob es zusätzlich zu Deep Sleep noch weitere Möglichkeiten zum Strom sparen gibt.
z.B. WLAN nur für die eigentliche Übertragung aktivieren und vielleicht erst Mal ein paar Daten sammeln um dann alle xx min senden.

1 Like

Introduction

With one of the recent commits Add deep sleep, see #2 · hiveeyes/terkin-datalogger@3e73a3f · GitHub, the Hiveeyes MicroPython Datalogger Firmware for BOB should support deep sleep. As more things will be following to become version 0.4.0, we didn’t cut a new release yet.

Configuration

https://github.com/hiveeyes/hiveeyes-micropython-firmware/blob/master/settings.example.py#L11-L12

Discussion


Please note

that

  • we upgraded to the most recent Pycom MicroPython 1.20.0.rc11 firmware with no effort [1] to stay up to date.
  • we switched from FatFS to LittleFS with no effort [2] to stop filesystem corruption in brownout conditions.

[1] https://github.com/hiveeyes/hiveeyes-micropython-firmware/blob/master/doc/pycom-firmware-upgrade.rst#install-and-acquire-prerequisites
[2] https://github.com/hiveeyes/hiveeyes-micropython-firmware/blob/master/doc/getting-started.rst#switch-to-littlefs


Happy testing!

1 Like

Mit dem Hiveeyes-code messe ich 30 mA mit expansion board und 10 mA ohne in der 30 sekündigen Schlafphase, hmmm viieeeel zu viel verglichen mit den postulierten 0.02 mA beim WiPy, gut, es ist ein FiPy, aber 10 mA vs. 0,02 mA, da muss noch was nicht passen!

Ohne angeschlossene Sensoren sind es 4 mA, deutlich weniger aber immer noch nicht im Bereich von 0,02 mA!

Falls per default LTE angeschaltet ist sollte es abgeschaltet werden. Ggf. brauchts dazu eine SIM-Karte, ggf. muss man auch einfach nur länger als 30 s warten, ein paar Sachen hier dazu.

– via: https://www.elektronikpraxis.vogel.de/forum/messages.cfm?threadid=563DD5C3-A3AE-4FA9-B04CE2FA8771036B
– via: Ultra-Low-Power-Management des ESP32 für WiFi-IoT-Module nutzen

A post was merged into an existing topic: Deep Sleep with FiPy / ESP32 on MicroPython

Auf Sensorebene gibt es beim HX711 in der C-Bibliothek die Möglichkeit den schlafen zu schicken. Kann das sie uP-lib auch?

=> Ja, wird aber noch nicht angesteuert. Danke!

1 Like

Die DS18B20 sollten unkritisch sein, brauchen quasi nix, den BME280 sollten wir noch checken. Gibt es für den bzw den ganzen I2C-Ast auch die Möglichkeit das auszuschalten?

Expansion Board (falls verwendet) muss ich mir gesondert anschauen, da ist die SD und ich glaube auch eine Dauer-an-LED, gibt ggf Jumper auf den board, um was abzuschalten.

Wir haben ja nun den deep sleep mode implementiert und im Thread Batterieüberwachung, voltage divider und attenuation für MicroPython-Firmware - #42 by MKO die Grundlagen geschaffen um den Batteriezustand unserer nodes zu überwachen. Dort hat Andras auch schon erste Messungen über die Zeit gepostet:

Eine Laufzeit von 8h – mit deep sleep! – allerdings alle 60 Sekunden Messung ist nicht sooo berauschen, schauen wir, wie wir das besser machen können!

Hier ein paar Zahlen, gemessen mit der aktuellen Firmware:

Der WiPy braucht im deep sleep 10,6 mA

… der FiPy im deep sleep 74,5 mA

Das spricht erst mal dafür, dass wir die radios oder was anderes FiPy-spezielles noch nicht ordentlich abgeschaltet haben. Aber auch die 10 mA des WiPys sind jenseits von Gut und Böse:

Mir fiel vorhin noch ein: “Serielle Schnitte abschalten – ist das möglich?”.

Einige Boards haben ja eine USB-Schnittstelle, die braucht Strom, ist bei uns aber auf das Expansion Board ausgelagert, d.h. dort könnte man sie abschalten, müssten wir aber nicht, wenn wir nur die Platine verwenden. Braucht die Serielle Strom, wenn man nix schickt? Und im Deep Sleep ist die doch sowieso aus, oder?

Ok, further research! Habe den WiPi am Multimeter, der im deep sleep 10 mA verbraucht und nacheinander die einzelnen Sensoren abgeklemmt.

kritischer Stromverbrauch einzelner Sensoren im deep sleep

Keine DS18B20 reduzieren den Verbauch nicht sonderlich, auch der BME280 ist erst mal unkritisch. Der faule Apfel oder gärige Honig ist die Wägezelle / der HX711. Wenn man E+ abklemmt geht der Verbauch von 10 mA auf ca. 3,5 mA zurück.

Ab Zeile 101 gibt es in der /hiveeyes/sensor_hx711.py eine power_off mit

und auch das logging sagt

32.4655 [hiveeyes.sensor_hx711    ] INFO   : Turning off HX711

scheint aber irgendwie nicht zu greifen!

Unsere Standard-Arduino-Bibliothek kann den HX711 bzw. über den HX711 den Verbraucher Wägezelle gut abschalten, an der Hardware sollte es also nicht scheitern. Müsste 'ne Software-Geschichte sein.

1 Like

Hi Clemens,

Schade. Also Haube auf…

Die C++-Implementierung sieht folgendermaßen aus:

Die MicroPython-Implementierung sieht ganz gleich aus:

Für Vorschläge und Nachforschungen wäre ich sehr dankbar. Gerade habe ich noch Turn off interrupts when powering down the HX711 · hiveeyes/terkin-datalogger@1d88b63 · GitHub hinzugefügt, aber dann bin ich mit meinem Latein am Ende. Wäre vorstellbar, dass der ESP32 auch hier zu schnell unterwegs ist und man daher zwischen dem Zuppeln am SCK kurz mal warten sollte?

Merci,
Andreas.

P.S.: Falls das “zwischendrin warten” irgendwie Sinn machen sollte – so ginge es:

import time
time.sleep_ms(50)

Hi there,

Just learned from [SOLVED/WORKEDAROUND] Having problems with HX711 load cell sensor - MicroPython Forum (Archive) that

Which is also confirmed through the datasheet and Electrical Engineering Stack Exchange:

A GPIO-based implementation for the RaspberryPi is also doing it likewise:

That research was easy.

Cheers,
Andreas.

2 Likes