Raspberry Pico programmieren mit C und Visual Studio Code auf Apple macOS

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:

  1. Installation der Toolchain
  2. Einrichtung des Pico SDKs
  3. Einrichtung von Beispielen
  4. Kompilieren des Beispiels blink (ein LED-Blinker)
  5. Übertragen des Programms blink auf den Raspberry Pico
  6. Änderung des Blink-Programms und erneuter Test
  7. Erstellen eines eigenen Projektes PicoTest
  8. 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:

    1. mkdir PicoTest
    2. cd PicoTest
    3. cp ../pico-sdk/external/pico_sdk_import.cmake .
    4. Erstellen Sie CMakeLists.txt mit nano, Siehe Inhalt weiter untes.
    5. touch CMakeLists.txt
    6. 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

 

https://macappstore.org/minicom/

Teile diesen Beitrag.

Schreibe einen Kommentar

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