Raspberry Pi Pico: DORMANT-Modus mit Aufweck-Funktion

Diese Lösung funktioniert nur auf einem Raspberry Pi Pico mit RP2040.

Der Anwendungsfall ist eigentlich ganz einfach, der Raspberry Pi Pico soll sich in einem Schlafzustand befinden und durch ein externes Ereignis, zum Beispiel eine Zustandsänderung an einem GPIO, wieder aufwachen.

Die einzige richtige Lösung wäre der DORMANT-Modus in Kombination mit einer Aufweck-Funktion. Im DORMANT-Modus ist der Stromverbrauch beim Raspberry Pi Pico mit ungefähr 1 mA am geringsten. Der Stromverbrauch ist so gering, dass er mit herkömmlichen Methoden kaum messbar ist.

Der Begriff „Dormant“ (englisch für schlafend, ruhend) bezeichnet bei Mikrocontrollern einen Energiesparzustand, in dem der Controller (oder Teile davon) nicht aktiv arbeitet. Der genaue Unterschied hängt vom jeweiligen Hersteller und Mikrocontroller-Typ ab. Er dient dazu, Energie zu sparen, ohne den kompletten Zustand des Systems zu verlieren.

Leider gibt für den Raspberry Pi Pico direkt in MicroPython keine zuverlässig funktionierende Möglichkeit einer Aufweck-Funktion aus dem DORMANT-Modus. Allerdings gibt es eine MicroPython-Bibliotheken, die diese Funktion ermöglicht.

Aufbau und Bauteile

Raspberry Pi Pico mit Reset- und Wakeup-Taster

  • Der Taster am GPIO 15 dient zum Aufwecken aus dem Schlafmodus.
  • Der Taster am RUN-Pin ist optional und dient zum manuellen Abbrechen des Programmcodes und Aufwecken aus dem Schlafmodus, um die Kontrolle des Mikrocontrollers durch die Entwicklungsumgebung wieder zu erlangen.

Externe MicroPython-Bibliothek

Eine MicroPython-Bibliothek auf Github implementiert einen Workaround für den Low Power Support für den Raspberry Pi Pico. Der Autor Tom Jorquera spricht von einem experimentellen Code, der aber nach ausführlichen Tests stabil funktioniert.

Diese MicroPython-Bibliothek verwendet den DORMANT-Modus, um den Pico in den Schlafmodus zu versetzen. Außerdem wird einer oder mehrere GPIOs zum Aufwecken definiert.

Um diese MicroPython-Bibliothek zu verwenden, muss man nur die Datei „lowpower.py“ auf den Raspberry Pi Pico kopieren und im Programmcode mit „import lowpower“ referenzieren.

Programmcode: Aufweck-Funktion mit GPIO gegen GND

Raspberry Pi Pico mit Reset- und Wakeup-Taster

Der Programmcode schaltet den Raspberry Pi Pico regelmäßig in den Tiefschlafmodus, um Energie zu sparen. Für die Aufweck-Funktion dient ein GPIO mit Interrupt, der auf einen LOW-Impuls (Taster gegen GND) reagiert.
Die Onboard-LED dient als Anzeige für den Betriebsmodus für AN und AUS (Schlafmodus).

# Bibliotheken laden
import machine
import time
import lowpower

WAKEUP_PIN = 15  # GPIO

# GPIO für die Aufwach-Funktion initialisieren
btn = machine.Pin(WAKEUP_PIN, machine.Pin.IN, machine.Pin.PULL_UP)
btn.irq(lambda e: print('AUFWACHEN'), machine.Pin.IRQ_FALLING)

# Onboard-LED initialisieren (Grundzustand = EIN)
onboard_led = machine.Pin('LED', machine.Pin.OUT, value=1)

# Hauptprogramm
while True:
    time.sleep(3)
    print('SCHLAFEN')
    print('Taster drücken zum Aufwachen')
    onboard_led.off()
    # In den Tiefschlaf versetzen
    lowpower.dormant_with_modes({ WAKEUP_PIN: (lowpower.EDGE_LOW) })
    # Hier geht es weiter nach dem Aufwachen
    onboard_led.on()

Programmcode: Aufweck-Funktion mit GPIO gegen VCC (3V3)

Raspberry Pi Pico mit Reset- und Wakeup-Taster

Der Programmcode schaltet den Raspberry Pi Pico regelmäßig in den Tiefschlafmodus, um Energie zu sparen. Für die Aufweck-Funktion dient ein GPIO mit Interrupt, der auf einen HIGH-Impuls (Taster gegen 3V3) reagiert.
Die Onboard-LED dient als Anzeige für den Betriebsmodus für AN und AUS (Schlafmodus).

# Bibliotheken laden
import machine
import time
import lowpower

WAKEUP_PIN = 15  # GPIO

# GPIO für die Aufwach-Funktion initialisieren
btn = machine.Pin(WAKEUP_PIN, machine.Pin.IN, machine.Pin.PULL_DOWN)
btn.irq(lambda e: print('AUFWACHEN'), machine.Pin.IRQ_RISING)

# Onboard-LED initialisieren (EIN)
onboard_led = machine.Pin(25, machine.Pin.OUT, value=1)

# Hauptprogramm
while True:
    time.sleep(3)
    print('SCHLAFEN')
    print('Taster drücken zum Aufwachen')
    onboard_led.off()
    # In den Tiefschlaf versetzen
    lowpower.dormant_with_modes({ WAKEUP_PIN: (lowpower.EDGE_HIGH) })
    # Hier geht es weiter nach dem Aufwachen
    onboard_led.on()

Alternative: Hardware-Reset mit Taster

Wenn man keine externe Bibliothek verwenden will und das Schalten gegen GND ausreicht und ein Neustart des Programmcodes erfolgen darf, dann kann man auch den RUN-Pin zum Aufwecken verwenden.

Alternative: Auto-Power-Off-Schaltung

Eine Auto-Power-Off-Schaltung hat den Vorteil, dass man sich nicht auf die Stromsparmechnismen des Mikrocontrollers verlassen muss. Mit dieser Schaltung kann der Mikrocontroller den ganzen Aufbau von der Stromversorgung trennen. Dadurch kann man den Stromverbrauch auf Null drücken. Allerdings wird beim Aufwecken des Mikrocontrollers und damit auch der Programmcode neu gestartet.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren