Raspberry Pi Pico W - Einstieg mit Micropython
Mit dem Raspberry Pi Pico (w) und Micropython ist es möglich Python Skripte auf dem Pico laufen zu lassen. So ist es zum Beispiel möglich Sensoren via GPIO Board auszulesen und die Werte an einem Display auszugeben oder beim Pico W via WLAN in die Cloud zu übertragen. Das Ansteuern von LEDs ist ebenfalls ein Kinderspiel. Mit Python kann man auch die Daten via Webservice publizieren. Die Möglichkeiten sind also sehr groß. Einen kleinen Einstieg in die Welt der Pico Microcontroller findet ihr deshalb in diesem Artikel.
Hardware
Die folgende Hardware wird benötigt:
- Raspberry Pi Pico oder Raspberry Pi Pico w
- Header Stiftleisten oder ihr kauft den Pico als H Variante, da sind die Header bereits aufgelötet.
- USB-C auf MicroUSB Kabel oder MicroUSB Kabel zum Anschluss des Pico an einen Computer oder anderen Raspberry Pi zur Programmierung
Pinbelegung
Pico
Hier die Pin Belegung des Raspberry Pi Pico:
Pico W
Hier die Pin Belegung des Raspberry Pi Pico w:
Micropython installieren
Um Micropython auf dem Pico zu installieren müsst ihr als erstes die Richtige Version herunterladen:
Dann müsst ihr den Pico, während ihr den BOOTSEL
Knopf gedrückt haltet, an euren Computer / Raspberry Pi anschließen. Dann könnt ihr den Knopf loslassen und ihr werdet den Pico als Wechseldatenträger in eurem Dateimanager finden. Auf diesen könnt ihr dann einfach die heruntergeladenen Datei kopieren (nicht in einen Unterordner, direkt auf den root folder). Danach startet der Pico neu. Nach dem Neustart ist das Micropython REPL (Read Evaluate Print Loop) via USB Serial verfügbar.
Verbindung zu REPL via MacOS
Unter MacOS kann das Tool Screen verwendet werden um auf das REPL auf dem Pico via USB Serial zu verbinden. Das TTY Device sollte als tty.usbmodem<ID> angelegt worden sein:
ls -la /dev/tty.*
sollte euch folgende Ausgabe geben, bei mir heißt das TTY Device tty.usbmodem101
0 crw-rw-rw- 1 root wheel 0x9000002 30 Mai 09:05 /dev/tty.Bluetooth-Incoming-Port 0 crw-rw-rw- 1 root wheel 0x9000004 20 Jul 17:13 /dev/tty.usbmodem101 0 crw-rw-rw- 1 root wheel 0x9000000 30 Mai 09:05 /dev/tty.wlan-debug
Dann verbinden wir uns mittels screen und der Boudrate 115200 an die REPL des Pico:
screen /dev/tty.usbmodem101 115200
Es sollte ein schwarzer, leerer Screen erscheinen. Ihr könnt nun einfach folgenden Befehl absenden um zu testen ob ihr richtig verbunden seid:
print("Hello World")
Das sollet die folgende Ausgabe produzieren:
Hello World >>>
Mit dieser Tastenkombination beendet man die USB Serial Verbindung:
Ctrl + A
, Ctrl + \
Mit dem bekannten Ctrl + A
, Ctrl + D
kann man die USB Serial Verbindung offen lassen und dennoch aus der REPL Konsole gehen (detach). Wieder verbinden geht dann mit screen -x
auf der Kommandozeile (attach).
Verbindung zu REPL via Linux
Unter Linux kann mit dem Tool picocom
auf das REPL des Pico zugegriffen werden:
picocom /dev/ttyUSB0 -b115200
REPL Soft Reset
Mit dem drücken von STRG + D
, wird das REPL neu gestartet. Dies kann sinnvoll sein, wenn etwas schief lief.
>>> MPY: soft reboot MicroPython v1.19.1 on 2022-07-20; Raspberry Pi Pico W with RP2040 Type "help()" for more information. >>>
Erster Test in der REPL Konsole -- LED anschalten
In einem ersten Test lassen wir die LED des Pico leuchten. Dafür einfach folgende Befehle in die REPL Konsole schreiben:
!Achtung!: Beim Pico und Pico W gibt es einen Unterschied im Ansprechen der LED. Beim Pico ist der Pin GPIO25
:
from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)
Beim Pico W WL_GPIO0
:
from machine import Pin
led = Pin("LED", Pin.OUT)
led.value(1)
Anschalten in beiden Fällen mit:
led.value(0)
Pico Temperatur Sensor auslesen
Der Raspberry Pi Pico hat einen eigenen Temperatur Sensor fest verbaut. Diesen kann man auch als einen ersten Test auslesen. Dafür einfach folgende Zeilen in der REPL Konsole ausführen:
import machine
from time import sleep
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)
#degree symbol decleration
degreecels = '\u00B0' + "C"
while True:
reading = sensor_temp.read_u16() * conversion_factor
temperature = 27 - (reading - 0.706)/0.001721
print(temperature, degreecels)
sleep(10)
Der Output sieht dann in etwa so aus:
28.44883 27.51255 27.98069 28.44883
Abbrechen könnt ihr mit STRG + C
Pico W WLan
Der Raspberry Pi Pico W besitzt ein WLAN / Bluetooth Modul, mit welchem man sich mittels Wifi ins Internet oder Heimnetz verbinden kann.
Ein WLAN Scan kann mit diesen Zeilen in der REPL erfolgen:
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
print(wlan.scan())
Der Output sieht in etwa so aus:
[(b'FRITZ!Box 7590 CD', b'\x1c\xedo,#E', 1, -88, 5, 2), (b'Vodafone Hotspot', b'\x9e\xc8\xfcUV\x95', 11, -93, 0, 1)]
Die fünf Werte stehen für die BSSID, Kanal, RSSI, Verschlüsselung und Versteckt (1) oder Sichtbar (0).
Verschlüsselung:
- 0 – open
- 1 – WEP
- 2 – WPA-PSK
- 3 – WPA2-PSK
- 4 – WPA/WPA2-PSK
Um nun mit einem gewünschten WLAN zu verbinden könnt ihr folgende Zeilen nutzen:
import utime
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('Wireless Network', 'The Password')
while not wlan.isconnected() and wlan.status() >= 0:
print("Waiting to connect:")
utime.sleep(1)
print(wlan.ifconfig())
Wenn alles geklappt hat sieht man diesen output:
('192.168.50.204', '255.255.255.0', '192.168.50.1', '192.168.50.25')
Hostname und Country setzen
man kann ab MicroPython Version rp2-pico-w-20230228-unstable-v1.19.1-910-g4937174b4.uf2
den Hostname und das Wifi Land setzen in dem man folgendes nutzt:
# Setting Country Code
network.country("DE")
# Setting Hostname
network.hostname("picohostname")
Pico zurücksetzen
Sollte etwas schief gehen und ihr möchtet den Pico komplett zurücksetzen, dann könnt ihr das mit dem falsch_nuke Tool machen. Einfach herunterladen und auf den PICO übertragen. Danach müsst ihr aber auch wieder Micropython installieren.
Solltet ihr einfach nur die main.py wieder deaktiviert, bzw. umbenannt haben, damit sie nicht mehr automatisch startet, dann kopiert diese u2f Datei im BOOTSEL Mode auf den Pico:
Weitere Pico Anwendungsbeispiele
Hier findet ihr alles rund um den Raspberry Pi Pico:
GitHub Repository
ihr könnt alle MicroPython Scripte und Beispiele von mir auch bei GitHub finden:
Quellen
- https://www.raspberrypi.com/documentation/microcontrollers/
- https://projects.raspberrypi.org/en/projects/getting-started-with-the-pico/0