art rfidm5 0Les 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.


art rfidm5 2Il 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.

 

 


art rfidm5 1Grove 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 :

 

art rfidm5 4                               art rfidm5 5

 

En étudiant le descriptif du M5Core basic, le câblage semble aussi assez aisé :

art rfidm5 11

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 :

art rfidm5 10

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.

art rfidm5 9

Ensuite dans le code, en entête il faut inclure les librairies :

#include "SOFT_SPI.h"
#include "MFRC522S.h"

et définir les ports utilisés :

#define CLK_PIN 16
#define MOSI_PIN 17
#define MISO_PIN 2
#define SS_PIN 5
#define RST_PIN 26
MFRC522 rfid(SS_PIN, RST_PIN);
Dans le setup, il faut lancer le bus SPI avec les bons ports et initialiser l’antenne :
SSPI.begin(CLK_PIN,MISO_PIN,MOSI_PIN);
rfid.PCD_Init();
Ensuite le code d’interception en « loop » reste assez classique :

art rfidm5 8

 

 

 

 

 

 

 

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.