Raspberry Pi Pico: Schlafmodus mit Aufweck-Funktion
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.
MicroPython hat dafür das Kommando „machine.lightsleep()“, das den Mikrocontroller in den jeweiligen Schlafmodus versetzt. Die logische Folge ist, dass man eine Möglichkeit vorsieht, den Raspberry Pi Pico, der sich im Schlafmodus befindet, durch einen Interrupt (IRQ) aufwecken kann.
Dazu müssen zwei Bedingungen erfüllt sein:
1. machine.lightsleep() muss mit einem Zeit-Parameter aufgerufen werden. Zum Beispiel machine.lightsleep(1000000).
2. Der IRQ-Handler muss eine Funktion aufrufen.
Beide Bedingungen werden im folgenden Programmcode erfüllt, der zeigt, wie sich ein Raspberry Pi Pico mithilfe einer Zustandsänderung an einem GPIO aus dem Schlafmodus wieder aktivieren lässt.
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 über die Entwicklungsumgebung wieder zu erlangen.
Programmcode
Ab MicroPython Version 1.26.1
Die eigentliche Hauptfunktion des Programms erfolgt in der Funktion wake_up(). Sie wird durch den Interrupt (IRQ) des GPIO-Eingangs ausgelöst.
In diesem Programmcode wird beispielhaft die Onboard-LED des Mikrocontrollers getoggelt. Hierbei ist zu beachten, dass der Taster nicht entprellt ist und der IRQ beim Drücken mehrfach ausgelöst werden kann.
Im Gegensatz zu anderen Programmen hat die Endlosschleife nur die Funktion, den Mikrocontroller in einen energiesparenden Schlafmodus zu bringen. Das Aufwecken funktioniert aber nur dann, wenn das Kommando eine Zeitangabe enthält, die dem größtmöglichen Wert entspricht (= ca. 71 Minuten). Im Schlafmodus wird der Großteil der Hardware deaktiviert, der definierte Interrupt-Pin bleibt jedoch aktiv. Sobald er einen Signalwechsel erkennt, wird der Mikrocontroller aufgeweckt, die Interrupt-Routine ausgeführt und die Endlosschleife weiter ausgeführt.
# Bibliotheken laden
import machine
import time
WAKEUP_PIN = 15 # GPIO
# Onboard-LED initialisieren (Grundzustand = EIN)
onboard_led = machine.Pin('LED', machine.Pin.OUT, value=1)
# IRQ-Handler
def wake_up(pin):
onboard_led.toggle()
print('IRQ wurde ausgelöst.')
# GPIO für die Aufwach-Funktion initialisieren
btn = machine.Pin(WAKEUP_PIN, machine.Pin.IN, machine.Pin.PULL_UP)
btn.irq(handler=wake_up, trigger=machine.Pin.IRQ_FALLING)
# Hauptprogramm
while True:
print('LIGHTSLEEP')
time.sleep(2)
machine.lightsleep(4_294_966) # ms (≈ 71 Minuten ≈ 1 Stunde 11 Minuten maximal)
Der Nachteil dieser Lösung ist, das wegen der Zeitangabe der Pico ab und zu auch ohne IRQ-Weckung aufwacht, was unter Umständen nicht gewünscht ist, weil es eine Fehlfunktion auslösen kann.
Hinweis: Wenn man die Endlosschleife, mit der der Pico zurück in den Schlafmodus geschickt wird, unverändert lässt, dann kann man eine Fehlfunktion ausschließen.
Alternative: DORMANT-Modus mit Aufweck-Funktion
Wenn man die Aufweck-Funktion nach Zeit vermeiden möchte, braucht man eine externe Bibliothek, die den Raspberry Pi Pico in den DORMANT-Modus schaltet und eine Aufweck-Funktion integriert hat.
Alternative: Auto-Power-Off-Schaltung
Eine Auto-Power-Off-Schaltung hat den Vorteil, dass man sich nicht um die Stromsparmechnismen des Mikrocontrollers Gedanken machen muss. Mit dieser Schaltung kann sich der Mikrocontroller selber von der Stromversorgung trennen. Dadurch kann man den Stromverbrauch auf Null drücken. Allerdings wird beim Aufwecken des Mikrocontrollers der Programmcode immer neu gestartet.
Weitere verwandte Themen:
- Raspberry Pi Pico: Grundlagen zum Strom sparen
- Raspberry Pi Pico: Energie sparen im Schlafmodus
- Raspberry Pi Pico: Schlafmodus mit Aufweck-Funktion
- Raspberry Pi Pico: Grundlagen der Energieversorgung / Stromversorgung
- Raspberry Pi Pico: Stromverbrauch und Stromkosten
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.






