Raspberry Pi Pico: Erste Schritte: Programm hochladen und LED blinken lassen

Nachdem ich im ersten Artikel über den Raspberry Pi Pico die Hardware, die technischen Daten und das Pinout des Pico vorgestellt und mit der STM32 Bluepill, dem Arduino Nano und dem ESP8266 verglichen haben, blieb die Frage im Raum stehen, wie einfach sich der Pico programmieren lässt und ob er ein ernstzunehmender Konkurrent zu den etablierten Mikrocontrollern ist.

Stellen wir uns also einfach mal ganz dumm und schließen den Pico ganz blauäugig an den USB-Port eines Windows 7 (64bit) Systems an. Dann wird automatisch etwas erkannt und wir erhalten folgende Meldung:



Hmm, den Treiber für "RP2 Boot" konnte Windows 7 nicht finden. Mal schauen, ob wir den unbedingt bauchen, und wenn ja, woher wir den bekommen.

Aha, der Pico meldet sich also als Massenspeichergerät an, also in etwa so etwas wie ein USB-Stick. Der Pico wird als neues Laufwerk in Windows eingeklickt und wir können darauf zugreifen: Datenträger in Laufwerk J: ist RPI-RP2 Volumeseriennummer: 0014-A20E Verzeichnis von J:\ 05.09.2008 16:20 241 INDEX.HTM 05.09.2008 16:20 62 INFO_UF2.TXT 2 Datei(en), 303 Bytes 0 Verzeichnis(se), 134.057.984 Bytes frei Seltsamerweise haben wir auf dem Laufwerk noch 134 MB (entspricht 128 MiB) frei. Woher die kommen, ist mir schleierhaft. Der Pico soll doch "nur" (eigentlich eine ganze Menge) 2 MB Flash-Speicher haben. Seltsam.

Schauen wir uns einmal die Dateien an. Die INDEX.HTM leitet auf https://raspberrypi.com/device/RP2?version=E0C9125B0D9B und damit auf die Dokumentation zum Pico weiter. Praktisch ist hier, dass wir auch gleich eine Versionsnummer des Picos haben.

In der INFO_UF2.TXT steht: UF2 Bootloader v3.0 Model: Raspberry Pi RP2 Board-ID: RPI-RP2 Das ist jetzt auch nicht so interessant. Mehr aber die angeblichen 128 MB USB-Speicher. Ich möchte gerne wissen, ob die "echt" sind und kopiere erst einmal eine große Datei auf den Stick:



Oops, nur 1 MB/s Datendurchsatz, dass ist ja nicht gerade viel. Aber okay, der Pico gibt ja auch nur USB 1.1 als Spezifikation an, die er kann. Und USB wurde ja auch mit einer maximalen Datenübertragungsrate von 12 Mbit/s als USB 1.0 eingeführt. Der USB-Flash-Speicher könnte sicher schneller, aber die Schnittstelle lässt nicht mehr zu. Als USB-Stick-Ersatz taugt der Pico also schon mal nicht: zu langsam.

Schlimmer noch: Als ich die 72 MB-Wave-Datei wieder auf meine Platte zurückkopiere und versuche abzuspielen scheitert das. Ein Blick in die Datei mit dem Hex-Editor gibt Aufschluss: es sind nur noch Nullbytes vorhanden. Der Pico ist also garantiert kein USB-Stick, sondern eher eine Datenvernichtungsmaschine ;) 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Das erste hochgeladene Programm: der klassische Blinker

Die angegebenen 128 MB USB-Speicher sind also Fake. Nicht schön. Da hätte man auch 2 MB Speicherplatz angeben können, das wäre weniger verwirrend gewesen.

Doch wozu ist dann der USB-Massenspeicher gut? Die Antwort ist: Dies ist die komfortable Möglichkeit, Programme hochzuladen / auf den Pico zu flashen. Jetzt muss man nämlich nur eine *.uf2-Datei, in dem das Programm gespeichert ist, auf das Pico-Laufwerk schieben. Dadurch wird das Binärprogramm hochgeladen und startet den Pico neu. UF2 steht übrigens für "USB Flash Format" und ist ein von Microsoft MakeCode kommendes Format für eben Mikrocontroller-Programme. Probieren wir das Hochladen per Drag and Drop doch gleich mal aus.


In der Pico-Dokumentation findet sich ein Verweis auf die Datei blink.uf2, die wir herunterladen und dann auf das Pico-Laufwerk schieben.

Und schon trennt sich das Pico-Laufwerk, der Pico macht einen Reset und blinkt dann fröhlich vor sich her. Wir haben gerade unser erstes Programm auf den Pico hochgeladen und gestartet. Das war easy.

Wenn wir jetzt den Pico vom USB-Port abziehen und wieder anstecken, dann taucht kein Laufwerk in Windows auf, sondern das Blink-Programm läuft weiter. Was, wenn wir wieder ein Programm hochladen wollen? Auch das ist ganz einfach: Einfach den weißen Bootsel-Taster auf der Pico-Platine gedrückt halten und das Laufwerk taucht wieder auf. Jetzt können wir ein anderes Programm hochladen oder die Verbindung ohne neuen Upload wieder trennen, dann läuft das alte Programm weiter.

Ich muss schon sagen: der Upload ist mit dem Pico wirklich sehr viel einfacher. Er funktioniert einfach ohne zusätzliche Software oder Treiber. Bei Arduino und Co muss man meist erst CH340-Treiber für die serielle Schnittstelle downloaden, die IDE installieren, hoffen, den richtigen seriellen Port mit der richtigen Baudrate eingestellt zu haben und dann in der Software auf Upload klicken. Das ist beim Pico wirklich sehr viel einfacher.

Allerdings gilt das nur für fertig kompilierte Programme, also *.uf2-Dateien. Die könnten wir mit einem entsprechenden C-Compiler und Linker selbst generieren. Die Umgebung dafür ist allerdings schwieriger einzurichten und eher eine Sache für ein Linux-Betriebssystem. Das behalten wir uns erst einmal für später auf, wenn wir ein bisschen fortgeschrittener sind.

Für Anfänger eher geeignet: Micro-Python

Für Pico-Anfänger wie uns ist wohl zum Einstieg erst einmal Python eher geeignet. Python kennen wir ja auch schon vom großen Bruder, dem Raspberry Pi. Für den Pico gibt es Python auch, ein wenig schlanker und für den Gebrauch am Pico angepasst, aber im Grunde das Gleiche.

Genauer nachzulesen, was Micro-Python ist, kann man wieder in der Pico-Dokumentation. Dort finden wir auch unseren Python-Interpreter, natürlich ein *.uf2-Programm: https://micropython.org/download/rp2-pico/rp2-pico-latest.uf2.

Nachdem wir den Micro-Python-Interpreter aufs Pico-Laufwerk geschoben haben, macht dieser wieder einen Reset. Der LED blinkt jetzt nicht mehr, weil nun der Interpreter das installierte Programm ist. Der Pico befindet sich jetzt im Micro-Python-Interpreter-Modus.

Ein Python Programm schreiben und hochladen

Und damit hört der Komfort dann leider auch schon wieder auf. Denn wenn Micro-Python läuft, müssen wir über die serielle Schnittstelle auf den Pico zugreifen, um ein Programm hochzuladen. Dummerweise bockt der Treiber für die serielle Schnittstelle unter Windows 7 (mag unter Windows 10 besser sein), die Micro-Python zur Verfügung stellt:



"Board CDC" funktioniert nicht. Unter den Eigenschaften steht im Gerätemanager, dass kein Treiber installiert ist. Also versuchen wir den Treiber zu aktualisieren. "Automatisch nach aktueller Treibersoftware suchen" dauert ewig, nur um - wie so oft - am Ende fehlzuschlagen. Also müssen wir uns den Treiber anderweitig besorgen.

Da hilft uns unser alter Bekannter Zadig, den man hier downloaden kann und der mir schon bei anderen Serial-Driver-Problemen aus der Patsche geholfen hat. Wir starten Zadig und wählen als Device "Board CDC (Interface 0)" aus und daneben als Treiber "USB Serial (CDC)". Kann man sich gut merken, "CDC" kommt in beiden Einträgen vor. Nach einer Weile ist der Treiber installiert und es taucht ein "Board CDC (Interface 0) (COMxx)" als Gerät unter den seriellen Anschlüssen auf:



Jetzt können wir uns mit jedem beliebigen Terminalprogramm unter COMxx auf den Pico mit Micro-Python verbinden, zum Beispiel mit Putty (Download hier). Dort dann den serielle Port COMxx einstellen...



und auf "Open" klicken.



Wir sind jetzt mit dem Micro-Python auf dem Pico verbunden, auch wenn wir noch so gar nichts sehen außer einem schwarzen Fenster. Dennoch ist Micro-Python bereit, unsere Befehle entgegen zu nehmen. Versuchen wir doch einmal, ein "Hallo Pico" auszugeben. Dazu geben wir direkt den Python-Befehl print "Hallo Pico!" an der Konsole ein:



Klappt! Wir können auch ein kleines Python-Programm direkt so eingeben. Einfach den nachfolgenden Code kopieren und dann mit der rechten Maustaste in Putty wieder einfügen: from machine import Pin from time import sleep led = Pin(25, Pin.OUT) while True: led.toggle() sleep(0.5) Am Ende müssen wir noch einmal die Rückschritttaste (Backspace) benutzen und Return drücken, um die while-Schleife abzuschließen. Und siehe da: die LED des Pico blinkt. Mit Strg+C auf der Konsole können wir das Programm abbrechen und die LED hört auf, zu blinken.

Die ganzen Befehle, die MicroPython für den Pico versteht finden sich in der MicroPython-Dokumentation wieder.

Das Ganze hat allerdings den Charme des Basic-Prompts eines C64, nur nicht ganz so komfortabel. Ein LIST, RUN, CONTINUE und dergleichen gibt es nicht. Um das Programm nach einem Strg+C wieder zu starten, muss ich die letzte Schleife erneut eingeben, also while True: led.toggle() sleep(0.5) Die Variableninhalte hat sich MicroPython gemerkt und diese kann ich auch anzeigen lassen: >>> print (led) Pin(25, mode=OUT) Über help() können wir uns eine kurze Hilfe anzeigen lassen, die verrät etwas zur grundsätzlichen Programmierung und zu den Spezialtasten: Useful control commands: CTRL-C -- interrupt a running program CTRL-D -- on a blank line, do a soft reset of the board CTRL-E -- on a blank line, enter paste mode Drücken wir STRG+D, macht der Pico einen Soft-Reboot und gibt seine Versionsnummer aus: MPY: soft reboot MicroPython v1.17 on 2021-09-02; Raspberry Pi Pico with RP2040 Type "help()" for more information. >>> Und STRG+E können wir dazu benutzen, Programme zu übertragen. Das geht zwar nach wie vor über die Zwischenablage, aber das manuelle Backspace / Return am Ende können wir uns damit sparen.

Komfortabel ist das alles nicht. Da war ja der C64 angenehmer. Und nach dem Trennen vom Strom oder vom USB-Port ist auch das Programm wieder weg.

Und nein, das ist nicht komfortabler als bei Arduino und Co. Mit einer Entwicklungsumgebung wie Thonny mag das zwar besser werden, einen Mehrwert zum Arduino sehe ich hier allerdings nicht.

Und die interessanten Anwendungen wie eine Tastatur-Emulation via USB gehen mit Micro-Python erst gar nicht, das kann man gleich vergessen. Für ernsthafte Anwendung des Pico muss wohl doch C oder C++ her, ein *.uf2-Binary kompiliert und gelinkt werden und dann auf dem Pico laufen gelassen werden.

Den Pico mit Micro-Python kann man so vielleicht für Unterrichtszwecke benutzen, um mal etwas auszuprobieren oder zu zeigen, aber ernsthaft benutzbar ist er damit meiner Meinung nicht wirklich.

Im nächsten Teil wollen wir Thonny für Windows ausprobieren, damit dürfte es ein wenig komfortabler werden.