MicroPython: _thread
Das MicroPython-Modul „_thread“ ist eine Implementierung für Multithreading. Multithreading ist die Fähigkeit eines Prozessors, mehrere Programmabläufe (Threads) wechselweise ausführen zu können. Speziell bei simultanem Multithreading ist ein Prozessor sogar in der Lage mehrere Threads zeitgleich abzuarbeiten. Ein Thread ist ein Code-Faden bzw. ein Programmablauf.
Wenn ein Prozessor (CPU) über mehrere Rechenkerne (Multi-Core) verfügt, dann ist mit entsprechender Software-Unterstützung durch ein Betriebssystem oder entsprechender Programmierung tatsächlich eine parallele Ausführung eines Programmcodes möglich.
Bei einem Mikrocontroller, wie dem Raspberry Pi Pico haben wir typischerweise kein Betriebssystem. Das heißt, wollen wir den zweiten Rechenkern des RP2040-Mikrocontrollers auf dem Pico nutzen, dann muss sich der Programmierer darum kümmern.
Das Parallelisieren von Funktionen verlangt vom Programmierer eine völlig andere Denkweise. Während man bei einer reinen sequentiellen Verarbeitung von Programmcode (Zeile für Zeile) den Programmablauf aus dem Programmcode ablesen kann, wird bei der parallelen Verarbeitung der Programmablauf verschachtelt oder ist mehrfach vorhanden. Das kann man aus dem Programmcode nur noch bedingt herauslesen. Das muss man sich denken oder vorstellen können.
MicroPython-Modul „_thread“
Das MicroPython-Modul „_thread“ ermöglicht dem Programmierer die Nutzung eines zweiten Rechenkerns, wenn er vorhanden ist.
Das MicroPython-Modul „_thread“ gilt als fehlerhaft und experimentell. Die Dokumentation ist entsprechend dürftig. Der Einsatz in einer Produktivumgebung ist nicht zu empfehlen. Für einfache, nebenläufige Funktionen kann man „_thread“ sicherlich nutzen.
Programmcode: Blinkende LED
Das MicroPython-Modul „_thread“ kann mit einem einfachen „import _thread“ im Programmcode hinzugefügt werden.
In diesem Programmcode stellt die Funktion „blink“ eine blinkende LED dar. Die Funktion wird zur Ausführung an den zweiten Rechenkern ausgelagert.
Im anschließenden Hauptprogramm wird einfach ein Zählerwert jede Sekunde hochgezählt und der Wert ausgegeben. Wenn die LED blinkt, dann weiß man, dass das Multithreading funktioniert.
# Bibliotheken laden import machine import utime as time import _thread # Initialisierung der Onboard-LED led_onboard = machine.Pin(25, machine.Pin.OUT, value=0) # Funktion: Blinkende LED def blink(): while True: # LED einschalten led_onboard.on() # halbe Sekunde warten time.sleep(0.5) # LED ausschalten led_onboard.off() # 1 Sekunde warten time.sleep(1) # Funktion aufrufen und vom 2. Kern ausführen lassen _thread.start_new_thread(blink, ()) # Hauptprogramm (Sekundenzähler mit Schleife) count = 0 while True: time.sleep(1) count += 1 print(count)
Hinweis: Natürlich, funktional liese sich eine blinkende LED mit einer Timer-Funktion besser realisieren. Den zweiten Kern mit dieser Aufgabe zu betrauen, ist nicht nötig. Allerdings ist das nur ein Beispiel. Denn auf diese Weise ist ersichtlich, dass durch die in Software realisierte blinkende LED, das Programm auf dem zweiten Rechenkern läuft.
Verbraucht die Nutzung des 2. Kerns mehr Strom?
Bei dem oben dargestellten Programmcode kam es zu keiner Änderung des Stromverbrauchs.
Der Stromverbrauch lag zwischen 0,019 und 0,021 A in Abhängigkeit der blinkenden LED.
Weitere verwandte Themen:
- MicroPython: Parallele Verarbeitung
- MicroPython: uasyncio / async
- Raspberry Pi Pico: MicroPython
- Raspberry Pi Pico: Onboard-LED blinken lassen
Teilen:
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
Hardware-nahes 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.
Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)
Elektronik-Set Pico Edition
Raspberry Pi Pico: Hardware-nahes Programmieren mit MicroPython
Leichter Einstieg mit All-in-one-Set zum sofort Loslegen, um eigene Steuerungen programmieren.
Elektronik-Set Pico WLAN Edition
Raspberry Pi Pico W: IoT und Smart Home mit WLAN und MQTT
Betreibe Deinen Raspberry Pi Pico W als drahtloser Sensor in Deinem WLAN, versende E-Mails mit Daten und kommuniziere per MQTT im Internet of Things oder Smart Home.
Elektronik-Set Sensor Edition
Erweiterung zu den Elektronik-Sets Pico Edition und Pico WLAN Edition
Elektronik-Set mit den beliebtesten Sensoren zum Messen von Temperatur, Helligkeit, Bewegung, Lautstärke und Entfernung.