Ein Anfängerleitfaden zu MicroPython mit dem Raspberry Pi Pico

Der Raspberry Pi Pico ist das neueste Mitglied der Raspberry Pi Familie. Zuvor waren die Raspberry Pi-Produktlinie Einplatinencomputer, die ein Betriebssystem ausführen konnten.

Basierend auf dem neuen RP2040-Chip unterstützt der Raspberry Pi Pico sowohl MicroPython als auch C/C++. Mit dem Raspberry Pi Pico können Einsteiger und Enthusiasten Hardware und angeschlossene Geräte steuern. Die GPIO-Pins des Raspberry Pi Pico können verwendet werden, um Lichter auszublenden, den Zustand von Schaltern auszulesen und vieles mehr.

Was ist MicroPython?

Die Programmierung auf Mikrocontrollern erfolgte überwiegend in der Sprache C, wie sie in Arduino-Entwicklungsboards verwendet wird . 2014 wurde dann eine neue Programmiersprache für Mikrocontroller, MicroPython, veröffentlicht. Mit MicroPython können Sie Python-Code auf dem Bare Metal eines Mikrocontrollers schreiben. Das bedeutet, dass Sie Python-Code ohne Betriebssystem schreiben können.

Python ist eine anfängerfreundliche Programmiersprache auf hohem Niveau, die es Benutzern ermöglicht, sich auf das Erlernen von Programmierkonzepten zu konzentrieren. Dies ist bei MicroPython ähnlich.

Verwendung einer LED

Um die Hardware zu steuern, spricht der Pico mit der Reihe von Pins entlang seiner beiden Kanten. Diese werden als General Purpose Input Output (GPIO)-Pins bezeichnet und die On-Board-LED befindet sich auf GPIO 25. Um sie zu steuern, importieren Sie zuerst die erforderlichen Bibliotheken:

 import machine
 import utime

Rufen Sie dann die Pin- Funktion mit der Maschinenbibliothek auf, um den GPIO-Pin des Pins zu verarbeiten. In diesem Fall richten wir den Pin auf GPIO 25 ein, also ist es der erste Parameter. Der zweite Parameter legt ihn als Ausgangs-Pin und nicht als Eingangs-Pin fest. Dadurch weiß der Pin, was er tun soll:

 onboard_led = machine.Pin(25, machine.Pin.OUT)

Um fortzufahren, weisen wir den Pico im folgenden Code an, seinen Pin- Wert bei GPIO 25 auf 1 oder "on" zu setzen.

 while True:
onboard_led.value(1)

Sie können jedoch feststellen, dass nichts zu passieren scheint. Dies liegt daran, dass der Pico sehr schnell arbeitet, die LED also schneller aufleuchtet, als man mit dem Auge wahrnehmen kann. Um dies zu beheben, müssen wir das Programm mit dem Befehl sleep aus der utime- Bibliothek verlangsamen . Der vollständige Code, bei dem die LED ein- und ausgeschaltet wird, ist unten zu sehen:

 import machine
import utime
onboard_led = machine.Pin(25, machine.Pin.OUT)
while True:
onboard_led.value(1)
utime.sleep(5)
onboard_led.value(0)
utime.sleep(5)

Ein- und Ausschalten der LEDs

Alternativ gibt es eine andere Möglichkeit, LEDs mit dem Toggle- Befehl ein- und auszuschalten:

 import machine
import utime
onboard_led = machine.Pin(25, machine.Pin.OUT)
while True:
led_onboard.toggle()
utime.sleep(5)

Im Beispiel ersetzt der Toggle- Befehl das Setzen des Wertes der LED auf 1 und später auf 0. Sie leuchtet noch 5 Sekunden und erlischt dann weitere 5 Sekunden, solange das Programm läuft.

Funktionen erstellen

Ein Anfängerleitfaden zu MicroPython mit dem Raspberry Pi Pico - micropython function

Wenn Programme komplexer werden, hilft es, Codeblöcke zu gruppieren, damit die Kohärenz erhalten bleibt. Dazu erlaubt MicroPython wie Python die Verwendung von Funktionen. Funktionen sind eine Gruppe zusammengehöriger Anweisungen, die eine bestimmte Aufgabe ausführen. Im folgenden Code ist beispielsweise eine Funktion namens printNames definiert:

 def printNames:
print(“Raspberry Pi 1”)
print(“Raspberry Pi 2”)
print(“Raspberry Pi 3”)
print(“Raspberry Pi 4”)
print(“Raspberry Pi Compute Module”)
print(“Raspberry Pi 400”)
print(“Raspberry Pi Pico”)
printNames()

Die letzte Zeile im Code ruft die Funktion auf, damit sie tatsächlich ausgeführt wird.

Schleifen

Ein Anfängerleitfaden zu MicroPython mit dem Raspberry Pi Pico - micropython conditional statements

Bedingte Logik führt unterschiedliche Aktionen aus, je nachdem, ob eine boolesche Einschränkung als wahr oder falsch ausgewertet wird. Viele Raspberry-Pi-Pico-Projekte basieren auf diesen logischen Aussagen. Im folgenden Beispiel wird eine if-else-Anweisung verwendet, um zu bestimmen, ob eine print- Anweisung ausgeführt wird:

 i = 17
def printNames():
if i > 15:
print("i is greater than 15!")
else:
print("i is not greater than 15")
printNames()

Im nächsten Beispiel wird die for-Schleife mit der Bereichsfunktion verwendet. Diese Schleifen können verwendet werden, um einen Codeblock mehrmals zu wiederholen.

Ein Anfängerleitfaden zu MicroPython mit dem Raspberry Pi Pico - for loops on rasberrypi pico micropython example with unicorn emulator

In diesem Beispiel wird der Druckbefehl fünfmal mit einer Verzögerung von jeweils fünf Sekunden mit dem Schlafbefehl ausgeführt:

 import utime
def printNames():
for i in range(5):
print("Raspberry Pi Pico")
utime.sleep(5)
printNames()

Analog-Digital-Wandler (ADC)

Obwohl Sie es nicht sehen können, verfügt der Raspberry Pi Pico über einen internen Analog-Digital-Wandler. Im folgenden Beispiel wird ein Potentiometer an den Raspberry Pi Pico auf GPIO 26 angeschlossen, der ADC-Funktionalität unterstützt:

 import machine
import utime
pot = machine.ADC(26)
while True:
print(pot.read_u16())
utime.sleep(1)

Bevor wir diesen ADC-fähigen Pin verwenden können, muss er mit der ADC-Funktion eingerichtet werden. Während das Programm läuft, wird der Wert des Potentiometers jede Sekunde gedruckt. Andere Pins auf dem Raspberry Pi Pico, die ADC-fähig sind, sind GPIO27, 28 und 29.

Pulsweitenmodulation (Pwm)

Der digitale Ausgang eines Mikrocontrollers kann nur 1 oder 0 sein. Um ein analoges Signal zu erzeugen, benötigen Sie einen Digital-Analog-Wandler. Eine andere Möglichkeit besteht jedoch darin, künstlich ein analoges Signal zu erzeugen, indem man Pulsweitenmodulation oder kurz PWM verwendet.

Das Ein- und Ausschalten eines digitalen Signals wird als Impuls bezeichnet. Durch die Modulation der Breite eines Impulses entsteht so künstlich ein analoges Signal, wie im folgenden Beispiel zu sehen:

 import machine
import utime
pot = machine.ADC(26
led = machine.PWM(machine.Pin(21))
led.freq(1000)
while True:
led.duty_u16(pot.read_u16())

Zuerst wurden die Maschinen- und utime- Bibliotheken importiert. Ein Objekt, onboard_led, wird mit einem aktivierten PWM-Ausgang an GPIO-Pin 21 erstellt. Dann wird mit dem freq- Befehl die Frequenz zur Modulation der Pulsbreite eingestellt. Stellen Sie sich vor, Sie drehen das Potentiometer, die LED wird heller, wenn sie in eine Richtung gedreht wird.

Dies liegt daran, dass der Analogwert des Potentiometers als Wert für das Tastverhältnis des PWM-Signals verwendet wird, es ist ein Wert zwischen 0 und 65535. Ohne Umrechnung kann jedoch ein leichtes Drehen des Potentiometers bereits dazu führen, dass die LED ihre maximale Helligkeit erreicht .

Um dies zu beheben, damit das Potentiometer erst bei ganzer Enddrehung die volle Helligkeit erreicht, wird der Wert mit der Funktion duty_u16 umgerechnet. Diese Funktion wandelt es in eine 16-Bit-Ganzzahl um, die einen Wert zwischen 0 und 1024 ist, der dem gleichen Wertebereich entspricht, den Sie vom analogen Pin des Pico erhalten würden.

Schaffen Sie mehr mit Raspberry Pi Pico

In diesem Artikel wurden die grundlegenden Befehle in MicroPython auf dem Raspberry Pi Pico behandelt. Weitere Informationen finden Sie in der offiziellen Dokumentation zur MicroPython-Programmierung mit dem Raspberry Pi Pico .

Wenn es noch nicht auf Ihrem Raspberry Pi Pico eingerichtet ist, holen Sie sich die Thonny-IDE , um Ihren MicroPython-Code auszuführen, oder testen Sie alternativ den Unicorn-CPU-Emulator , um einen virtuellen Mikrocontroller direkt auf Ihrem Computer auszuführen.