Étiquettes : , ,

Le module RFID RC522 est un lecteur de carte à puce qui, permet entre autre, d’activer un mécanisme lorsque la bonne carte est présenté au lecteur. Nous allons voir, dans ce tutoriel, la gestion d’un module RFID RC522 avec une carte NodeMCU ESP32.

Prérequis : Programmez votre NodeMCU avec Arduino

Matériel

  • Ordinateur
  • Carte NodeMCU ESP32
  • Câble USB pour connecter la carte Arduino au PC
  • 1x module RFID RC522

Schéma

Le module RFID RC522 utilise la protocole SPI pour communiquer avec l’ESP32. La communication SPI utilise des boches spécifiques sur ce type de microcontrôleur.

Le brochage se fait comme suit (à gauche côté RC522, à droite côté ESP32):

  • Vcc <-> 3V3 (ou Vin(5V) selon la version du module)
  • RST (Reset) <-> D0
  • GND (Masse) <-> GND
  • MISO (Master Input Slave Output) <-> 19
  • MOSI (Master Output Slave Input) <-> 23
  • SCK (Serial Clock) <-> 18
  • SS/SDA (Slave select) <-> 5

Attention: Selon la version du module RFID, la tension d’alimentation peut être différentes (3.3V ou 5V). Vérifiez bien la tension d’alimentation de votre module.

Pour rappel, voici le schéma de brochage de la carte ESP32.

Code pour lire une carte RFID

Pour utiliser le module RFID RC522 nous utilisons la librairie SPI.h qui va nous permettre d’établir la communication entre la carte ESP32 et le module; et la librairie MFRC522.h qui va nous permettre de dialoguer avec le module.

//Libraries
#include <SPI.h>//https://www.arduino.cc/en/reference/SPI
#include <MFRC522.h>//https://github.com/miguelbalboa/rfid

//Constants
#define SS_PIN 5
#define RST_PIN 0

//Parameters
const int ipaddress[4] ={103,97,67,25};

//Variables
byte nuidPICC[4] ={0,0,0,0};
MFRC522::MIFARE_Key key;
MFRC522 rfid = MFRC522(SS_PIN, RST_PIN);

void setup(){
//Init Serial USB
Serial.begin(115200);
Serial.println(F("Initialize System"));
//init rfid D8,D5,D6,D7
SPI.begin();
rfid.PCD_Init();

  Serial.print(F("Reader :"));
  rfid.PCD_DumpVersionToSerial();}

void loop(){
readRFID();
}

void readRFID(void ){/* function readRFID */ 
////Read RFID card

  for (byte i = 0; i < 6; i++) {
  key.keyByte[i] = 0xFF;
  }
  // Look for new 1 cards
  if ( ! rfid.PICC_IsNewCardPresent()) 
  return;

  // Verify if the NUID has been readed
  if (  !rfid.PICC_ReadCardSerial())
  return;
  
  // Store NUID into nuidPICC array
  for (byte i = 0; i < 4; i++) {
    nuidPICC[i] = rfid.uid.uidByte[i];
  }
   
  Serial.print(F("RFID In dec: "));
  //printDec(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();

  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
  

Résultat

Lorsqu’on passe une carte, un badge ou une puce RFID devant le module, l’adresse d’identification du badge s’affiche sur le moniteur série.

Applications

  • Développer une interface Web qui ne s’active que lorsque le bon badge est passé devant le module

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie