La RFID est une technologie par laquelle les données sont transmises sans contact, qui est utilisée dans les cartes à puce. Les cartes d’accès peuvent être lues avec un module RFID Raspberry Pi (RC522) et donc par ex. l’accès aux portes ou aux serrures peut être donné. Les smartphones actuels en ont des similaires.
Dans ce tutoriel, je vais montrer comment lire les étiquettes RFID avec le RC522 et le Raspberry Pi et aussi écrire des cartes à puce. Le code présenté peut également être utilisé pour d’autres projets (ouvre-porte, contrôle d’accès).
Le NFC est une technologie connexe, dont les différences peuvent être trouvées ici. Les deux RFID et NFC émettent sur une fréquence de 13,56 MHz, c’est pourquoi les modules sont compatibles les uns avec les autres.
Matériel requis
J’ai utilisé les pièces (de construction) suivantes pour ce didacticiel:
Il y a aussi Lecteurs USB RFID, mais je ne les ai pas essayés.
Si vous souhaitez utiliser le lecteur de carte comme contrôle d’entrée, etc., il est logique de donner une carte à chaque utilisateur. Vous pouvez également acheter ces cartes à puce dans des quantités plus petites et plus grandes pour un peu d’argent, puis écrivez individuellement RC522 sur chaque carte (instructions ci-dessous)
Installer
La barrette de broches de mon module n’était pas encore soudée, j’ai donc dû la souder avant de pouvoir connecter les broches.
Le câblage est le suivant:
Module RF522 | raspberry pi |
---|---|
SDA | Broche 24 / GPIO8 (CE0) |
SCK | Broche 23 / GPIO11 (SCKL) |
MOSI | Broche 19 / GPIO10 (MOSI) |
MISO | Broche 21 / GPIO9 (MISO) |
IRQ | – |
GND | Pin6 (GND) |
RST | Pin22 / GPIO25 |
3,3 V | Broche 1 (3V3) |
Le tout ressemble schématiquement à ceci:
Activation de SPI et de l’installation du logiciel
Pour utiliser le blindage RFID RC522, nous avons besoin du bus SPI. Pour que le noyau soit chargé au démarrage, nous éditons le fichier de configuration:
sudo nano /boot/config.txt
Le contenu suivant est ajouté à la fin du fichier:
device_tree_param=spi=on dtoverlay=spi-bcm2708
Vous enregistrez et quittez avec CTRL + O, CTRL + X. Ensuite, nous activons SPI:
sudo raspi-config
Activez sous «Options avancées»> «SPI» et confirmez le redémarrage (utilisez égalementsudo reboot now
).
Ensuite, vous pouvez utiliser dmesg | grep spi
pour vérifier si le module a été chargé. La sortie devrait ressembler à ceci:
pi@raspberrypi:~ $ dmesg | grep spi [ 10.784368] bcm2708_spi 20204000.spi: master is unqueued, this is deprecated [ 10.813403] bcm2708_spi 20204000.spi: SPI Controller at 0x20204000 (irq 80)
Maintenant, les packages doivent être installés pour que nous puissions accéder au bus SPI et charger une bibliothèque correspondante à partir de GitHub.
sudo apt-get install git python-dev --yes
Tout d’abord, nous installons le module Python SPI
git clone https://github.com/lthiery/SPI-Py.git cd SPI-Py sudo python setup.py install cd ..
puis la bibliothèque Raspberry Pi RFID RC522:
git clone https://github.com/mxgxw/MFRC522-python.git && cd MFRC522-python
Test du lecteur / enregistreur RFID Raspberry Pi
En plus du module RC522, une carte blanche et un porte-clés compatible NFC sont généralement fournis. Ces parties peuvent être utilisées comme authentification car elles sont inscriptibles et lisibles. Un smartphone compatible NFC (Android / iOS) pourrait également être utilisé (comme la plupart des téléphones portables les plus récents).
Pour exécuter le premier test du porte-clés carte / clé, nous exécutons le script:
sudo python Read.py
Dès que la carte à puce est attachée et reconnue, vous verrez une sortie comme celle-ci:
pi@raspberrypi:~/MFRC522-python $ sudo python Read.py Welcome to the MFRC522 data read example Press Ctrl-C to stop. Card detected Card read UID: 69,245,238,117 Size: 8 Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Afin de modifier les données (numéros) stockées sur la puce, nous éditons le fichier «Write.py» (sudo nano Write.py
). Pour ce faire, modifiez le code de la ligne 55 comme suit (vous pouvez choisir librement les 16 chiffres data
entre 0 et 255. J’ai représenté un mot avec Caractères ASCII)
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# Variable pour les données à écrire Les données = [[114, 97, 115, 112, 98, 101, 114, 114, 121, 45, 116, 117, 116, 111, 114, 0] # Remplissez les données avec 0xFF #pour x dans la plage (0,16): # Data.append (0xFF) impression « Le secteur 8 ressemblait à ceci: » # Lire le bloc 8 MIFAREReader.MFRC522_Read(8) impression » n » #print « Le secteur 8 sera maintenant rempli avec 0xFF: » # Écrivez les données MIFAREReader.MFRC522_Write(8, Les données) #print » n » impression « Il ressemble maintenant à ceci: » # Vérifiez si elle a été écrite MIFAREReader.MFRC522_Read(8) impression » n » « » « données = [] # Remplissez les données avec 0x00 pour x dans la plage (0,16): data.append (0x00) imprimer « Maintenant, nous le remplissons avec 0x00: » MIFAREReader.MFRC522_Write (8, données) imprimer » n » imprimer « Il est maintenant vide: » # Vérifiez si elle a été écrite MIFAREReader.MFRC522_Read (8) imprimer » n » « » « |
Utilisation d’un lecteur NFC / RFID dans des projets Raspberry Pi (verrouillage de porte, etc.)
Les deux fichiers Python «Read.py» et «Write.py» contiennent un exemple de code pour lire et écrire une puce qui peut être utilisée dans d’autres projets. Le fichier le plus important est «MFRC522.py», qui peut être copié dans un autre projet.
L’extrait suivant peut être utilisé dans d’autres projets, par ex. comme vérification d’une serrure à code ou d’une serrure de porte. J’utilise un niveau d’authentification (vous pouvez également en définir plusieurs) avec un certain code initial. Les derniers chiffres fournissent des informations sur le titulaire de la carte (si ces données sont stockées quelque part). Vous ne pouvez identifier l’utilisateur que par l’UID, mais je suppose que plusieurs cartes peuvent appartenir à un seul utilisateur. Si vous n’aimez pas cette solution, vous pouvez bien sûr la changer.
J’ai apporté une petite modification au fichier «MFRC522.py» afin que le MIFAREReader.MFRC522_Read
la fonction a une valeur de retour:
331 332 333 334 335 336 337 338 339 340 341 342 343 344 |
def MFRC522_Read(soi, blockAddr): recvData = [[] recvData.ajouter(soi.PICC_READ) recvData.ajouter(blockAddr) moue = soi.CalulateCRC(recvData) recvData.ajouter(moue[[0]) recvData.ajouter(moue[[1]) (statut, backData, backLen) = soi.MFRC522_ToCard(soi.PCD_TRANSCEIVE, recvData) si ne pas(statut == soi.MI_OK): impression « Erreur lors de la lecture! » je = 0 #if len (backData) == 16: # Print « Sector » + str (blockAddr) + « » + str (backData) revenir backData |
L’exemple de code ressemblait alors à ceci (les modifications précédentes sont importantes, sinon aucune comparaison ne peut avoir lieu):
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#! / usr / bin / env python # – * – codage: utf8 – * – importation RPi.GPIO comme GPIO importation MFRC522 def sample_func(sample_var): # Beispiel Funktion # Skript starten, Daten loggen, etc. impression(« Test Funktion wurde aufgerufen ») # … MIFAREReader = MFRC522.MFRC522() code d’autorisation = [[114, 97, 115, 112, 98, 101, 114, 114, 121] # die ersten 9 Ziffern sind der Authentifizierungscode essayer: tandis que Vrai: # Rechercher des cartes (statut,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL) # Si une carte est trouvée si statut == MIFAREReader.MI_OK: # Obtenez l’UID de la carte (statut,uid) = MIFAREReader.MFRC522_Anticoll() # Il s’agit de la clé par défaut pour l’authentification clé = [[0xFF,0xFF,0xFF,0xFF,0xFF,0xFF] # Sélectionnez la balise numérisée MIFAREReader.MFRC522_SelectTag(uid) # Authentifier statut = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, clé, uid) # Vérifiez si authentifié si statut == MIFAREReader.MI_OK: # Lire le bloc 8 Les données = MIFAREReader.MFRC522_Read(8) si Les données[[:9] == code d’autorisation: sample_func(Les données) #elif … sauf KeyboardInterrupt: impression(« Abbruch ») GPIO.nettoyer() |
Comme vous pouvez le voir, le code est très simple et, comme je l’ai dit, ne devrait servir qu’à donner un élan pour démarrer vos propres applications, plus sophistiquées. Le code en ligne doit bien entendu être ajusté.
Quels projets envisagez-vous d’en faire? J’envisage de construire une serrure de porte ou une serrure de tiroir / petit coffre-fort avec le lecteur RFID Raspberry Pi.
-
AptoFun 2 pcs RC522 Module de Lecture de Carte RFID pour Arduino, Raspberry PiLe RC522 est le lecteur de carte RFID intégré qui fonctionne sur une communication sans contact 13,56 MHz. Compatible avec le signal 14443A. DSP deal with ISO14443A frames and error correction MF RC522 Support Mifare Series High Speed non-contact communication, double communication vitesse jusqu'à 424 Kb/s Le module a une stabilité élevée, une longue distance de lecture de carte et est facile à utiliser. Avant de procéder à ce module, il convient pour le programme et le lecteur de cartes.
-
Digitalkey PN532 Module de lecture/écriture NFC - RFID V3 avec 2 étiquettes et 2 USB-Ttl - Compatible avec Arduino Raspberry Pi et autres projets IOT (Original)Support pour lecture et écriture RFID, communication P2P avec appareils identiques, NFC avec téléphone Android. Prend en charge l'interface I2C, SPI et HSU (High Speed UART), facile à changer entre les modes grâce aux deux commutateurs présents. Le module RFID prend en charge les cartes : Mifare 1k, 4k, srix4k, ultralight, et DesFire, cartes ISO/IEC 14443-4 comme CD97BX, CD light, Desfire, P5CN072 (SMX), cartes Innovision Jewel comme IRT5001, cartes FeliCa telles que RCS_860 et RCS_854 Distance de lecture jusqu'à 5 cm ~ 7 cm, petite taille et facile à insérer dans votre projet. Facturation et assistance garanties - 10 ans d'expérience italienne par Digitalkey.it
-
sb components Carte d'extension NFC pour Raspberry Pi Pico 13,56 MHz Carte d'extension RFID Lecture/écriture NFC pour Raspberry Pi PicoCapacités NFC améliorées : l'extension Pico NFC pour Raspberry Pi PICO offre une fonctionnalité avancée de lecture/écriture NFC de 13,56 MHz, permettant une communication sans contact transparente pour des capacités polyvalentes de l'appareil. Écran OLED intégré de 0,91" : doté d'un écran OLED intégré, l'extension facilite une interface visuelle, améliorant l'interaction de l'utilisateur et les capacités d'affichage pour diverses applications. Options de programmation polyvalentes : profitez d'une programmation pratique par glisser-déposer via un stockage de masse via USB, offrant une expérience conviviale pour les développeurs travaillant avec MicroPython, CircuitPython et Arduino IDE. Connectivité flexible : équipé d'une alimentation de type C/UART, l'extension assure une alimentation et une communication efficaces. Le répartiteur GPIO multifonction prend en charge diverses fonctions telles que les E/S générales, UART, I2C, SPI, ADC et PWM. Adaptable pour divers projets : avec la compatibilité pour plusieurs protocoles NFC, la prise en charge HID pour la simulation de souris ou de clavier, et un buzzer multi-tunes pour les alertes audio, l'extension Pico NFC est parfaite pour un accès sécurisé, des projets IoT et des expositions interactives.