Die Raspberry Pi Foundation hat Ihr neuesten Projekt vorgestellt: Trotz Namensähnlichkeiten handelt es sich beim »Raspberry Pi Pico« nicht um ein Mitglied der Mini-Computer-Serie (Raspberry Pi 1/2/3/4/400 A/B/Zero/Compute Model). Der Pico ist kein vollwertiger Computer samt Betriebssystem, sondern »nur« ein Micro-Controller.
Sie können auf dem Gerät selbst entwickelten Code ausführen und dabei über diverse GPIOs eine Menge Hardware-Schnittstellen ansteuern. Es gibt aber kein Grafiksystem samt Monitor-Ausgabe, keine Anschlüssel für Tastatur, Maus oder externe Datenträger, keinen Eingang für ein Kameramodul, keine Netzwerkfunktionen, kein WLAN, kein Bluetooth. Dafür punktet der Pico beim Preis (4 EUR) und beim Stromverbrauch (nur ca. 0,4 W, im Ruhemodus gar nur 0,006 W).
Der Pico ist also keine neue Variante zu den herkömmlichen Raspberry-Pis. Das Gerät spricht einen ganz anderen Markt an, der vor allem von Arduino dominiert wird, in dem sich aber diverse andere Hersteller tummeln. Im Vergleich zu anderen Microcontrollern will der Pico mit relativ viel Rechenleistung für wenig Geld punkten.
Hardware
Der Kern des Raspberry Pi Pico und gleichzeitig das Alleinstellungsmerkmal im Vergleich zur Konkurrenz ist der von der Raspberry Pi Foundation selbst entwickelte Microcontroller RP2040. Kurz die wichtigsten Eckdaten:
- Dual-core Arm Cortex-M0+ mit bis zu 133MHz
- 264 kB RAM
- 2 MB interner Flash-Speicher
- 8 programmierbare I/O State Machines (PIOs)
- 30 GPIOs mit Mehrfachfunktion (am Pico sind 26 davon verfügbar), davon 4 Analogeingänge (am Pico sind 3 davon verfügbar)
- USB 1.1 inkl. USB Mass-Storage-Unterstützung (d.h., Geräte mit dem RP2040 können zur Programmierung wie ein USB-Stick genutzt werden)
Der RP2040 ermöglicht einen Zugriff auf bis zu 16MB externen Flash-Speicher (QSPI-Bus) und verfügt über einen DMA-Controller.
Über die 26 General Purpose Input/Output Pins (kurz GPIOs) können die folgenden Funktionen bzw. Bussysteme genutzt werden:
- 3x Analog-Eingang (12 Bit Auflösung)
- 16x PWM-Ausgang
- 2x SPI-Bus (Serial Peripheral Interface)
- 2x I2C-Bus (Inter-Integrated Circuit)
- 2x UART (serielle Schnittstelle)
Die GPIOs sind auf einen Betrieb mit 3,3 V ausgelegt (nicht 5V!).
Der Pico verfügt über einige weitere Anschlusspins, die zur Stromversorgung sowie zum Debugging dienen. Auf der Platine des Picos befindet sich außerdem eine programmierbare Leuchtdiode sowie ein kleiner Taster zur Auswahl zwischen zwei Boot-Modi. (Details dazu folgen bei der Überschrift »Programmierung«.)
Zur Programmierung sowie zur Stromversorgung gibt es einen Micro-USB-Eingang. Alternativ kann die Stromversorgung des Picos auch über die Kontakte der Platine erfolgen, wobei die Eingangsspannung zwischen 1,8 und 5,5 V liegen muss.
Der größte offensichtliche Nachteil des Picos ist das Fehlen von WLAN-Funktionen. Damit wäre der Einsatzbereich ungleich größer. Es würde mich nicht überraschen, wenn spätestens in einem Jahr der Pico+ oder Pico 2 vorgestellt würde, der genau in diesem Punkt nachgebessert ist (vielleicht auch gleich samt Bluetooth-Unterstützung).
Programmierung
Der RP2040 ist für die Programmierung im Python-Dialekt MicroPython gedacht. Die Raspberry Pi Organisation empfiehlt den Einsatz von Thonny als Entwicklungsumgebung.
Alternativ können Programme auch in C entwickelt werden. In diesem Fall empfiehlt die RP-Organisation VSCode als IDE. Speziell für den Pico entwickelte Plugins sorgen für den (einigermaßen) reibungslosen Transfer von Code.
Der Pico ist sogar in der Lage, eine Portierung von TensorFlow Lite auszuführen (GitHub).
Der RP2040 (bzw. der zugrundeliegende Cortex M0+) kann nur mit ganzzahligen Zahlen rechnen; es gibt aber eine lizensierte Fließkommabibliothek auf der Basis von Qfplib.
Zwei Debugging-Pins ermöglichen die Verwendung eines externen Debuggers (siehe Kapitel 5 von Getting Started with C/C++ (PDF)). Deren Nutzung gelingt am einfachsten, wenn der Pico mit einem gewöhnlichen Raspberry Pi (z.B. Modell 4B) verbunden wird.
In Zukunft soll auch die Arduino-IDE den RP2040 unterstützen.
Hello MicroPython!
Für den RP2040 gibt es eine MicroPython-Implementierung, die in den Grundfunktionen kompatibel zu Python 3.4 ist (plus async
und await
aus Python 3.5). Um MicroPython am Pico auszuprobieren, laden Sie am einfachsten ein vorkompiliertes Binary herunter (Dialogblatt »Getting startet with MicroPython«, Button »Donwload UF2 file«):
https://www.raspberrypi.org/documentation/pico/getting-started/
Das USB Flashing Format (UF2) ist ein von Microsoft entwickeltes Format, das speziell dazu gedacht ist, Microcontroller über eine USB-Mass-Storage-Schnittstelle zu programmieren (»flashen«). Die Datei ist ca. 0,5 MByte groß.
Nun stecken Sie ein USB-A-zu-Micro-USB-Kabel oder USB-C-zu-Micro-USB in Ihren Pico, drücken den winzigen Taster und verbinden dann das Kabel mit Ihrem Computer. (Die Raspberry Pi Foundation empfiehlt, den Pico mit einem Raspberry Pi zu verbinden. Die Inbetriebnahme des Picos kann aber auch mit einem PC oder Notebook unter Linux, Windows oder macOS erfolgen. Ich habe meine Tests auf einem Notebook unter Linux durchgeführt.)
Per Drag&Drop kopieren Sie jetzt die UF2-Datei vom Download-Verzeichnis in den USB-Speicher des Pico. Sobald die Übertragung beendet ist, bootet der Pico neu. Der Eintrag »RPI-RP2« verschwindet aus der Seitenleiste des Dateimanagers. Der Pico läuft jetzt nicht mehr als USB-Speichergerät, sondern führt MicroPython aus. Für den Computer erscheint der Pico als serielles USB-Gerät. Unter Linux können Sie das unkompliziert mit lsusb
verifizieren:
lsusb
Bus 001 Device 012: ID 2e8a:0005 MicroPython Board in FS mode
...
Um im Terminal mit dem Pico zu kommunizieren, installieren Sie das Programm minicom
. Anschließend starten Sie es wie folgt:
sudo minicom -o -D /dev/ttyACM0
(sudo
ist erforderlich, weil Sie als gewöhnlicher Benutzer bei den meisten Linux-Distributionen keine Zugriffsrechte auf die Device-Datei ttyACM0
haben. Auf die Dauer ist es aber keine gute Idee, minicom
ständig mit sudo
zu starten. Besser ist es, wenn Sie Ihren Benutzer-Account zur Gruppe dialout
hinzufügen. In meinem Fall geht das so: sudo usermod -a -G dialout kofler
. Sie müssen natürlich kofler
durch Ihren Accountnamen ersetzen. Damit die Einstellung wirksam wird, müssen Sie sich aus und neu einloggen.)
Sobald Sie einmal Return drücken, sollten Sie den Kommando-Prompt >>>
des Python-Interpreters sehen. Sie können nun erste Kommandos interaktiv ausführen:
>>> print("Hello, Pico!")
Hello, Pico!
Mit from machine import Pin
importieren Sie das Modul machine
zum Zugriff auf die GPIO-Funktionen. Pin 25 ist mit der Leuchtdiode des Picos verbunden. Die folgenden Kommandos schalten die Leuchtdiode zuerst ein und dann aus:
>>> from machine import Pin
>>> led = Pin(25, Pin.OUT)
>>> led.value(1)
>>> led.value(0)
Um minicom
zu beenden, drücken Sie Strg+A und danach X. Einen Überblick über die Tastenkürzel von minicom
gibt Strg+A und Z.
Pico-Alternativen mit dem RP2040
Der Pico ist das erste Gerät mit dem RP2040. Die Raspberry Pi Organisation wird den Chip aber nicht exklusiv verwenden. Vielmehr wollen andere Hersteller in den nächsten Wochen/Monaten eigene Microcontroller-Boards auf der Basis des RP2040 vorstellen. Das Blog der RP Foundation listet diverse Boards von Adafruit, Arduino, Pimoroni unnd SparFun auf. Besonders interessant klingt das Board Arduino Nano RP2040 Connect, das ähnliche Funktionen wie der Pico bieten soll, aber außerdem 16 MByte Flash-Speicher, WLAN, Bluetooth, ein Mikrofon und einen 9-Achsen-Bewegungssensor enthält. Arduino hat allerdings noch keine Angaben zum Preis gemacht, der sicher höher als beim Pico ausfällt.
Quellen
Raspberry Pi Pico
- Präsentation im Raspberry-Pi-Blog
- Vorstellung auf heise.de
- Ausführlicher Test bei Toms Hardware
- Test im Blog von Jeff Geerling
Dokumentation
- Getting Started (PDF, allgemeine Einführung, richtet sich an Einsteiger)
- Getting Started with MicroPython (PDF)
- Getting Started with C/C++ (PDF)
- Datasheet, Power Consumption (PDF)
- Sonstige technische Dokumentation
Alternative Systeme
leider ist es für mich ohne WLAN echt ein sinnfreies Stück Hardware.
Ich habe den Pi Pico mit MicroPython und Thonny sofort zum Laufen bekommen.
Im Glauben, ein schnelles System zu haben, habe ich sofort eine Zeitmessung mit dem Oszi vorgenommen.
Große Enttäuschung:
Die Ausgabe von 1-0-1-0… auf einen GP-Ausgang dauert pro Bit 7,2us.
Liegt es an Python, dass die Ausgabe so lahm ist?
Ich komme auf ähnliche Ergebnisse. Ich habe folgendes Testprogramm:
Dann messe ich die Blinkfrequenz: knapp 64 kHz, also 15,7 us pro Zyklus bzw. 7,5 us pro Pegelwechsel — ziemlich genau das, was Sie auch gemessen haben. In Anbetracht der Taktfrequenz des Controllers ist das tatsächlich weniger als erwartet. Ich kann nicht sagen, woran das liegt. Ist MicroPython so langsam (glaube ich eigentlich nicht). Oder gibt es ein Limit für die GPIOs.
Sicher ist, dass sich mit PIO (Programmable I/O) eine höhere Geschwindigkeit erzielen lässt. Das hat dann aber nichts mehr mit Python-Programmierung zu tun.
Super: ohne Wlan, ohne Bluetooth, ohne SchnickSchnack …
Genau, was ich brauche!
Ein interessantes Bauteil, kann man eigentlich mit dem Raspberry Pi Pico kommunizieren, mein Wunsch wäre zum Beispiel mehrere Pico’s von einem „normalen“ Raspberry zu steuern und im Prinzip die Pico’s als Erweiterung zu nutzen.
Aktuell steuert mein Computerkurs eine einfache Modelbahnanlage mit einem Raspberry Pi. Wir würden gern eine größere Anlage (4 Kreise mit diversen Weichen) steuern. (z. B. 1 „normaler“ Raspberry als Master und 4 Pico pro Kreis).
Beispiel auf : programmierer.online