Installation des RP2040 Core von Earle Philhower für Platform IO

In diesem Artikel hatte ich ja schon das LoRaWAN LR1262 Development Board mit RP2040 und 1.8 “ LCD für LoRa-Anwendungen von der Hardwareseite her vorgestellt.

Und im Artikel Libraries und Software für das Elecrow LoRaWAN LR1262 Dev.-Board mit Raspi-Pico 2040 geht es dann um die Programmierung.

Und da bin ich auf ein Problem gestoßen: Um die LED-Ampeln darauf anzusprechen, muss ich den auf dem Board verbauten PCA9557 IO-Expander über I2C ansprechen. Bei diesem Board sind SDA auf Pin 20 und SCL auf Pin 21. Die Pins kann ich natürlich auf einem fest verdrahteten Board nicht hardwaretechnisch ändern, ich muss sie in der Software konfigurieren.

Core von m-bed (platform = raspberrypi)

Und genau das gelingt mir nicht mit der Platform IO-Konfiguration
[env:pico] platform = raspberrypi board = pico framework = arduino
Denn dann gilt der mbed-Core und die I2C-Pins SDA und SCL sind scheinbar fest verdrahtet. Es gibt kein
Wire.setSDA(PIN_SDA); Wire.setSCL(PIN_SCL);
oder
Wire.begin(PIN_SDA,PIN_SCL);
Ich bin zuerst den Umweg über die mbed-I2C-API gegangen:
#include "mbed.h" I2C i2c (PIN_SDA, PIN_SCL) ... loop() { char cmd[2]; cmd[0] = 0x01; cmd[1] = 0x00; i2c.write(ADDR_LEDS, cmd, 2); delay(100); cmd[1] = 0xff; i2c.write(ADDR_LEDS, cmd, 2); delay(100); }
Das sollte eigentlich die LEDs blinken lassen, aber nichts tat sich.

Nebenher zum Thema Boot-Select gesagt: bei dem mbed-core kann man den Reset-Taster erst etwas länger halten, so etwa eine halbe Sekunde und dann ganz schnell nochmal kurz drücken, um in den Boot-, also Programmier/Flash-Upload-Modus, zu gehen. Das schont die Finger und Nerven bei den winzigen Knöpfchen auf dem Board, weil man nicht zwei Knöpfchen gleichzeitig drücken muss.

Da nicht mal das I2C-Hello-World-Programm mit dem mbed-Code funktioniert, suche ich nach einer anderen Lösung. Und werde auf den Core von Earle Philhower aufmerksam.

Core von Earle Philhower (platform = ...maxgerhardt...)

Um den earlephilhower-Core zu benutzen, hat sich folgende Konfiguration bei mir bewährt:
[env:pico] platform = https://github.com/maxgerhardt/platform-raspberrypi.git board = pico board_build.core = earlephilhower framework = arduino
Für die Arduino-IDE wäre die Board Manager URL übrigens https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json.

Und siehe da, hier klappt die Pin-Konfiguration und Ansprache von I2C
#include #include ... void setup() { Wire.setSDA(PIN_SDA); Wire.setSCL(PIN_SCL); Wire.begin(); // Alle 8 Pins des PCA9557 für die farbigen LEDs als Ausgang konfigurieren (0 = Ausgang) i2cWrite(ADDR_LEDS, 3, 0); delay (10); } void loop() { for (int i = 4; i <= 128; i*=2) { i2cWrite (ADDR_LEDS, 1, i); delay(200); } }
Für die Funktion i2cwrite schaut bitte in meinem Artikel 8x8-LED-Matrix mit Beschleunigungssensor / Kompass und 5 Funktionen nach.

Die vom Arduino gewohnten Befehle Wire.setSDA(PIN_SDA); und Wire.setSCL(PIN_SCL); lassen sich damit verwenden, der I2C-Bus richtig konfigurieren und die LEDs laufen fröhlich durch, so wie sich das gehört.

Der earlephilhower-Core ist also der bessere Core, so wie es scheint. Er ist ein "aufgebohrter" Standard-Core mit so einigen nützlichen Erweiterungen und Modernisierungen. Es wird auch der neue RP2350 (Pico 2) unterstützt. Die zahlreichen Feature könnt ihr auf https://github.com/earlephilhower/arduino-pico nachlesen. Auf der Seite beschreibt Earle F. Philhower, III allerdings nur die Einbindung in die Arduino IDE.

Um den earlephilhower-core in die Platform IO Umgebung, die ich zusammen mit Visual Studio Code benutze, zu bringen, braucht es noch die Zeile platform = https://github.com/maxgerhardt/platform-raspberrypi.git in der platformio.ini. Und schon lässt sich alles wunderbar kompilieren.

Max Gerhardt schreibt in seinem GitHub, dass er den Fork gemacht hat, weil er den Fortschritt bei der Entwicklung zum Raspberry Pi RP2040 und RP2350 Arduino Core für PlatformIO vermisst hat. Mehr kann man dort nachlesen.

Ein wichtigen Feature des earlephilhower-cores ist auch, dass sie den 1200-Baud-Trick beherrscht, die den Firmware-Upload sehr vereinfacht: Beim Upload (CTRL+ALT+U) wird der Pico direkt in den Boot-Select-Modus versetzt. Man muss also nicht mehr BOOT+RESET drücken. Man muss gar keine Knöpfe mehr drücken. Allerdings funktionierte das Finden des UF2-Upload-Laufwerks über das picotool nicht richtig, so dass ich die neue Firmware doch noch händisch auf das UF2-Laufwerk kopieren muss. Was mit einem script aber super easy mit einem Doppelklick erledigt ist. Und nach dem Upload resetet der Pico dann selbstständig. Also keine Pein mehr mit Winz-Knöpfelchen.



Quellen, Literaturverweise und weiterführende Links