# Lecture de carte RFID

## 1. Connexion matérielle

Le module RFID MFRC522 se connecte au port GROVE A du M5Stack Basic, qui correspond aux broches I2C (SDA sur GPIO21, SCL sur GPIO22). L’adresse I2C par défaut du module est 0x28<span class="whitespace-nowrap">.</span>

---

## 2. Initialisation logicielle

Il faut utiliser la bibliothèque **MFRC522\_I2C** pour piloter le lecteur RFID, ainsi que les bibliothèques **Wire** (I2C) et **M5Unified** (pour gérer l’écran et l’initialisation du M5Stack).

L’initialisation consiste à :

- Démarrer le M5Stack (`M5.begin()`).
- Initialiser le bus I2C (`Wire.begin()`).
- Initialiser le module RFID (`mfrc522.PCD_Init()`).

---

## 3. Lecture du UID

Dans la boucle principale du programme, il s’agit de :

- Vérifier la présence d’une nouvelle carte avec `mfrc522.PICC_IsNewCardPresent()`.
- Lire la carte avec `mfrc522.PICC_ReadCardSerial()`.
- Si une carte est détectée, parcourir le tableau `mfrc522.uid.uidByte[]` qui contient le UID, et l’afficher sur l’écran du M5Stack ou sur le port série<span class="whitespace-nowrap">.</span>

---

## 4. Fonction de conversation hexadécimale

Le capteur RFID renvoie les données lues de la carte dans un tableau sous forme de bits bruts. Il faut donc convertir ces données en une chaine de charactères hexadécimaux :

```c++
String uidhex(MFRC522 &rfid){
    String uidStr;
    for (byte i = 0; i < rfid.uid.size; i++) {
        if (rfid.uid.uidByte[i] < 0x10) uidStr += "0";
        uidStr += String(rfid.uid.uidByte[i], HEX);
        if (i < rfid.uid.size - 1) uidStr += ":";
    }
    return uidStr;
}
```

Ce code renvoie une chaine de charactères contenant le numéro de série de la carte lue au format standard, c'est à dire : XX:XX:XX:XX ... où X est un caractère hexadécimal.

## 5. Exemple de code

```c++
#include <M5Unified.h>
#include <Wire.h>
#include "MFRC522_I2C.h"

MFRC522 mfrc522(0x28);  // Adresse I2C du module RFID

void setup() {
    M5.begin();
    Wire.begin();
    mfrc522.PCD_Init();
    M5.Display.setTextSize(2);
    M5.Display.println("Presentez une carte");
}

void loop() {
    if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
        String uid = uidhex(mfrc522);
        M5.Display.print("UID : ");
        M5.Display.println("uid");)
    }
    M5.delay(2000);
    M5.Display.fillRect(0, 60, 320, 240, BLACK);
}
```

Ce code affiche le UID de chaque carte RFID présentée devant le lecteur sur l’écran du M5Stack<span class="whitespace-nowrap">.</span>

---

## 5. Résumé du fonctionnement

- Branchez le module RFID sur le port GROVE A du M5Stack.
- Chargez le code exemple sur le M5Stack.
- Approchez une carte RFID ou un appareil NFC du lecteur.
- Le UID de la carte s’affiche instantanément à l’écran.

Cette méthode est fiable pour des applications telles que le contrôle d’accès, la gestion de présence ou l’inventaire.