samedi 15 avril 2017

Module RFID RC522 et STM32 Nucleo (mbed)


Après avoir expérimenté mon module RFID RC522 avec une carte Arduino et avec une carte MSP430 Launchpad, c'est maintenant au tour de ma carte STM32 Nucleo...

Tout comme ce fut le cas avec les deux autre microcontrôleurs, nous verrons comment récupérer l'UID (numéro de série) d'un tag RFID, puis nous élaborerons un dispositif qui allume une LED verte lorsque l'UID est accepté, et une LED rouge lorsque l'UID n'est pas accepté.

Le circuit

Le module RC522 utilise le protocole SPI pour communiquer avec le  microcontrôleur.  Son niveau logique de 3,3 V correspond parfaitement à celui du SMT32 Nucleo.

Les branchements appropriés sont:
  • Pin SDA du RC522 --- Pin PWM/CS/D10 du Nucleo
  • Pin SCK du RC522 --- Pin SCK/D13 du Nucleo
  • Pin MOSI du RC522 --- Pin PWM/MOSI/D11 du Nucleo
  • Pin MISO du RC522 --- Pin MISO/D12 du Nucleo
  • Pin IRQ du RC522 --- Pas branchée
  • Pin GND du RC522 --- Pin GND du Nucleo
  • Pin RST du RC522 --- Pin D8 du Nucleo
  • Pin 3V3 du RC522 --- Pin 3V3 du Nucleo
  • LED verte (et résistance) --- Pin D2 du Nucleo
  • LED rouge (et résistance) --- Pin D3 du Nucleo
Remarquez que, du côté Nucleo, nous utilisons les connecteurs femelles compatibles Arduino.

Importation du programme RC522_LF dans embed

Dans mbed, j'ai importé un programme intitulé "RC522_LF", dont l'auteur est "Team FRA221:A" (bouton "Import").


Ce programme permet de récupérer l'UID d'un tag RFID amené à proximité du module RC522.  De plus, il contient la bibliothèque MFRC522 qui nous sera bien utile pour la réalisation de nos propres programmes.

Récupération de l'UID

Pour connaître l'UID de vos tags RFID, il s'agit de compiler sans modification le programme "RC522_LF", et de le téléverser dans la carte Nucleo.  Vous ouvrez ensuite sur l'ordinateur un terminal permettant la communication série (j'ai utilisé le moniteur série de l'IDE Arduino), réglé à 57600 bauds.  L'UID et le type de cartes s'affichent chaque fois que vous approchez un tag RFID.


Petit inconvénient:  le programme insère inutilement le nombre "02" à la fin de chaque octet constituant l'UID.  Ainsi, pour le premier tag que j'ai approché du module, il m'affiche comme UID "9002 CF02 9402 7502", ce qui signifie que l'UID est, en fait "90 CF 94 75" (en hexadécimal).  Vous pouvez facilement modifier le programme pour corriger le problème, ou simplement ne pas tenir compte des "02" superflus.

Un script qui approuve ou rejette un UID

Pour faire nos propres programmes, il s'agit de faire une copie du projet "RC522_LF" (incluant sa bibliothèque) et de modifier le fichier "main.cpp".  Le script ci-dessous allume la LED verte lorsque l'UID est approuvé, et allume la LED rouge quand il s'agit d'un autre UID.

Évidemment, vous devez d'abord remplacer le contenu de la constante "bonUID" par la valeur récupérée à l'étape précédente.  Remarquez que, puisque les octets sont en hexadécimal, chaque valeur est précédée du symbole "0x".



N.B.: Ce projet a également été réalisé avec Arduino, Raspberry Pi et MSP430 Launchpad.

Yves Pelletier   (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire