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:

Teilen:

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

Programmieren mit dem Raspberry Pi Pico
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.

Online-Workshop buchen

Für Ihre Fragen zu unseren Online-Workshops mit dem Raspberry Pi Pico besuchen Sie unseren PicoTalk (Online-Meeting). (Headset empfohlen)

Zum PicoTalk

 

Elektronik-Set Pico Edition
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 jetzt bestellen

 

Elektronik-Set Pico WLAN Edition
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 jetzt bestellen

 

Elektronik-Set Sensor Edition
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.

Elektronik-Set jetzt bestellen