Mit wenigen Befehlen in der Konsole (Anwendung „Terminal“ auf dem Mac) können Sie eine Entwicklungsumgebung für den Raspberry Pi Pico bereitstellen. Damit stehen Ihnen alle Ressourcen der Raspberry Pi Foundation für eigene Projekte offen.
Die folgende Anleitung basiert auf – und ist eine Umsetzung von – „Getting Startet with Pico“ – Handbuch der Raspberry Foundation für die Einrichtung des SDKs für den Raspberry Pi Pico. “Getting Started…“ beschreibt auch die Einrichtung insbesondere auf einem Raspberry Pi 4 und auch auf Windows. Die Einrichtung von macOS ist der unter Linux auf dem Raspberry Pi seht ähnlich.
Die folgende Anleitung sollte bis zum Kompilieren der Beispielanwendungen gut funktioniern. Die Einmbindung von Visual Studio Code ist noch etwas „hakelig“ und erforder ggf. Ihrerseits noch ein paar Experimente.
ACHTUNG – DIESE ANLEITUNG IST NOCH IN DER ENTWICKLUNG – WORK IN PROGRESS
Stand: 11.10.2022
1 Vorbereitungen
Für die Installation benötigen Sie auf dem Mac im Folgenden Homebrew. Ob Sie Homebrew bereits installiert haben, finden Sie heraus, in dem Sie im Terminal brew -v eingeben:
claus@MacBook-Pro-6 ~ % brew -v Homebrew 3.6.3 Homebrew/homebrew-core (git revision 059c3bb9ddc; last commit 2022-10-01) Homebrew/homebrew-cask (git revision 0917778591; last commit 2022-10-01) claus@MacBook-Pro-6 ~ %
Wenn Homebrew nicht installiert ist, installieren Sie es mit
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
2. Installation und Test des SDKs für den Pico
2.1. Ablauf
Die Anleitung besteht aus folgenden Schritten:
- Installation der Toolchain
- Einrichtung des Pico SDKs
- Einrichtung von Beispielen
- Kompilieren des Beispiels blink (ein LED-Blinker)
- Übertragen des Programms blink auf den Raspberry Pico
- Änderung des Blink-Programms und erneuter Test
- Erstellen eines eigenen Projektes PicoTest
- Einrichtung on Visual Studie Code als Editor / Entwicklungsumgebung
2.2 Installieren der Toolchain
Installieren Sie die Toolchain mit der Folge von Anweisungen im Terminal
brew install cmake brew tap ArmMbed/homebrew-formulae brew install arm-none-eabi-gcc
(Anmerkung: Der ARM-Compiler ist nur für für x86- spricht Intel-Prozessoren verfügbar. Wenn Sie auf einem Apple Macbook mit Silocon M1-Prozessor statt Intel Prozessor arbeiten, müssen Sie Rosetta 2 installieren (nicht getestet).
/usr/sbin/softwareupdate –install-rosetta –agree-to-license
Nach Abschluss der Einrichtung der Toolchain testen Sie im Terminal mit
arm-none-eabi-gcc –version)
2.3 Pico SDK und Pico Beispielprogramme einrichten
Im pico-examples Repository auf Github (https://github.com/raspberrypi/pico-examples) finden Sie einige Beispielanwendungen, die mit dem pico-sdk (https://github.com/raspberrypi/pico-sdk) entwickelt wurden. Das ist ein guter Startpunkt für eigene Entwicklungen.
Klonen Sie das Repository in ein Verzeichnis mit z.B. dem Namen „RaspberryPico“.
cd ~/ mkdir RaspberryPico cd RaspberryPico git clone -b master https://github.com/raspberrypi/pico-sdk.git cd pico-sdk git submodule update --init cd .. git clone -b master https://github.com/raspberrypi/pico-examples.git
Es sollten nun zwei Ordner unterhalb von RsapberryPico existieren: pico-sdk und pico-examples.
1.1 Erster Test – Beispiel blink kompilieren
Für einen ersten Test des SDKs kompilieren Sie die Beispielanwendungn Blink.
Legen Sie zunächst mit dem Finder einen Unterordner „build“ in „pico-examples“ an.
Navigieren Sie im Terminal in den Ordner „build“ mit
cd RaspberryPico/pico-examples/build
Der Pfad muss noch angepasst werden, so dass der Kompiler das SDK findet. Geben Sie im Terminal ein
export PICO_SDK_PATH=../../pico-sdk
(Anmerkung: Das funktioniert, wenn später ein Projektverzeichnis ein Unterverzeichnis von pico-sdk ist. Wenn Sie Ihr Projektverzeichnis an andrer Stelle speichern, ist es erforderlich, einen absoluten Pfad zum SDK anzugeben, z.B. :
export PICO_SDK_PATH=/Users/<IhrName>/RaspberryPico/pico-sdk
)
Bereiten Sie den Ordner build vor mit
cmake ..
(Anmerkung: die beiden Punkte sind wichtig)
Im Ordner „build“ wurden nun durch cmake einige Dateien und Verzeichnisse angelegt – auch das Verzeichnis „blink“. Navigierem Sie in das Verzeichnis ….. pico-examples/buid/blink mit
cd blink
Schauen Sie sich die Dateien und Verzeichnisse mit dem Finder an. Nach dem folgenden Compile werden Sie dann weitere Dateien in diesem Ordner finden.
Kompilieren Sie nun blink mit
make
(Anmerkung: make ohne irgendwelche Punkte)
Es wird insbesondere eine Datei blink.uf2 angelegt, die Sie im folgenden Schritt auf den Raspberry Pico transferieren.
2.4 blink auf den Raspberry Pico übertragen
Verbinden Sie den Raspberry Pico mittel USB-Kabel mit dem Macbook und halten Sie beim einstechen die BootSel-Taste auf dem Raspberry Pico gedrückt. Im Finder sollten Sie eine neues Laufwerk „RPI-RP2“ sehen. In dem Laufwerk befinden sich zwei Dateien, INDEX.HTM und INFO_UF2.TXT. In dieses Laufwerk kopieren Sie die Datei blink.uf2. Der Raspberry Pico transferiert die Datei in seinen internen Speicher (sie „verschwindet“ aus dem Laufwerk „RPI-RP2“), startet neu und führt die das Programm aus.
Nun sollte die grüne onboard-LED des Raspberry Pico blinken.
2.5 blink ändern und erneut kompilieren
Verwenden Sie einen einfachen Texteditor, um das C-Programm zu ändern. Ein guter Texteditor mit Syntax-Highlighting auf dem Mac ist Sublime Text. Im Terminal nutzen Sie nano. Wechseln Sie in das Quelltextverzeichnis von blink und öffnen Sie den C-Quelltext (Listing 1) mit
cd RaspberryPico/pico-examples/blink nano blink.c
Ändern sie den Quelltext, so dass er wie folgt aussieht
/** * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #include "pico/stdlib.h" int main() { #ifndef PICO_DEFAULT_LED_PIN #warning blink example requires a board with a regular LED #else const uint LED_PIN = PICO_DEFAULT_LED_PIN; gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); while (true) { gpio_put(LED_PIN, 1); sleep_ms(127); gpio_put(LED_PIN, 0); sleep_ms(500); gpio_put(LED_PIN, 1); sleep_ms(1000); gpio_put(LED_PIN, 0); sleep_ms(500); } #endif }
Listing 1: Ein einfaches Blink-Programm in C für den Pico
Speichern Sie mit ctrl-o enter und verlassen Sie nano mit ctrl-x. Führen Sie den Schritt „blink auf den Raspberry Pico übertragen“ erneut aus und überspielen Sie die neu erstellte .uf2-Datei auf den Raspberry Pico. Sie sollten nach dem automatischen Neustart des ein „kurz-lang-Blinkmuster sehen.
Sie sind nun in der Lage, C-Programme zu ändern und auf den Raspberry Pico dauerhaft zu übertragen.
2.6 Ein eigenes Projekt mit Ausgabe über USB
Update 11.10.2022: Um kompatibel zu vielen Tutorials zu bleiben, legen Sie einen Arbeitsbereich für Ihre Projekte an, z.B. pico-Entwicklung. Dort hinein kommen die Projektverzeichnisse. Sie haben als nun drei Verzeichnisse in RaspberryPico: pico-sdk, -pico examples und pico-Entwicklung. Wechseln Sie in das Verzeichnis RaspberryPico/pico-Entwicklung. Die Befehle sind, wenn Sie sich in RaspberryPico befinden:
mkdir pico-Entwicklung cd pico-Entwicklung
Legen Sie ein Projektverzeichnis an, z.B. „PicoTest“: mkdir PicoTest
Achtung: Der Pfad zum SDK muss bei jedem Neustart des Terminals neu festgelegt werden mit
export PICO_SDK_PATH=/Users/<IhrName>/RaspberryPico/pico-sdk
Mir ist es (noch) nicht gelungen, auf dem Mac den Pfad dauerhaft zu verankern.
Im Verzeichnis PicoTest legen Sie ein Verzeichnis build mit mkdir build an. Dort hinein kommen die Dateien, die zum Kompilieren notwendig sind. Weiterhin werden zwei Dateien für die Steuerung des Aufbaus der Umgebung mit cmake benötigt: CMakeLists.txt und pico_sdk_import.cmake. Letztere kopieren Sie aus pico-sdk/external mit
cp pico-sdk/external/pico_sdk_import.cmake .
Die Datei CMakeLists.txt erzeugen Sie wie weiter unten unter Listig 3 beschrieben mit nano.
Füllen Sie das Verzeichnis build, indem Sie dort hinein Wechseln und cmake aufrufen (die beiden Punkte sind wesentlich).
cd build cmake ..
Im Verzeichnis build befinden sich nun ein paar weitere Verzeichnisse und eine Datei Makefile, die den Compile-Prozess steuert. Shauen Sie sich den Inhalt mit ls -l an
claus@MacBook-Pro-6 build % ls -l total 328 -rw-r--r-- 1 claus staff 20621 11 Okt 12:21 CMakeCache.txt drwxr-xr-x 15 claus staff 480 11 Okt 12:21 CMakeFiles -rw-r--r-- 1 claus staff 136932 11 Okt 12:21 Makefile -rw-r--r-- 1 claus staff 1765 11 Okt 12:21 cmake_install.cmake drwxr-xr-x 4 claus staff 128 11 Okt 12:21 elf2uf2 drwxr-xr-x 3 claus staff 96 11 Okt 12:21 generated drwxr-xr-x 8 claus staff 256 11 Okt 12:21 pico-sdk drwxr-xr-x 2 claus staff 64 11 Okt 12:21 pioasm claus@MacBook-Pro-6 build %
Abb. : So sieht es im Verzeichnis build aus
Erzeugen Sie einen Quellcode mit Namen source.c (mit nano source.c) und dem Inhalt
#include <stdio.h> #include "pico/stdlib.h" int main() { stdio_init_all(); int i=0; while (true) { printf("Hallo Welt %d\n",i); blinka(5); sleep_ms(2000); i++; } return 0; } void blinka(int anz) { #ifndef PICO_DEFAULT_LED_PIN #warning blink example requires a board with a regular LED #else const uint LED_PIN = PICO_DEFAULT_LED_PIN; gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); int i=0; while (i<anz) { gpio_put(LED_PIN, 1); sleep_ms(127); gpio_put(LED_PIN, 0); sleep_ms(127); i++; } #endif }
Listing 2: Das Prgramm gibt Hallo Welt über die serielle Schnittstelle aus und blinkt fünf mal schnell. Das Blinken funktiononiert so nur auf dem Pico ohne WLAN.
Das Programm (Listing 2) gibt alle zwei Sekunden „Hallo Welt <Zähler>“ über die serielle Schnittstelle aus und blink fünf mal schnell. Erzeugen Sie das Programm mit den Schritten wie oben beschrieben (indem Sie make eingeben). Alternativ erzeugen Sie das Programm mit Visual Studio Code wie weiter unten beschrieben.
make
Um die serielle Schnittstelle abzufragen, verwenden Sie eine geeignete Terminal-Software. Im Weiteren ist dazu minicom beschrieben.
2.7 Ausgaben der seriellen Schnittstelle über USB mit minicom verfolgen
Beschaffen Sie sich minicom und kompilieren Sie minicom mit homebrew.
brew install minicom
Sie benötigen den Dateinamen, der die Schnittstelle repräsentiert. Sie finden die seriellen Schnittstellen im Verzeichnis /dev, das Sie sich im Terminal mit
ls /dev
anschauen können.
Schließen Sie den Raspberry Pico mit gedrückter BOOTSEL-Taste an. Überspielen Sie „PicoTest.uf2“ in das Laufwerk RPI-RP2. Der Pico sollte nach seinem reboot alle zwei Sekunden fünfmal blinken.
Schauen Sie wieder in das Verzeichnis /dev. Es sollte eine Datei ähnlich „tty.usbmodem14201“ zu sehen sein. Rufen Sie im Terminal minicom auf mit
minicom -o -D /dev/tty.usbmodem14201
Sie sollten die Hallo Welt – Meldungen sehen wie in Abb. 1. Damit haben Sie eine Möglichkeit, Ausgaben Ihres Programms auf dem Pico zu kontrollieren.
Abb. 1: Hallo Welt mittels serieller Ausgabe über USB
2.8 Visual Studio Code und C/C++ einrichten
2.8.1 Was ist Visual Studio Code?
Visual Studio Code (VSCode) ist eine plattformübergreifende Entwicklungsumgebung von Microsoft. VSCode wird in vielen Open Source Projekten eingesetzt. Viele Anleitungen im Internet beziehen sich auf VSCode, daher empfiehlt auch die Raspberry Foundation die Nutzung.
ACHTUNG: AB HIER NOCH NICHT VOLLSTÄNDIG – WORK IN PROGRESS
2.8.2 Visual Studio Code mit Cmake Tools einrichten
Die Installation der aktuellen VSCode-Version folgen Sie der Anleitung von Microsoft vor (Link siehe Quellen weiter hinten):
Zum Download von VSCode: https://code.visualstudio.com/Download
Für Mac Intel wählen Sie die Version „Intel Chip“, Wenn Sie einen M1-Prozessor nutzen wählen Sie „Apple Silion“
Sie benötigen die Erweiterungen C++, Cortex debug (by marius25) und CMake (by Microsoft)
Starten Sie VSCode, um weitere Werkzeuge einzurichten.
Installieren Sie innerhalb von VSCode die Erweiterung CMake Tools. Klicken Sie auf das Erweiterungssymbol in der linken Symbolleiste (oder geben Sie Cmd + Shift + X ein), suchen Sie in der Liste nach „CMake Tools“ und klicken Sie auf den Eintrag in der Liste, und klicken Sie dann auf Installieren (Abb. 2).
Abb. 2: CMake Tools in den VSCode “Erweiterungen“ laden.
2.8.3 Kommandozeilenbefehl code einrichten
Mit dieser kleinen Hilfe können Sie VSCode direkt aus dem Terminal heraus starten. Öffnen Sie VSCode, gehen Sie dann über “Hilfe | Show All Commands” oder der Tastenkombination (Cmd+Shift+P) zur Kommando Eingabe und tippen Sie „shell command“.
2.8.4 Das SDK anbinden
(Anmerkung: Dies ist der schwierigste Schritt, der von vielen Anwendern im Internet diskutiert wird und offensichtlich nach keinem Tutorial direkt zufriedenstellend erläuf. Es können unterschiedliche Probleme auftauchen, die Lösung hängt allerdings von der Vorgeschichte der Installation ab und ist schwer zu reproduzieren (siehe Probleme weiter unten). Mir ist es erst nach einigen Fehlversuchen gelungen. Eine Lektüre der Links unter „Quellen“ empfehle ich daher.)
Die Umgebungsvariable PICO_SDK_PATH ist VSCode geeignet mitzuteilen. Dazu navigieren Sie mit dem Terminal in MacOS zum Verzeichnis pico-examples und erstellen Sie ein (verstecktes) Verzeichnis .vscode und wechseln Sie in das Verzeichnis
cd /Users/IHR-NAME/RaspberryPico/pico-examples/ mkdir .vscode cd .vscode
Fügen Sie eine Datei „settings.json hinzu, um CMake Tools mitzuteilen, wo sich das SDK befindet.
nano settings.json
mit dem Inhalt:
{ "cmake.environment": { "PICO_SDK_PATH":"../../pico-sdk" }, }
Starten Sie VSCode, Klicken Sie nun auf das Zahnrad links unten am unteren Ende der Navigationsleiste auf der linken Seite der Benutzeroberfläche und wählen Sie
„Einstellungen“. Klicken Sie dann im Bereich „Einstellungen“ auf „Erweiterungen“ und die „CMake Tools Konfiguration“. Scrollen Sie dann nach unten zu
„Cmake: Generator“ und geben Sie „Unix Makefiles“ in das Feld ein (Abb. 3).
Abb. 3: Screenshot Einstellungen für Make
(Ein paar Hinweise aus dem „Gettings startet:
Je nach Ihren lokalen Gegebenheiten müssen Sie den CMake-Generator möglicherweise nicht manuell auf „Unix Makefiles“ einstellen. Allerdings
wenn Sie dies nicht tun, wird Visual Studio in einigen Fällen standardmäßig Ninja statt Make verwenden und der Build könnte fehlschlagen, da GCC
die Abhängigkeitsinformationen in einem nicht ganz korrekten Format ausgibt, das Ninja nicht verstehen kann.
Wenn Sie diese Variable manuell konfigurieren müssen, ist es auch möglich, dass Sie Visual
Studio explizit auf die CMake Tools-Erweiterung verweisen, indem Sie eine zusätzliche Zeile in Ihre settings.json-Datei einfügen,
{ "cmake.environment": { "PICO_SDK_PATH": "../../pico-sdk" }, "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools" }
Klicken Sie dann im Menü „Datei“ auf „Ordner zu Arbeitsbeich hinzufügen“ und navigieren Sie zu pico-examples und klicken Sie auf „Okay“.
In den VSCode Erweiterungen wählen Sie noch „Marus25 Cortex-Debug“ und installieren das.
Testen Sie, ob Sie „Hello-World!“ editieren können. Mit „Datei | Open Folder“ und Navigation zu „pico-examples/hello_world/usb“ sollten Sie die Bildschirmansicht ähnlich Abb. 4 haben.
Abb. 4: Öffnen eines Projektverzeichnisses hello_world/usb
Wenn ein Fenster aufpoppt mit „Would you like to configure project” bestätigen Sie mit „Yes“. Sie werden nach einem Compiler gefragt, wählen Sie „GCC for arm-none-eabi ….“
Ein neues, eigenes Projekt legen Sie wie folgt an:
-
- mkdir PicoTest
- cd PicoTest
- cp ../pico-sdk/external/pico_sdk_import.cmake .
- Erstellen Sie CMakeLists.txt mit nano, Siehe Inhalt weiter untes.
- touch CMakeLists.txt
- touch source.c (Inhalt kann leer sein oder wie in Listing 1)
In die Datei CMakeLists.txt schreiben Sie mit nano (Listing 3)
# What CMake to start at cmake_minimum_required(VERSION 3.12) # Include the subsidiary .cmake file to get the SDK include(pico_sdk_import.cmake) # Set the name and version of the project project(PicoTest VERSION 1.0.0) # Link the Project to a source file (step 4.6) add_executable(PicoTest source.c) # Link the Project to an extra library (pico_stdlib) target_link_libraries(PicoTest pico_stdlib) # Initalise the SDK pico_sdk_init() # Enable USB, UART output pico_enable_stdio_usb(PicoTest 1) pico_enable_stdio_uart(PicoTest 1) # Enable extra outputs (SWD?) pico_add_extra_outputs(PicoTest)
Listing 3: Inhalt con CMake.Lists
2.9 Mögliche Fehlermeldungen beim Kompilieren in VSCode
Problem: Es wérscheint die Meldung “SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git.“
Lösung: Setzten Sie in den CMake Tools das Build Environment.
Hinweis unter https://forums.raspberrypi.com/viewtopic.php?t=332016
Der gleiche Eintrag erfolgt unter Cmake: Environment.
2.10 Das Projektverzeichnis unter VSCode vorbereiten
Öffnen Sie mit VSCode das Verzeichnis „….RaspberryPico/PicoTest“. Sie werden nach einem Compiler gefragt, geben Sie in der Auswahlliste den GNU ARM Compiler an.
Innerhalb des Projektverzeichnisses legt VSCode eine Verzeichnis „build“ an und schreibt die zum Kompilieren notwendigen Dateien hinein. Insbesondere sollte es eine Datei „Makefile“ geben, die den Build-Prozess steuert.
2.11 Das Programm unter VSCode kompilieren
Wechseln Sie im VSCode-Terminal mit „cd build“ in das Verzeichnis „build“. Geben Sie im Terminal „make“ ein. Es sollten Ausgaben des Kompilers erfolgen und insbesondere eine Datei PicoTest.uf2 erzeugt werden, die Sie auf den Raspberry Pico überspielen können.
3 Quellen:
Getting Startet with Pico – Handbuch der Raspberry Foundation für die Einrichtung des SDKs für den Raspberry Pi Pico, online Ressource: https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf
Prüfen, ob Homebrew intsalliert ist https://stackovercoder.com.de/programming/21577968/how-to-tell-if-homebrew-is-installed-on-mac-os-x
Visual Studio Code auf dem Mac installieren – Anleitung von Microsoft https://code.visualstudio.com/docs/setup/mac
https://blog.smittytone.net/2021/02/02/program-raspberry-pi-pico-c-mac/
https://www.peterzimon.com/raspberry-pi-pico-mac-c-getting-started/
https://www.chrisclaxton.me.uk/chris-claxtons-blog/raspberry-pi-pico-vscode-and-macos