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

- 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

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)

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:
- Raspberry Pi Pico: Grundlagen zum Strom sparen
- Raspberry Pi Pico: Grundlagen der Energieversorgung / Stromversorgung
- Raspberry Pi Pico: Stromverbrauch und Stromkosten
- Raspberry Pi Pico: Schlafmodus mit Aufweck-Funktion
- MicroPython: Schlafmodus
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
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
Online-Workshop: 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.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.






