Comment programmer une carte RFID pour vos projets

Les étiquettes RFID sont de petites puces réinscriptibles qui peuvent stocker de petites quantités de données telles que des noms, des adresses, des informations sur les produits, etc. Ils peuvent prendre la forme de porte-clés et de cartes, ou même être implantés dans des animaux de compagnie ou des personnes. Si vous voulez apprendre comment ils fonctionnent ou les ajouter à votre propre projet, un lecteur et un graveur RFID sont un composant bon marché que vous pouvez utiliser. Ce guide vous montrera comment en utiliser un pour écrire sur votre propre étiquette RFID.

Fonctionnement des graveurs RFID

Les capteurs de lecture / écriture RFID utilisent des ondes radio à courte portée et de faible puissance pour transmettre les données des étiquettes, où les données sont stockées, dans l’appareil électronique auquel le capteur est connecté. Dans ce cas, nous allons utiliser un Arduino comme appareil en ajoutant un capteur RFID. Plus précisément, nous allons écrire des informations de base sur une étiquette RFID.

Pour ce faire, nous utiliserons cette bibliothèque pour lire et écrire sur des étiquettes RFID. Étant donné que l’utilisation d’étiquettes RFID est un peu plus complexe que, par exemple, d’allumer ou d’éteindre une LED, nous nous baserons sur des croquis préexistants que vous pourrez intégrer à vos propres projets. Les fonctions pré-écrites fournies par ces croquis vous permettront de les intégrer plus facilement à vos autres projets.

Pour utiliser la bibliothèque, téléchargez d’abord le.fichier zip de la page Github ci-dessus. Ensuite, ouvrez votre Arduino Arduino, accédez à Sketch > Include Library > Add.Bibliothèque ZIP choose et choisissez la bibliothèque que vous venez de télécharger. Non seulement cela permettra d’inclure la bibliothèque RFID dans vos croquis, mais vous obtiendrez également une collection d’exemples de croquis, dont nous aurons besoin plus tard.

Ce dont vous aurez besoin

Pour ce projet, nous allons seulement écrire sur une étiquette RFID. Cependant, gardez à l’esprit que nous parcourons le guide comment vous pouvez l’utiliser pour étendre vos autres projets. Vous pouvez peut-être déclencher un verrou à déverrouiller lorsque vous montrez au lecteur une balise contenant les données correctes, par exemple. Pour ce projet de base, cependant, voici ce dont vous aurez besoin:

Arduino
Capteur RFID (de préférence un CRFM-522)
Étiquettes RFID
Platine de prototypage & câblage
Arduino Arduino
Câble USB

Étant donné que les puces RFID sont très petites, l’étiquette que vous utilisez peut se présenter sous presque toutes les formes. Deux des types les plus courants de puces RFID – venant souvent en kits ou avec des capteurs – sont de petits porte-clés ronds ou des cartes plates de la taille d’une carte de crédit. Cela dit, quelle que soit l’étiquette que vous avez devrait fonctionner.

Le Code

Si vous avez installé la bibliothèque comme indiqué ci-dessus, l’esquisse suivante devrait être disponible dans votre livre d’exemples sous le fichier > Exemples > MFRC522 > rfid_write_personal_data. Sélectionnez-le dans votre exemple de livre ou copiez le code ci-dessous:

/*
* Ecrire les données personnelles d’une carte RFID MIFARE à l’aide d’un lecteur RFID-RC522
* Utilise la bibliothèque MFRC522 pour utiliser le KIT MODULE RFID ARDUINO 13,56 MHZ AVEC LES ÉTIQUETTES SPI W ET R DE COOQROBOT.
* ——————————
* MFRC522 Arduino Arduino Arduino Arduino Arduino
* Lecteur / PCD Uno / 101 Mega Nano v3 Leonardo / Micro Pro Micro
* Broche de Signal Broche Broche Broche Broche
* ——————————
* RST/Reset RST 9 5 D9 RESET / ICSP-5 RST
* SPI SS SDA (SS) 10 53 D10 10 10
* SPI MOSI MOSI 11 / ICSP-4 51 D11 ICSP-4 16
* SPI MISO MISO 12 / ICSP-1 50 D12 ICSP-1 14
* SPI SCK SCK 13 / ICSP-3 52 D13 ICSP-3 15
*
* Matériel requis:
* Arduino
* PCD (Dispositif de couplage de proximité): Lecteur sans contact NXP MFRC522 IC
* PICC (Carte à Circuit Intégré de Proximité): Une carte ou une étiquette utilisant l’interface ISO 14443A, par exemple Mifare ou NTAG203.
* Le lecteur peut être trouvé sur eBay pour environ 5 dollars. Rechercher « mf-rc522 » sur ebay.com.
*/

# include
# include

# define RST_PIN 9 // Configurable, voir la disposition typique des broches ci-dessus
# define SS_PIN 10 // Configurable, voir la disposition typique des broches ci-dessus

MFRC522 mfrc522(SS_PIN, RST_PIN); // Créer une instance MFRC522

void setup() {
Serial.begin(9600); // Initialise les communications série avec le SPI PC
.begin(); // Initialiser le bus SPI
mfrc522.PCD_Init(); // Initialiser la carte MFRC522
Série.println(F(« Écrire des données personnelles sur un PICC MIFARE « ));
}

boucle vide() {

// Préparer la clé – toutes les clés sont réglées sur FFFFFFFFFFFFh à la livraison de la puce depuis l’usine.
MFRC522:: Clé MIFARE_Key;
pour (octet i = 0; i < 6; i++) clé.keyByte=0xFF;

// Réinitialise la boucle si aucune nouvelle carte n’est présente sur le capteur/lecteur. Cela permet d’économiser l’ensemble du processus lorsqu’il est inactif.
si (! mfrc522.PICC_IsNewCardPresent()) {
retour;
}

// Sélectionnez l’une des cartes
if(! mfrc522.PICC_ReadCardSerial()) {
retour;
}

Série.print(F(« Card UID: »)); // Dump UID
pour (octet i = 0; i < mfrc522.uid.taille; i++) {
Série.imprimer (mfrc522.uid.uidByte < 0x10?  » 0″ :  » « );
Série.imprimer (mfrc522.uid.uidByte, HEX);
}
Série.print(F(« Type de PICC: »)); // Dump type de PICC
MFRC522:: PICC_Type piccType=mfrc522.PICC_GetType (mfrc522.uid.sak);
Série.println (mfrc522.PICC_GetTypeName(piccType));

tampon d’octets;
bloc d’octets;
MFRC522::StatusCode status;
octet len;

Série.setTimeout(20000L); // attendez 20 secondes pour entrer à partir de serial
// Demandez aux données personnelles: Nom de famille
Serial.println(F(« Nom de famille de type, se terminant par # »));
len=Serial.readBytesUntil(‘#’, (char*) buffer, 30); // lit le nom de famille à partir de serial
pour (byte i = len; i < 30; i++) buffer =  »; // pad avec des espaces

block =1;
// Serial.println(F(« Authentification à l’aide de la clé A… »));
status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
if (status != MFRC522::STATUS_OK) {
Serial.print(F(« PCD_Authenticate() failed: « ));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println(F(« PCD_Authenticate() success: « ));

// Write block
status = mfrc522.MIFARE_Write(block, buffer, 16);
if (status != MFRC522::STATUS_OK) {
Serial.print(F(« MIFARE_Write() failed: « ));
Serial.println(mfrc522.GetStatusCodeName(status));
return;
}
else Serial.println(F(« MIFARE_Write() succès: « ));

block=2;
// Série.println(F(« Authentification à l’aide de la clé A… »));
status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, bloc, clé &, &(mfrc522.uid));
if(statut!= MFRC522::STATUS_OK) {
Série.print(F(« PCD_Authenticate() a échoué: »));
Série.println (mfrc522.GetStatusCodeName(status));
retour;
}

// Bloc d’écriture
status= mfrc522.MIFARE_Write(bloc, & tampon, 16);
if(statut!= MFRC522::STATUS_OK) {
Série.print(F(« MIFARE_Write() a échoué: »));
Série.println (mfrc522.GetStatusCodeName(status));
retour;
}
autre série.println(F(« MIFARE_Write() succès: « ));

// Demander des données personnelles: Prénom
Série.println(F(« Tapez le prénom, se terminant par # »));
len=Serial.readBytesUntil(‘#’, (char*) buffer, 20); // lit le prénom à partir de serial
pour (byte i = len; i < 20; i++) buffer =  »; // pad avec des espaces

block =4;
// Serial.println(F(« Authentification à l’aide de la clé A… »));
status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, bloc, clé &, &(mfrc522.uid));
si (statut!= MFRC522::STATUS_OK) {
Série.print(F(« PCD_Authenticate() a échoué: »));
Série.println (mfrc522.GetStatusCodeName(status));
retour;
}

// Bloc d’écriture
status= mfrc522.MIFARE_Write(bloc, tampon, 16);
if(statut!= MFRC522::STATUS_OK) {
Série.print(F(« MIFARE_Write() a échoué: »));
Série.println (mfrc522.GetStatusCodeName(status));
retour;
}
autre série.println(F(« MIFARE_Write() succès: « ));

block=5;
// Série.println(F(« Authentification à l’aide de la clé A… »));
status=mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, bloc, clé &, &(mfrc522.uid));
if(statut!= MFRC522::STATUS_OK) {
Série.print(F(« PCD_Authenticate() a échoué: »));
Série.println (mfrc522.GetStatusCodeName(status));
retour;
}

// Bloc d’écriture
status= mfrc522.MIFARE_Write(bloc, & tampon, 16);
if(statut!= MFRC522::STATUS_OK) {
Série.print(F(« MIFARE_Write() a échoué: »));
Série.println (mfrc522.GetStatusCodeName(status));
retour;
}
autre série.println(F(« MIFARE_Write() succès: « ));

Série.println(«  »);
mfrc522.PICC_HaltA(); // Arrêt PICC
mfrc522.PCD_StopCrypto1(); // Arrête le chiffrement sur PCD

}

Téléchargez ce code et (après avoir câblé votre projet comme décrit ci-dessous), vous pouvez immédiatement commencer à écrire des données sur vos étiquettes RFID.

L’un des avantages de l’utilisation de bibliothèques comme celle-ci est que vous pouvez trouver des portions de code déjà écrites, vous n’avez donc pas à réinventer la roue pour chaque projet. Cette fois, nous n’allons pas passer par le code ligne par ligne. Au lieu de cela, parlons un peu plus de ce que fait le code.

Les données contenues dans les étiquettes RFID sont stockées dans des sections appelées secteurs, qui sont ensuite divisées en blocs. Chaque bloc peut contenir quelques octets de données. La quantité dépend de la balise spécifique, mais une balise passive 1K commune (c’est-à-dire une balise pouvant stocker 1 kilo-octet de données) peut, par exemple, avoir 16 secteurs contenant chacun 4 blocs, chaque bloc pouvant stocker jusqu’à 16 octets de données.

Cette esquisse ne va stocker que votre prénom et votre nom, elle n’a donc besoin que d’un seul secteur, mais elle répartira les données sur plusieurs blocs, car vos noms peuvent prendre plus de données que ce qui peut tenir dans un seul bloc (et pour plus de commodité organisationnelle).

Lorsque vous exécutez le script, il vous sera demandé de fournir votre nom de famille, qui sera ensuite écrit sur des blocs sur votre étiquette RFID. Ensuite, vous obtiendrez une invite pour écrire votre prénom, qui sera écrit dans différents blocs. Pour plus d’informations sur la façon dont les blocs RFID sont organisés et sur la façon de les traiter, consultez ce guide.

Le câblage

Le câblage de votre lecteur RFID spécifique dépendra du modèle que vous obtenez, car de nombreuses itérations différentes ont les broches dans un ordre différent. Heureusement, l’exemple de code que nous avons inclus ci-dessus répertorie les épingles à utiliser en fonction de la carte que vous utilisez. Suivez ce guide pour plus de détails.

À titre d’exemple, si vous utilisiez un Arduino Uno et un capteur MFRC-522, procédez comme suit:

● Connectez RST à la broche 9
● Connectez SDA (ou SS) à la broche 10
● Connectez MOSI à la broche 11
● Connectez MISO à la broche 12
● Connectez SCK à la broche 13
● Connectez VCC à 5V
● Connectez GND à GND

Mais, encore une fois, vérifiez quelles cartes vous êtes utiliser pour vous assurer que vous êtes correctement câblé. Une fois votre carte connectée, allumez votre Arduino alors qu’il est connecté via USB à votre ordinateur. Ensuite, vous pouvez appuyer sur une carte RFID ou un porte-clés pour le lecteur. Maintenez-le là tout en entrant des données via le moniteur série.

La bibliothèque MFRC522 comprend également un croquis intégré pour lire les données RFID après les avoir écrites. Maintenant que vous savez écrire des données, essayez de télécharger cette esquisse et de l’utiliser pour lire la balise sur laquelle vous avez écrit.

Leave a Reply

Votre adresse e-mail ne sera pas publiée.