La Challenger RP2040 WiFi est une carte à microcontrôleur d'iLabs, basée sur le Raspberry Pi RP2040, associé à un ESP8285 pour la connectivité Wi-Fi. En ce qui concerne les caractéristiques, la carte dispose de deux LEDs, dont l'une est un NeoPixel. En plus, elle dispose d'un type spécial de bus d'interconnexion (Bi2C), qui est un bus I²C, mais qui utilise un câble plat flexible (FFC) avec des connecteurs au pas de 0,5 mm, ce qui les rend plus petits. La carte elle-même est basée sur le facteur de forme Feather d'Adafruit. L'idée de ce facteur de forme, qui standardise également la disposition et l'emplacement des GPIO, est de faciliter l'échange et l'extension de différents types de cartes de microcontrôleurs.

Le microcontrôleur RP2040 

Cette carte utilise comme microcontrôleur principal un Raspberry RP2040, un Cortex-M0+ à double cœur avec 264 KB de SRAM, auquel 8 MB de mémoire FLASH externe ont été ajoutés. Le RP2040 est devenu très populaire ces derniers temps car c'est un microcontrôleur très performant, à un prix intéressant. De plus, sa communauté grandissante nous fournit des chaînes d'outils et des utilitaires qui intègrent parfaitement les cartes RP2040 dans les communautés Arduino et Circuit/MicroPython.

 
challenger-rp2040 wifi
Le Challenger RP2040 Wifi a un facteur de forme Feather.

Wi-Fi avec l'ESP8285

La connectivité Wi-Fi est fournie par un ESP8285, qui est en fait un ESP8266 avec 1 Mo de mémoire flash intégrée. La communication entre l'ESP8285 et le RP2040 se fait via une connexion série. L'ESP8285 embarque un interpréteur de commandes AT. Ainsi, le contrôleur peut utiliser un simple protocole série pour communiquer avec le réseau Wi-Fi local. Cela peut être beaucoup plus facile que d'avoir un émetteur-récepteur Wi-Fi que vous devez équiper de votre propre pile TCP/IP. L'interpréteur de commandes AT porte la fonctionnalité Wi-Fi à un niveau supérieur, car il prend également en charge les protocoles HTTP et MQTT.

LEDs embarquées

La Challenger RP2040 est équipée de deux LEDs. L'une est la LED « clignotante »  typique que l'on trouve sur la plupart des cartes compatibles Arduino. L'autre LED est un NeoPixel, ce qui la rend beaucoup plus intéressante. Un NeoPixel est une marque Adafruit pour les LEDs RGB adressables. Vous pouvez trouver ces LEDs également sur des bandes et des matrices, sur lesquelles chacune d'entre elles est addressable individuellement via un protocole de contrôle à fil unique.

Connecteur USB-C

J'aime le connecteur USB-C de cette carte, qui non seulement le rend beaucoup moins difficile à manipuler qu'un connecteur micro-USB, mais qui est également plus robuste et durable. Le connecteur USB est utilisé pour programmer la Challenger RP2040, mais il peut également être utilisé pour alimenter la carte. Il sert également de prise de recharge lorsqu'une batterie est connectée. 

Connecteur de batterie et chargeur

Étonnamment, le Challenger RP2040 WiFi est équipé d'un circuit de chargeur de batterie à bord. Vous pouvez connecter une seule batterie LiPo (uniquement) via un connecteur « JST » au pas de 2 mm. Cela vous permet d'utiliser le Challenger RP2040 comme un appareil portable. La charge ne nécessite qu'un câble USB-C, donc n'importe quel chargeur à portée de main fera probablement l'affaire.

 
bus d'extension bi2c
Le bus Bi2C utilise de petits connecteurs FCC et des « câbles » .

Le bus Bi2C 

Traditionnellement, il existe quelques normes d'interconnexion disponibles pour les cartes de microcontrôleurs telles que Grove, Qwiic, etc. La Challenger RP2040 a son propre « standard » : le concept Bi2C (Bus I²C). Ici, un câble plat flexible (FFC) est utilisé à la place des fils utilisés par les autres normes. Ces connecteurs FFC peuvent avoir un pas de 0,5 mm et le câble plat est également réduit. Il existe une version à 4 fils avec les signaux SCL et SDA (et l'alimentation) et une version à 6 fils qui ajoute deux ports GPIO.

Le kit que j'ai reçu pour un test comprenait, en plus de la Challenger RP2040, deux cartes Bi2C : un module accéléromètre et une carte adaptatrice Bi2C-vers-Qwiic.

Acceleromètre avec une interface Bi2C 

Le Bi2C-ACC est un module d'extension avec un accéléromètre à 3 axes sur 16 bits basé sur l'accéléromètre MC3419. La puce utilisée est optimisée pour les téléphones portables et la détection de mouvement des produits de consommation. Elle intègre une logique de détection de mouvement dédiée qui met en œuvre des algorithmes pour prendre en charge « tout mouvement » , la détection des secousses, le retournement et l'inclinaison, entre autres.

L'adaptateur Bi2C-vers-Qwiic vous permet d'intégrer les périphériques Sparkfun Qwiic et Adafruit Stemma dans un système Bi2C (ou l'inverse).

Programmation

La programmation de la Challenger RP2040 s'effectue par l'USB-C et ressemble à celle de n'importe quelle autre carte compatible Raspberry Pi Pico. L'appareil apparaît sur votre ordinateur comme un disque externe et, selon la plateforme que vous utilisez, vous y déposez des fichiers par glisser-déposer ou vous laissez l'IDE (Arduino) s'en charger.
 
Bien que vous puissiez programmer le RP2040 en utilisant une chaîne d'outils GNU C/C++, je pense qu'il est préférable de choisir une plateforme comme Arduino ou MicroPython.
 
Challenger RP2040 avec accéléromètre
La Challenger RP2040 avec un accéléromètre collé sur son dos.

J'ai d'abord flashé la Challenger RP2040 avec CircuitPython, qui est basé sur MicroPython mais plus simple. Comme éditeur, j'ai utilisé le sympathique éditeur Mu, qui est à la fois convivial pour les débutants et compatible avec CircuitPython. Le problème que j'ai rapidement rencontré était le manque de prise en charge de la LED NeoPixel, le Wi-Fi et l'accéléromètre. Peut-être que je n'ai pas cherché au bon endroit, car je ne suis pas très familier avec l'écosystème CircuitPython.

Utiliser l'IDE Arduino

Ensuite, j'ai essayé l'IDE Arduino. Après avoir installé le support pour les cartes basées sur le Raspberry Pi Pico/RP2040, j'ai commencé à explorer les caractéristiques de la Challenger RP2040 WiFi.
 
La LED embarquée est gérée comme une LED standard dans Arduino, c'est-à-dire que vous utilisez pinMode pour la mettre en sortie et digitalWrite pour l'allumer ou l'éteindre. Pour le NeoPixel, vous pouvez utiliser la bibliothèque Adafruit_NeoPixel d'Adafruit.
 
L'accéléromètre est basé sur un accéléromètre Memsic MC3419, qui nécessite l'ajout d'une bibliothèque. J'aime la façon dont vous pouvez utiliser l'accéléromètre pour réagir à des mouvements plus élaborés, comme "secouer" ou "incliner", au lieu de faire les calculs vous-même par programmation.

Commandes AT

Comme la fonctionnalité Wi-Fi est fournie par un interpréteur de commandes AT fonctionnant sur l'ESP8285, nous devons utiliser une bibliothèque Wi-Fi qui prend en charge AT. La bibliothèque WiFiEspAT a été spécialement conçue à cet effet. Vous avez également besoin d'une petite bibliothèque « d'amorçage » , appelée ChallengerWiFi, pour réinitialiser l'ESP8285 et le faire fonctionner. Le code permettant d'effectuer cette opération est fourni dans l'exemple.

Passerelle AT vers MQTT 

Comme l'interpréteur AT prend en charge MQTT, nous pouvons utiliser une bibliothèque d'encapsulation qui utilise les commandes AT MQTT spécifiques de l'ESP8285, pour ainsi fournir une fonctionnalité MQTT aux programmes Arduino. Cette bibliothèque spécifique s'appelle EspATMQTT.
 
Si vous ne connaissez pas MQTT, il s'agit d'un protocole de communication principalement utilisé pour les projets IoT. Il permet aux utilisateurs de s'abonner à certains événements, de sorte qu'ils reçoivent une notification lorsqu'un événement se produit, par exemple lorsqu'un capteur de température atteint un certain seuil, comme par exemple trop chaud ou trop froid. Il permet également aux utilisateurs d'envoyer des événements à d'autres appareils via un serveur central, appelé courtier de messages. Eclipse Mosquitto est un courtier de messages très répandu.

 
challenger rp2040 wifi test d'exécution app
La Challenger RP2040 Wifi exécutant l'application de test de secousses avec MQTT.

Un petit projet de test 

La preuve est dans les faits, donc j'ai décidé de faire un petit projet qui touche la plupart des caractéristiques de la carte, si ce n'est pas la totalité. Avec un accéléromètre capable de détecter les secousses et un moyen facile d'utiliser MQTT, j'ai eu l'idée suivante :
 
Si vous secouez la carte Challenger, elle envoie (publie) un message à un courtier MQTT quelque part sur le réseau (dans mon cas, il est installé sur un ordinateur exécutant l'édition serveur Ubuntu 20.04 LTS). Un petit script client MQTT en Python s'exécutant sur mon ordinateur de bureau s'abonne à ce message. Chaque fois qu'il reçoit un message de secousses, il envoie une valeur de couleur aléatoire à la carte, où elle est affichée sur le NeoPixel. Chaque fois qu'un message est envoyé ou reçu, la LED de la carte clignote.
 
Tout le code se trouve dans l'archive zip ci-dessous.

Conclusion

Lorsque la Challenger RP2040 est arrivée, je ne savais pas trop à quoi m'attendre. Bien que j'aie beaucoup d'expérience avec Arduino, je n'avais jamais eu l'occasion d'utiliser une carte RP2040. À ma grande surprise, il a été assez facile de l'installer et de la démarrer.

La Challenger RP2040 WiFi est une carte performante qui se présente dans un format pratique Feather de Adafruit. J'aime l'interconnexion Bi2C, car elle permet le daisy-chaining ( connexion en série) et utilise de petits câbles qui aident à désencombrer le projet. Il existe plusieurs types de cartes Challenger RP2040. Certaines sont équipées d'un accéléromètre intégré. Vous pouvez également les tester.

Traduction : Laurent RAUBER