Raspberry Pico mit der Arduino IDE programmieren

Es hat nicht lange gedauert, bis aus der Community eine Anpassung der Arduino-Programmierumgebung für Raspberry Pico und andere RP2040 Boards erschienen ist.

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 35 Beiträge
Aufmacher: Pico vor IDE
Von
  • Carsten Wartmann

Nach Veröffentlichung des Raspberry Pico und der ersten RP2040 Boards hat es nicht lange gedauert, bis aus der Community eine Erweiterung der Arduino IDE für Raspberry Pico und andere RP2040 Boards erschienen ist. Bisher werden nur die stabilen Versionen der IDE wie 1.8.13 unterstützt, die Version Arduino IDE 2.0 ist ja noch im Alpha Stadium. Wir haben kurz ausprobiert, ob dies schon eine Alternative für die Entwicklung auf RP2040-Boards ist.

Alles was gebraucht wird, ist auf der GitHub-Webseite des Entwicklers Earle F. Philhower (der III.) verfügbar und dokumentiert. Das Projekt ist so weit gediehen, dass im einfachsten Falle nur die URL der neuen Quelle in den Einstellungen angegeben werden muss, um dann im Boardmanager das entsprechende RP2040-Board auszuwählen (siehe auch Bilderstrecke). Erfahrene Entwickler:innen können auch GIT benutzen, um die aktuellste Version des Entwicklungszweigs zu holen. Ferner gibt es einen Link zu einer Anleitung auf Tom's Hardware, wie in einem Aufwasch sowohl die Arduino-IDE als auch eine CMake-Umgebung installiert wird, falls die Arduino IDE nicht mehr ausreichend ist oder einmal in die Untiefen der Mikrocontroller-Entwicklung eingetaucht werden soll. Mangels weiterer RP2040-Boards haben wir allerdings nur den Raspberry Pico ausprobiert.

Pico Arduino IDE (5 Bilder)

URL für neue Boards in den Einstellungen

Zum ersten Upload muss beim Anstecken des Picos der BOOT-Taster gehalten werden, für weitere Uploads von Sketches kann dann der neue COM-Port (Werkzeuge/Port) benutzt werden. Der Pico wird über den USB-Bus per Reset auf den Upload vorbereitet, dies funktioniert, weil der Pico-Kern Auto-Reset unterstützt. So ist das erste Blinken der eingebauten LED schnell auf das Board gespielt. Der Upload dauert länger als bei Arduino Boards, weil wohl das komplette Image geschrieben wird; ob es hier eine andere Lösung geben wird ist unklar. Eventuell sind wir aber auch nur durch Micropython verwöhnt.

// Twinkle Twkinkle
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(18, OUTPUT);
} ​

void loop() {​
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(18, HIGH);
delayMicroseconds(25000);
digitalWrite(18, LOW);
digitalWrite(LED_BUILTIN, LOW);
delayMicroseconds(25000);
}

In unserer Variante wird ein GPIO und die Board-LED, geschaltet. Durch die laufende Verringerung des Parameters der delayMicroseconds()-Funktion haben wir uns etwas an die Grenzgeschwindigkeit herangetastet. Mit einem Oszilloskop wurde die Frequenz gemessen und die Wellenform beurteilt. Mit dem, normal auf 125MHz getakteten, Board erhielten wir bis etwa 5µs Delay eine saubere Wellenform mit 50% Pulsweitenverhältnis. Ohne Delay liegt die Frequenz etwa bei 1,18 MHz, dann ist das Pulsweitenverhältnis bei 1:3. Das ist sicher "wer Misst misst Mist" und nicht repräsentativ oder praktisch, aber es macht Spaß, dem Board etwas auf den Zahn zu fühlen. Verdoppeln wir die Taktfrequenz (auf eigene Gefahr), ist sicher noch mehr drin. Eine 225-MHz-Firmware lief hier mit einem komplexen grafischen Programm und Pimoroni Picodisplay stabil. Bevor aber ein:e Maker:in jetzt einen Pico grillt, sollten wir vielleicht lieber auf die Multicore-Unterstützung warten, die ja in Micropython und C++ schon möglich ist.

Nicht den Pico grillen!

Apropos Multicore: Mittels der PIO State Machines, die ja praktisch kleine eigene CPUs sind, wird schon jitterfrei das PWM für die Servos und die Tonausgabe erzeugt. Weiterhin hat es der Entwickler geschafft, bisher versteckte und nicht nutzbare 1.4-MB-Flash-RAM verfügbar zu machen, eine nette Oster-Überraschung, die uns da die Raspberry Pi Foundation macht. Es ist nicht ganz sicher, ob dies auf allen Boards der Fall ist oder nur auf frühen Boards der Pico-Serie. Das können Sie im Menü Werkzeuge/Flash Size: überprüfen.

Viele Dinge wie digitalWrite/Read, ShiftIn/Out, SPI, Servos, Serial-über-USB und andere funktionieren schon wie erwartet. Ob eine benötigte Library funktioniert, muss bei Bedarf getestet werden. Auf der Todo-Liste des Entwicklers stehen aber schon Filesystem-Support, bessere Debug-Möglichkeiten und die I2S-Unterstützung. Hier und mit der versprochenen, offiziellen Unterstützung von RRP2040 Boards seitens der Arduino Foundation, ist also noch einiges zu erwarten.

Alles in allem ist es eine Frage der Gewohnheiten, eigenen Vorlieben, vorhandenen Libraries und des Anwendungsfalls ob C++, Arduino-IDE-C oder Micropython die beste Wahl ist. (caw)