Aus Raspberry Pi Geek 12/2021

VS-Code (2): C-Programme für den Pico

© twinsterphoto / 123RF.com

Durchstarten

Bernhard Bablok

Ist die Pico-Entwicklungsumgebung einmal eingerichtet, geht es ans Programmieren – nach Möglichkeit mit einem praktischen Beispiel.

Der vorliegende Teil des Workshops geht davon aus, dass Sie zum Entwickeln einen RasPi 2 oder höher verwenden und die Vorarbeiten aus dem ersten Teil [1] mit der Installation aller notwendigen Programme erledigt haben. Das Pico-Programm aus diesem Beispiel liest die Sensoren BME280 oder BMP280 (Abbildung 1) per SPI aus und gibt die Messwerte auf der seriellen Konsole aus. Details zum BMP280 und BME280 finden Sie im Kasten “Sensorwirrwarr”.

Sensorwirrwarr

Beim BMP280 handelt es sich um einen Kombisensor für Luftdruck und Temperatur, der Nachfolger BME280 erfasst zusätzlich die Luftfeuchtigkeit. Von außen unterscheiden sich die Bausteine nicht. Das Pinout, das die Schnittstellen I2C und SPI unterstützt, ist kompatibel und die angebotenen Breakouts sind somit quasi identisch.

Genau das nutzen findige Verkäufer aus: Gefühlt 99 Prozent davon bieten BME280/BMP280-Breakouts an. So etwas gibt es nicht, denn entweder kommt der eine oder der andere Sensor auf dem Board zum Zug. Ein Hinweis darauf liefert unter Umständen der Preis. Die BMP280-Breakouts liegen bei etwa 4 Euro, die BME280-Varianten kosten ab 7 Euro. Trotzdem besteht immer das Risiko, von unzuverlässigen Verkäufern alte Sensoren zu beziehen.

Unabhängig von dieser Verwirrung gibt es Breakouts, die nur die I2C-Pins herausführen (Abbildung 1, Mitte). Da beide Sensoren 3,3 Volt benötigen, bringen andere Breakouts noch einen Spannungswandler samt Pegelwandler mit. Das lohnt sich für Arduino-Nutzer; für den RasPi und den RasPi Pico spielt es keine Rolle, schadet aber auch nicht.

Abbildung 1: BME280- und BMP280-Breakouts: Optisch wie technisch sind die beiden Bausteine kaum zu unterscheiden.

Abbildung 1: BME280- und BMP280-Breakouts: Optisch wie technisch sind die beiden Bausteine kaum zu unterscheiden.

Die offizielle Pico-Beispielsammlung [2] der Foundation, die mit dem Skript für die Installation aus dem letzten Teil schon ihren Weg auf die Platte fand, bringt ein fertiges Beispiel für den BME280 mit. Dieser Workshop nimmt aber ein realistischeres Szenario an. Für die Sensoren gibt es zwar passenden Quellcode, aber eben nicht auf den Pico zugeschnitten, und als Programmierer müssen Sie diesen für die neue Umgebung anpassen.

Aus diesem Grund kommen in diesem Beispiel die offiziellen [3] APIs [4] für die Sensoren zum Einsatz, die Bosch-Sensortec auf Github bereitstellt. Beide Schnittstellen arbeiten sehr ähnlich und eignen sich für den Einsatz auf verschiedenen Plattformen.

Vorbereitungen

Pico-Programme entstehen mithilfe von CMake, einem Makefile-Generator. Auf oberster Ebene gibt es deshalb eine Datei mit der Konfiguration für das Projekt, die zwingend CMakeLists.txt heißen muss. Diese beschreibt den Bauplan des Projekts, also wie es die verschiedenen Quelldateien zu kompilieren und verlinken gilt. Dank eines Generators [5] fällt hier nur wenig Handarbeit an. Es handelt sich dabei um einen weiterentwickelten Fork des Originals der Raspberry Pi Foundation, die das Original offensichtlich nicht mehr pflegt – zumindest stehen verschiedene Pull-Requests in der Warteschlange.

Um den Generator zu installieren, rufen Sie nach dem Klonen das Kommando sudo install im Unterverzeichnis tools/ auf. Den Generator selbst starten Sie mit pico_project.py --gui und wählen einen Ordner, in dem Sie das Verzeichnis für das Projekt anlegen möchten. Der Generator belegt es mit dem aktuellen Ordner vor (Abbildung 2).

Abbildung 2: Im Pico-Projektgenerator legen Sie in der zweiten Zeile mit der Bezeichnung <span class="ui-element">Location</span> den zuk&uuml;nftigen Ordner f&uuml;r das Projekt fest.

Abbildung 2: Im Pico-Projektgenerator legen Sie in der zweiten Zeile mit der Bezeichnung Location den zukünftigen Ordner für das Projekt fest.

Der Ordner selbst trägt denselben Namen wie das Projekt und sollte noch nicht existieren. Außerdem setzen Sie die drei Haken bei SPI, Console over UART und Create VSCode project. Der Generator legt daraufhin das Verzeichnis an und generiert einige Dateien.

Zu guter Letzt holen Sie noch die von Bosch bereitgestellten Dateien und kopieren sie in das Projektverzeichnis (Listing 1). Die beiden Kommandos setzen voraus, dass Sie sie im unter Location angegebenen Verzeichnis aufrufen. Bei der Quelle handelt es sich ebenfalls nicht um das Original des Herstellers [3], sondern um einen leicht angepassten Fork des Autors.

Listing 1

Bosch-API-Dateien kopieren

$ git clone https://github.com/bablokb/BME280_driver.git
$ cp -a BME280_driver/bme280* pico-bme280

Hardware

Jetzt könnten Sie endlich programmieren – doch ohne Hardware geht es nicht. Daher verbinden Sie den Pico mit sieben Jumper-Kabeln mit dem RasPi (Abbildung 3). Die genaue Zuordnung finden Sie in der Tabelle “Pin-Belegung”.

Abbildung 3: Sie verbinden den Pico &uuml;ber sieben Jumper-Kabel mit dem RasPi. Achten Sie darauf, die Pins direkt ohne Zuhilfenahme eines Breadboards miteinander zu verbinden.

Abbildung 3: Sie verbinden den Pico über sieben Jumper-Kabel mit dem RasPi. Achten Sie darauf, die Pins direkt ohne Zuhilfenahme eines Breadboards miteinander zu verbinden.

RasPi

Pico

BME280

2 (5V)

39 (VSYS)

 

6 (GND)

38 (GND)

 

8 (TX)

2 (GP1/UART0-RX)

 

10 (RX)

1 (GP0/UART0-TX)

 

18 (GPIO24)

SWDIO

 

20 (GND)

GND

 

22 (GPIO25)

SWCLK

 

 

16 (GP12/SPI1-RX)

SDO

 

17 (GP13/CS)

CSB

 

19 (GP14/SPI1-CLK)

SCL

 

20 (GP15/SPI1-TX)

SDA

 

18 (GND)

GND

 

36 (3V3 Out)

VCC

Achten Sie darauf, dass die Kabel zwischen RasPi und Pico für den Debug-Anschluss (die drei Pins am Ende gegenüber der Micro-USB-Buchse) nicht via Breadboard, sondern direkt zum RasPi führen. Die Diode (etwa eine 1N5817) benötigen Sie nur, wenn Sie gleichzeitig den USB-Anschluss nutzen.

Wer etwas mehr Komfort schätzt, verwendet den Pico-Development-HAT des Autors (Abbildung 4), der automatisch die relevanten Pins verbindet. Die KiCAD-Dateien des HATs finden Sie online [6], bei JLCPCB bekommen Sie etwa fünf Platinen für sechs Euro (einschließlich Versand). Der HAT bietet zusätzlich zur Verbindung mit dem RasPi unter anderem auch noch drei LEDs, drei Buttons, einen SPI- und einen I2C-Anschluss mit konfigurierbaren Pullups.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben