Raspberry Pi Pico W - Einstieg mit Micropython

Aus Laub-Home Wiki

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:

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