De Challenger RP2040 WiFi is een microcontrollerboard van iLabs, gebaseerd op de Raspberry Pi RP2040, gecombineerd met een ESP8285 voor Wi-Fi verbindingen. Qua functies heeft het board twee LEDs, waarvan er één een NeoPixel is. Verder heeft het een speciaal type interfacebus (Bi2C), wat een I²C-bus is, maar gebruik maakt van een Flexible Flat Cable (FFC) met 0,5-mm-pitch connectoren, waardoor ze klein zijn. Het board zelf is gebaseerd op de Feather vormfactor van Adafruit. Feather boards zijn makkelijk te combineren, het idee van deze vormfactor, die ook de GPIO layout en locatie standaardiseert, is om het gemakkelijker te maken verschillende typen microcontrollerboards te kunnen gebruiken of uit te breiden.

De RP2040 controller

Dit board gebruikt een Raspberry RP2040 als primaire controller, een dual-core Cortex-M0+ chip met 264 KB SRAM, waaraan 8 MB extern FLASH geheugen is toegevoegd. De RP2040 is de laatste tijd erg populair geworden omdat het een zeer bruikbare microcontroller is voor een scherpe prijs. Niet alleen dat, maar zijn groeiende community voorziet ons van toolchains en utilities die RP2040 gebaseerde boards naadloos integreren in de Arduino en Circuit/MicroPython community.

 
challenger-rp2040 wifi
De Challenger RP2040 Wifi heeft een Feather vormfactor.

ESP8285 voor Wi-Fi

De Wi-Fi verbindingen worden verzorgd door een ESP8285, in feite een ESP8266 met 1 MB geïntegreerd flashgeheugen. De communicatie tussen de ESP8285 en de RP2040 verloopt via een seriële verbinding. De ESP8285 heeft een AT-commando-interpreter geïntegreerd. Zo kan de controller een eenvoudig serieel protocol gebruiken om met het lokale Wi-Fi-netwerk te communiceren. Dit kan een stuk eenvoudiger zijn dan wanneer je alleen een Wi-Fi transceiver hebt die je moet voorzien van een eigen TCP/IP stack. De AT commando-interpreter tilt de Wi-Fi-functionaliteit naar een hoger niveau omdat hij ook ondersteuning heeft voor HTTP- en MQTT-protocollen.

LED's op het board

De Challenger RP2040 heeft twee LED's op het board. De ene is de typische knipper LED die je op de meeste Arduino-compatibele boards vindt. De andere LED is een NeoPixel en dat maakt het een stuk interessanter. Een NeoPixel is een merk van Adafruit voor adresseerbare RGB LED's. Je vindt deze LEDs ook op strips en matrixen en zijn individueel adresseerbaar via een enkeldraads besturingsprotocol.

USB-C connector

De USB-C connector op dit board is prettig, want het is niet alleen veel minder gedoe dan een micro-USB connector, maar ook robuuster en duurzamer. De USB connector wordt gebruikt om de Challenger RP2040 te programmeren, maar kan ook worden gebruikt om het board van stroom te voorzien. Hij dient ook als aansluiting voor het opladen wanneer een accu is aangesloten.

Accuaansluiting en lader

Verrassend genoeg heeft de Challenger RP2040 WiFi een acculaadcircuit op de printplaat. Je kunt een 1-cell LiPo accu (alleen) aansluiten via een 2-mm-pitch 'JST' connector. Zo kun je de Challenger RP2040 gebruiken als draagbaar apparaat. Voor het opladen is alleen een USB-C kabel nodig, dus elke oplader die je hebt liggen is waarschijnlijk voldoende.

 
bi2c uitbreidingsbus
De Bi2C Bus gebruikt kleine FCC connectoren en flat cables.

De Bi2C bus

Van oudsher zijn er een paar interface standaarden beschikbaar voor microcontroller boards, zoals Grove, Qwiic, enz. De Challenger RP2040 heeft zijn eigen 'standaard': het Bi2C (Bus I²C) concept. Hier wordt een Flexible Flat Cable (FFC) gebruikt in plaats van draden zoals bij de andere standaarden. Deze FFC-connectoren kunnen een pitch hebben van 0,5 mm en de flat cable is ook smal. Er is een 4-draads versie met de SCL en SDA signalen (en voeding) en een 6-draads versie die twee GPIO poorten toevoegt.

De kit die ik ontving voor de review bevatte, naast de Challenger RP2040, ook twee Bi2C boards: een accelerometer module en een Bi2C-to-Qwiic adapter board.

Accelerometer met Bi2C interface

De Bi2C-ACC is een 3-assige, 16-bit accelerometer uitbreidingsmodule gebaseerd op de MC3419 accelerometer. De gebruikte chip is geoptimaliseerd voor mobiele telefoons en bewegingsdetectie van consumentenproducten. Hij heeft speciale ingebouwde bewegingslogica die algoritmen implementeert ter ondersteuning van onder meer "elke beweging", trillingsdetectie, draaien en kantelen.

Met de Bi2C-to-Qwiic adapter kun je zowel Sparkfun Qwiic als Adafruit Stemma onderdelen integreren in een Bi2C systeem (of andersom).

Programmeren

Het programmeren van de Challenger RP2040 gebeurt via USB-C en is als het programmeren van ieder ander Raspberry Pi Pico compatibel board. Het apparaat verschijnt op je computer als een externe schijf en, afhankelijk van het platform dat je gebruikt, sleep je er bestanden naartoe of gebruik je de (Arduino) IDE hiervoor.
 
Hoewel je de RP2040 kunt programmeren met een GNU C/C++ toolchain, denk ik dat het beter is een platform als Arduino of MicroPython te kiezen.
 
Challenger RP2040 met versnellingsmeter
De Challenger RP2040 met een accelerometer op de achterkant geplakt.

Ik heb de Challenger RP2040 eerst geflasht met CircuitPython, dat gebaseerd is op maar eenvoudiger is dan MicroPython. Als editor gebruikte ik de handige Mu editor, die zowel beginnersvriendelijk is als CircuitPython ondersteunt. Het probleem waar ik al snel tegenaan liep was een gebrek aan ondersteuning voor de NeoPixel LED, Wi-Fi en accelerometer. Misschien zocht ik gewoon op de verkeerde plaatsen, want ik ben niet zo bekend met het CircuitPython ecosysteem.

Gebruik van de Arduino IDE

Vervolgens probeerde ik de Arduino IDE. Na het installeren van ondersteuning voor op Raspberry Pi Pico/RP2040 gebaseerde boards, begon ik de mogelijkheden van de Challenger RP2040 WiFi te verkennen.
 
De onboard LED wordt als een gewone LED in Arduino behandeld, d.w.z. je gebruikt pinMode om hem op output te zetten en een digitalWrite om hem aan of uit te zetten. Voor de NeoPixel kun je de Adafruit_NeoPixel library gebruiken van Adafruit.
 
De accelerometer is gebaseerd op een Memsic MC3419 accelerometer, waarvoor een bibliotheek moet worden toegevoegd. Ik vind het leuk dat je de accelerometer kunt gebruiken om te reageren op specifieke bewegingen op hoger niveau, zoals 'trillingen' of 'kantelingen', in plaats van het rekenwerk zelf te doen.

AT commando's

Omdat de Wi-Fi functionaliteit wordt geleverd door een AT commando-interpreter die op de ESP8285 draait, moeten we een Wi-Fi bibliotheek met AT ondersteuning gebruiken. De WiFiEspAT library is hier speciaal voor geschreven. Je hebt ook een kleine 'bootstrap' bibliotheek nodig, genaamd ChallengerWiFi om de ESP8285 te resetten en aan de gang te krijgen. De code hoe dat te doen staat in het voorbeeld.

AT naar MQTT wrapper

Omdat de AT-interpreter ondersteuning heeft voor MQTT, kunnen we een wrapper-bibliotheek gebruiken die gebruik maakt van de specifieke MQTT AT-commando's op de ESP8285 om MQTT-functionaliteit te bieden voor de Arduino-sketch. Deze wrapper-bibliotheek heet EspATMQTT.
 
Als je niet bekend bent met MQTT, dit is een communicatieprotocol dat meestal gebruikt wordt voor IoT-projecten. Het stelt gebruikers in staat zich te abonneren op bepaalde gebeurtenissen, zodat ze bericht krijgen als er een gebeurtenis plaatsvindt, zoals wanneer een temperatuursensor een bepaalde drempelwaarde bereikt, bijvoorbeeld te warm of te koud. Ook kunnen gebruikers gebeurtenissen naar andere apparaten sturen via een centrale server, de zogenaamde message broker. Een populaire message broker is Eclipse Mosquitto.  

 
challenger rp2040 wifi draait test app
De Challenger RP2040 Wifi die een MQTT app voor trilbewegingen uitvoert.

Een klein proefproject

De proef op de som, ik besloot dus om een klein project te doen dat de meeste, zo niet alle, mogelijkheden van het board aanspreekt. Met een accelerometer die trilling kan detecteren en een gemakkelijke manier om MQTT te gebruiken, kwam ik op het volgende idee:
 
Als je het Challenger board laat trillen, stuurt (publiceert) het een bericht naar een MQTT broker ergens in het netwerk (in mijn geval is dit geïnstalleerd op een computer waarop Ubuntu 20.04 LTS server editie draait). Een kort Python MQTT-clientscript dat op mijn desktopcomputer draait abonneert zich op dit bericht. Telkens als het een trildetectie bericht ontvangt, stuurt het een willekeurige kleurwaarde terug naar het board, waar het wordt weergegeven op de NeoPixel. Iedere keer dat een bericht wordt verzonden of ontvangen, knippert de LED op het board.
 
De volledige programmacode is te vinden in het onderstaande zip-bestand.

Conclusie

Toen de Challenger RP2040 werd bezorgd, was ik niet zeker van wat ik kon verwachten. Hoewel ik veel ervaring heb met Arduino, had ik nog nooit de gelegenheid gehad om een board op basis van de RP2040 te gebruiken. Tot mijn verrassing was het vrij eenvoudig in te stellen en ermee aan de slag te gaan.


Vertaling: Hans Adams