Les M5Stack sont des petits ordinateurs de prototypage IoT. Equipés d’un microcontrôleur classique ESP32, d’une batterie LiPo rechargeables via le port USB, d’interface Bluetooth et WiFi, d’une mémoire FLASH de 16 MB, d’un mini haut-parleur, et suivant les modèles, d’un afficheur, de boutons poussoirs, d’un buzzer, de Leds, d’un lecteur de carte micro-SD autorisant la lecture de fichiers, d’un connecteur Grove I2C, d’aimants intégrés pour les fixer, … bref, ce sont des objets complets pour prototyper en IoT.
Il existe plusieurs modules de capteurs périphériques disponibles pour ce type de cartes, notamment prévu pour fonctionner avec le connecteur Grove. Par exemple, il existe des un capteur RFID pour M5Stack avec connecteur Grove.
Grove est un système de connecteurs Plug-and-Play open-source développé par Seeed Studio conçus pour l’éducation et le prototypage rapide. Il y a une large gamme de capteurs et d’actionneurs et les modules sont enfichables sans soudure sur les M5. Plus de détails ici
Mais qu’en est-il si vous voulez réutilisez des capteurs n’ayant pas ce connecteur ?
Prenons un cas pratique : vous voulez utiliser par exemple une antenne classique RFID RC522 fonctionnant en SPI avec le M5Core 2 v2.6 Basic. Vous allez rencontrer sans vous en douter un souci de port utilisé et être obligé de jouer avec un brochage spécifique ou alors abandonner l’utilisation de certains périphériques du M5 comme l’écran.
En effet l’antenne RC522 est pilotée via le bus SPI avec un le câblage classique et se broche assez facilement sur une RPI ou une Arduino :
En étudiant le descriptif du M5Core basic, le câblage semble aussi assez aisé :
Cependant les GPIO 23/19/18, qui sont nécessaires à la communication SPI avec l’antenne, sont communes au SPI intégré du M5, et donc sont déjà utilisés et entreront en conflit avec l'écran LCD TFT et la carte SD intégrés.
Si on souhaite garder l’utilisation de l’écran, la seule solution va être d’utiliser d’autres Ports et donc de modifier les librairies SPI et MFRC522. Pour cela, je me suis appuyé sur un post d’un Japonais qui fait de nombreux tests qui a publié la solution avec les librairies modifiées (en local ou pour l'origoinal ici).
L’objectif est d’utiliser les broches SCLK(16), MOSI(17), MISO(2), SS(5) et RESET(26), ce qui nous donne le câblage ci-dessous :
Les nouvelles versions des librairies sont disponibles ici.
En programmant avec l’IDE Arduino, il suffit alors de les rajouter au même répertoire que celui contenant le fichier du projet.
Ensuite dans le code, en entête il faut inclure les librairies :
et définir les ports utilisés :
Cette façon de dédoubler le bus SPI sur d’autre port est finalement assez simple à mettre en œuvre et permet d’envisager l’utilisation d’autres modules non Grove et compatible SPI.