Das Challenger RP2040 WiFi ist ein Mikrocontroller-Board von iLabs, das auf dem Raspberry Pi RP2040 basiert, kombiniert mit einem ESP8285 für die WiFi-Konnektivität. Was die Funktionen betrifft, so verfügt das Board über zwei LEDs, von denen eine ein NeoPixel ist. Darüber hinaus verfügt es über einen speziellen Verbindungsbus (Bi2C), der ein I²C-Bus ist, aber ein flexibles Flachkabel (FFC) mit 0,5-mm-Pitch Steckverbindern verwendet, was sie klein macht. Das Board selbst basiert auf dem Feather-Formfaktor von Adafruit. Wie man so schön sagt: "Gleich und gleich gesellt sich gern". Die Idee dieses Formfaktors, der auch das GPIO-Layout und die Positionierung standardisiert, ist den Austausch und die Erweiterung verschiedener Mikrocontroller-Boards zu erleichtern.

RP2040 Controller

Dieses Board verwendet als Hauptcontroller einen Raspberry RP2040, einen Dual-Core Cortex-M0+ Baustein mit 264 KB SRAM, zu dem 8 MB externer FLASH-Speicher hinzugefügt wurden. Der RP2040 ist in letzter Zeit sehr populär geworden, da er ein sehr leistungsfähiger Mikrocontroller ist und zu einem sehr günstigen Preis angeboten wird. Darüber hinaus bietet die wachsende Community Toolchains und Utilities an, die RP2040-basierte Boards nahtlos in die Arduino- und Circuit/MicroPython-Community integrieren.

 
challenger-rp2040 wifi
Der Challenger RP2040 Wifi hat einen Feather-Formfaktor.

WiFi über ESP8285

Die WiFi-Konnektivität wird von einem ESP8285 bereitgestellt, der im Grunde ein ESP8266 mit 1 MB integriertem Flash-Speicher ist. Die Kommunikation zwischen dem ESP8285 und dem RP2040 erfolgt seriell. Der ESP8285 hat einen AT-Befehlsinterpreter an Bord. Auf diese Weise kann der Controller ein einfaches serielles Protokoll verwenden, um mit dem lokalen WiFi-Netzwerk zu kommunizieren. Dies ist viel einfacher als ein WiFi-Transceiver, den Sie mit Ihrem eigenen TCP/IP-Stack versehen müssen. Der AT-Befehlsinterpreter hebt die WiFi-Funktionalität auf ein höheres Niveau, da er auch HTTP- und MQTT-Protokolle unterstützt.

On-Board-LEDs

Der Challenger RP2040 hat zwei LEDs an Bord. Eine ist die typische "blinkende" LED, die man auf den meisten Arduino-kompatiblen Boards findet. Die andere LED ist ein NeoPixel, und das macht die Sache viel interessanter. Ein NeoPixel ist eine Marke von Adafruit für adressierbare RGB-LEDs. Man findet diese LEDs auch auf Streifen und Matrizen, bei denen jede einzelne über ein Ein-Draht-Steuerprotokoll adressierbar ist.

USB-C-Anschluss

Ich mag den USB-C-Anschluss an diesem Board, der nicht nur viel weniger fummelig ist als ein Micro-USB-Anschluss, sondern auch robuster und langlebiger. Der USB-Anschluss wird zum Programmieren des Challenger RP2040 verwendet, kann aber auch zur Stromversorgung des Boards genutzt werden. Wenn ein Akku angeschlossen ist, dient er als Ladeinput.

Batterieanschluss und Ladegerät

Überraschenderweise hat der Challenger RP2040 WiFi eine Akkuladeschaltung an Bord. Sie können einen einzelnen (nur) LiPo-Akku über einen 2-mm-Pitch-JST-Anschluss anschließen. So können Sie den Challenger RP2040 als tragbares Gerät verwenden. Zum Aufladen ist bloß ein USB-C-Kabel erforderlich, sodass wahrscheinlich jedes beliebige Ladegerät, das Sie herumliegen haben, ausreicht.

 
bi2c-Erweiterungsbus
Der Bi2C-Bus verwendet kleine FCC-Stecker und "Kabel".

Der Bi2C-Bus

Traditionell gibt es einige Verbindungsstandards für Mikrocontroller-Boards wie Grove, Qwiic, usw. Der Challenger RP2040 hat seinen eigenen "Standard": das Bi2C (Bus I²C) Konzept. Hier wird ein flexibles Flachkabel (FFC) anstelle von Drähten wie bei den anderen Standards verwendet. Diese FFC-Stecker können ein Rastermaß von 0,5 mm haben, und das Flachkabel ist ebenfalls schmal. Es gibt eine 4-Draht-Version mit den SCL- und SDA-Signalen (und der Stromversorgung) und eine 6-Draht-Version, die zwei GPIO-Ports hinzufügt.

Das Kit, das ich zum Testen erhalten habe, enthielt neben dem Challenger RP2040 auch zwei Bi2C-Boards: ein Beschleunigungsmessermodul und ein Bi2C-zu-Qwiic-Adapterboard.

Beschleunigungssensor mit Bi2C-Schnittstelle

Das Bi2C-ACC ist ein 3-achsiges 16-Bit-Beschleunigungsmesser-Erweiterungsmodul auf der Basis des MC3419-Beschleunigungsmessers. Der verwendete Chip ist für Mobiltelefone und die Bewegungserfassung in Konsumgütern optimiert. Er verfügt über eine spezielle Logik für die Bewegungserfassung, die Algorithmen zur Unterstützung von "Any Motion", Shake Detection, Flip und Tilt und vielem mehr implementiert.

Der Bi2C-zu-Qwiic-Adapter ermöglicht es Ihnen, sowohl Sparkfun Qwiic als auch Adafruit Stemma-Peripheriegeräte in ein Bi2C-System zu integrieren (oder umgekehrt).

Programmierung

Die Programmierung des Challenger RP2040 erfolgt über die USB-C Schnittstelle und ist wie die Programmierung jeder anderen Raspberry Pi Pico-kompatiblen Karte. Das Gerät wird auf Ihrem Computer als externes Laufwerk angezeigt, und je nach verwendeter Plattform ziehen Sie entweder Dateien darauf oder lassen die (Arduino-)IDE sich darum kümmern.
 
Obwohl man den RP2040 mit einer GNU C/C++ Toolchain programmieren kann, ist es meiner Meinung nach besser, eine Plattform wie Arduino oder MicroPython zu wählen.
 
Challenger RP2040 mit Beschleunigungssensor
Der Challenger RP2040 mit einem Beschleunigungssensor auf der Rückseite.

Ich habe den Challenger RP2040 zunächst mit CircuitPython geflasht, das auf MicroPython basiert, aber einfacher ist als MicroPython. Als Editor verwendete ich den netten Mu editor, der sowohl einsteigerfreundlich ist als auch CircuitPython unterstützt. Das Problem, auf das ich schnell stieß, war die fehlende Unterstützung für die NeoPixel-LED, WiFi und den Beschleunigungsmesser. Vielleicht habe ich einfach an den falschen Stellen gesucht, da ich mit dem CircuitPython-Ecosystem nicht so vertraut bin.

Verwendung der Arduino IDE

Als Nächstes habe ich die Arduino IDE ausprobiert. Nachdem ich die Unterstützung für Raspberry Pi Pico/RP2040-basierte Boards installiert hatte, begann ich mit der Erkundung der Funktionen des Challenger RP2040 WiFi.
 
Die Onboard-LED wird in Arduino wie eine Standard-LED gehandhabt, d. h. man verwendet pinMode um sie auf Ausgang zu setzen und digitalWrite um sie ein- oder auszuschalten. Für den NeoPixel können Sie die Adafruit_NeoPixel library verwenden.
 
Der Beschleunigungssensor basiert auf einem Memsic MC3419 Beschleunigungssensor, für den man eine library. hinzufügen muss. Ich mag die Art und Weise, wie man den Beschleunigungssensor verwenden kann, um auf einige übergeordnete Bewegungen zu reagieren, wie z. B. "Schütteln" oder "Neigen", anstatt die Mathematik selbst zu machen.

AT-Befehle

Da die WiFi-Funktionalität von einem AT-Befehlsinterpreter auf dem ESP8285 bereitgestellt wird, müssen wir eine WiFi-Bibliothek mit AT-Unterstützung verwenden. Die WiFiEspAT library wurde speziell für diesen Zweck geschrieben. Außerdem benötigen Sie eine kleine "Bootstrap"-Bibliothek namens ChallengerWiFi, um den ESP8285 zurückzusetzen und in Betrieb zu nehmen. Der Code dafür ist im Beispiel enthalten.

AT zu MQTT Wrapper

Da der AT-Interpreter MQTT unterstützt, können wir eine Wrapper-Bibliothek verwenden, die die spezifischen MQTT-AT-Befehle des ESP8285 nutzt, um MQTT-Funktionalität für den Arduino-Sketch bereitzustellen. Diese Wrapper-Bibliothek heißt EspATMQTT.
 
Wenn Sie mit MQTT nicht vertraut sind, ist dies ein Kommunikationsprotokoll, das hauptsächlich für IoT-Projekte verwendet wird. Es ermöglicht Clients, bestimmte Ereignisse zu abonnieren, sodass sie benachrichtigt werden, wenn ein Ereignis eintritt, wie wenn ein Temperatursensor einen bestimmten Schwellenwert erreicht, z. B. zu heiß oder zu kalt. Zusätzlich können die Clients Ereignisse über einen zentralen Server, den sogenannten Message Broker, an andere Geräte senden. Ein beliebter Message-Broker ist Eclipse Mosquitto.  

 
herausforderer rp2040 wifi läuft test app
Der Challenger RP2040 Wifi, auf dem die MQTT-Shake-Test-App läuft.

Ein kleines Testprojekt

Probieren geht über Studieren! Also habe ich beschlossen, ein kleines Projekt zu machen, das die meisten, wenn nicht alle Funktionen des Boards erprobt. Mit einem Beschleunigungsmesser, der in der Lage ist, Erschütterungen zu erkennen, und einer einfachen Möglichkeit, MQTT zu verwenden, kam ich auf folgende Idee:

Wenn man das Challenger-Board schüttelt, sendet es eine Nachricht an einen MQTT-Broker irgendwo im Netzwerk (in meinem Fall ist dieser auf einem Computer mit Ubuntu 20.04 LTS Server Edition installiert). Ein kurzes Python-MQTT-Client-Skript, das auf meinem Desktop-Computer läuft, abonniert diese Nachricht. Jedes Mal, wenn es eine Shake-Nachricht empfängt, sendet es einen zufälligen Farbwert zurück an das Board, wo er auf dem NeoPixel angezeigt wird. Jedes Mal, wenn eine Nachricht gesendet oder empfangen wird, blinkt die Onboard-LED.

Der gesamte Code ist im zip-archiv unter zu finden.

Schlussfolgerung

Als das Challenger RP2040 bei mir ankam, war ich unsicher, was mich erwarten würde. Obwohl ich viel Erfahrung mit Arduino habe, hatte ich noch nie die Gelegenheit, ein RP2040-basiertes Board zu verwenden. Zu meiner Überraschung war es ziemlich einfach, es einzurichten und in Betrieb zu nehmen.
 
Das Challenger RP2040 WiFi ist ein leistungsfähiges Board im praktischen Adafruit Feather-Formfaktor. Ich mag die Bi2C-Verbindung, da sie Daisy-Chaining ermöglicht und kleine Kabel verwendet, die helfen, Projekte sauber zu gestalten. Es gibt mehrere Arten von Challenger RP2040-Boards. Einige verfügen über einen eingebauten Beschleunigungssensor. Vielleicht möchten Sie auch diese ausprobieren.