Raspberry Pi Pico

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.

Raspberry Pi Pico (Vorderseite)

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)
Pin-Layout des Raspberry Pi Pico (Quelle: Raspberry Pi Foundation)

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.

Raspberry Pi Pico (Rückseite)

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 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.)

Der Pico erscheint als USB-Massenspeicher im Dateimanager

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.)

minicom kommuniziert mit dem Pico, wo ein Python-Interpreter läuft (REPL)

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

Dokumentation

Alternative Systeme

3 Gedanken zu „Raspberry Pi Pico“

  1. 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?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Wenn Sie hier einen Kommentar absenden, erklären Sie sich mit der folgenden Datenschutzerklärung einverstanden.