Usa un lettore RFID con Raspberry Pi.
Commentiⓘ Cet article peut avoir été partiellement ou totalement traduit à l'aide d'outils automatiques. Nous nous excusons des erreurs que cela pourrait engendrer.
Questo tutorial è la seconda parte di un file dedicato alla scoperta dell'elettronica con il Raspberry Pi. Se non l'hai letto, ti consiglio di consultare il primo tutorial per controllare un LED con il Raspberry Pi.
Che si tratti di sistemi di identificazione, gestione dell'inventario, pagamento o automazione domestica, i chip RFID vengono utilizzati sempre di più.
In questo tutorial vedremo come leggere le card RFID con il Raspberry Pi e un lettore RFID RC522.
Alla fine del tutorial, sarai in grado di leggere un badge RFID, verificare se è quello previsto e accendere un LED verde o rosso, a seconda del risultato. Tutto quello che devi fare è adattare questo esempio di base al progetto che preferisci!
L'attrezzatura necessaria
Per completare questo tutorial, avrai bisogno dei seguenti materiali:
- Un Raspberry Pi
- La sua dieta
- Scheda MicroSD
- Un lettore RFID RC522
- Un set di cavi, LED, resistenze e piastre di prova
- Un saldatore e una lega per saldatura
Assembla il lettore RFID RC522
Quando ricevi il modulo RFID RC522, puoi vedere che viene fornito con un set di 2 x 8 pin. Il primo passo sarà quindi saldare 8 di questi pin sul lettore RFID. Niente panico, la saldatura è semplicissima!
È quindi necessario inserire i PIN negli slot previsti sulla scheda RFID e saldarli con il ferro.
Se non hai mai saldato, ti consiglio questa eccellente guida per imparare a saldare da François da framboise314.fr.
Collega il lettore RFID e i LED al Raspberry Pi
Prima di passare alla scrittura del codice che ci permetterà di leggere i badge RFID e controllare i LED, dobbiamo prima collegare tutti i componenti al Raspberry Pi.
Come promemoria, collegare e scollegare i componenti deve sempre essere fatto con il Raspberry Pi spento.
Collega il lettore RFID RC522 al Raspberry Pi
Il primo componente che collegheremo è il lettore RFID.
Per controllare il lettore RFID utilizzeremo una libreria esterna. Sfortunatamente, questo è scritto con le porte GPIO inserite direttamente nel codice. Ciò significa che non possiamo configurarli diversamente e che siamo quindi costretti a utilizzare esattamente le stesse porte di quelle previste nella libreria.
Ecco una tabella che elenca le porte del lettore e la porta GPIO del Raspberry Pi a cui dovrai collegarlo.
Come promemoria, troverai una mappa delle porte GPIO del Raspberry Pi nel primo tutorial di questa serie.
Collega i LED
Dopo il lettore RFID, colleghiamo i LED al Raspberry Pi.
Faremo un assemblaggio molto semplice. Ogni LED avrà il suo anodo (la gamba allungata) collegato a una porta GPIO ei due LED avranno il loro anodo connesso allo stesso resistore, a sua volta connesso a una porta di tipo GPIO Ground del Raspberry Pi.
Pertanto, utilizziamo un singolo resistore per due LED e limitiamo il numero di cavi.
Alla fine, una volta che la scheda RFID ei LED sono collegati al Pi, dovresti avere un assemblaggio simile a questo.
Scrivi il programma per leggere un badge RFID.
Abbiamo un circuito funzionante, non ci resta che attivare le porte SPI del Raspberry Pi, necessarie per utilizzare il lettore RFID, e scrivere il programma che leggerà un badge RFID.
Come nel precedente tutorial, il programma sarà scritto in Python. Questo tutorial non è un corso Python e spiegheremo solo brevemente il programma. Se vuoi saperne di più su Python, abbiamo pubblicato un corso introduttivo alla programmazione con Python.
Attiva il protocollo SPI del Raspberry Pi
Prima di scrivere il programma, abilitiamo il protocollo SPI sul nostro Raspberry Pi in modo da poter utilizzare il modulo RFID.
Per attivarlo, è sufficiente eseguire il comando sudo raspi-config
, sul tuo Raspberry, quindi scegli Interfacing Options
, SPI
, Yes
e infine Finish
.
Installa la libreria pi-rc522
Ultimo prerequisito, installeremo la libreria Python3 "pi-rc522" che permette di controllare il lettore RC522.
Useremo Pip3, un gestore di librerie per Python.
Hai solo bisogno di eseguire il comando:
sudo pip3 install pi-rc522
Scrivi il programma per leggere l'identificatore di un badge RFID
Ogni badge RFID ha un identificatore univoco. È leggendo questo identificatore e confrontandolo con un elenco di identificatori autorizzati che possiamo sapere se un badge è autorizzato.
Scriveremo quindi un programma che ci consenta di leggere l'identificatore univoco di un badge RFID.
Come abbiamo fatto nel tutorial precedente, scriveremo il programma nella cartella /home/pi/electronic
(se non l'hai già fatto, crea la cartella).
In questa cartella, crea un file read_rfid_uid.py
e inserisci il codice seguente:
#!/usr/bin/env python3.5
#-- coding: utf-8 --
import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
from pirc522 import RFID
import time
GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte
rc522 = RFID() #On instancie la lib
print('En attente d'un badge (pour quitter, Ctrl + c): ') #On affiche un message demandant à l'utilisateur de passer son badge
#On va faire une boucle infinie pour lire en boucle
while True :
rc522.wait_for_tag() #On attnd qu'une puce RFID passe à portée
(error, tag_type) = rc522.request() #Quand une puce a été lue, on récupère ses infos
if not error : #Si on a pas d'erreur
(error, uid) = rc522.anticoll() #On nettoie les possibles collisions, ça arrive si plusieurs cartes passent en même temps
if not error : #Si on a réussi à nettoyer
print('Vous avez passé le badge avec l'id : {}'.format(uid)) #On affiche l'identifiant unique du badge RFID
time.sleep(1) #On attend 1 seconde pour ne pas lire le tag des centaines de fois en quelques milli-secondes
Una volta salvato il file, se ne autorizza l'esecuzione con il comando:
sudo chmod +x /home/pi/electronic/read_rfid_uid.py
Possiamo ora avviare il programma chiamandolo con il comando:
/home/pi/electronic/read_rfid_uid.py
Ogni volta che passi un badge RFID davanti al lettore, verrà visualizzato il suo identificativo univoco!
Scrivi un programma che mostri se un badge è valido o meno.
Ora che possiamo leggere l'identificatore univoco di un badge, tutto ciò che dobbiamo fare è adattare il codice precedente per confrontare l'identificatore letto con un identificatore scritto nel programma.
Modificheremo quindi un po 'il programma precedente in modo che confronti l'uid letto con quello scritto nel programma e accendiamo il led rosso o verde a seconda del risultato.
Copia il file precedente in un nuovo file verify_rfid.py
e modificalo per il codice seguente:
Modifica la linea RFID_UID
per inserire l'identificativo del tuo tag RFID!
#!/usr/bin/env python3.5
#-- coding: utf-8 --
import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
from pirc522 import RFID
import time
GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte
LED_RED = 3 #Définit le numéro du port GPIO qui alimente la led rouge
LED_GREEN = 5 #Définit le numéro du port GPIO qui alimente la led verte
RFID_UID = [21, 35, 5, 43, 57] #Définit l'UID du badge RFID
#Définit la fonction permettant d'allumer une led
def turn_led_on (led) :
GPIO.setup(led, GPIO.OUT) #Active le contrôle du GPIO
GPIO.output(led, GPIO.HIGH) #Allume la led
#Définit la fonction permettant d'éteindre une led
def turn_led_off (led) :
GPIO.setup(led, GPIO.OUT) #Active le contrôle du GPIO
GPIO.output(led, GPIO.LOW) #Eteind la led
#Définit la fonction permettant d'allumer la rouge et éteindre la verte
def turn_red_on () :
turn_led_off(LED_GREEN) #Eteind la led verte
turn_led_on(LED_RED) #Allume la led rouge
#Définit la fonction permettant d'allumer la verte et éteindre la rouge
def turn_green_on () :
turn_led_off(LED_RED) #Eteind la led rouge
turn_led_on(LED_GREEN) #Allume la led verte
rc522 = RFID() #On instancie la lib
print('En attente d'un badge (pour quitter, Ctrl + c): ') #On affiche un message demandant à l'utilisateur de passer son badge
#On va faire une boucle infinie pour lire en boucle
while True :
rc522.wait_for_tag() #On attnd qu'une puce RFID passe à portée
(error, tag_type) = rc522.request() #Quand une puce a été lue, on récupère ses infos
if not error : #Si on a pas d'erreur
(error, uid) = rc522.anticoll() #On nettoie les possibles collisions, ça arrive si plusieurs cartes passent en même temps
if not error : #Si on a réussi à nettoyer
if RFID_UID == uid :
print('Badge {} autorisé !'.format(uid))
turn_green_on()
else :
print('Badge {} interdit !'.format(uid))
turn_red_on()
time.sleep(1) #On attend 1 seconde pour ne pas lire le tag des centaines de fois en quelques milli-secondes
Tutto quello che devi fare è avviare il programma e testarlo!
Puoi quindi adattare il codice per i tuoi progetti, come creare una serratura intelligente o persino un jukebox utilizzando tag RFID!
Per informazioni, puoi ottenere tutto il codice per questo tutorial sul GitHub di Raspbian France.
Nel prossimo tutorial vedremo come controllare un servomotore con il Raspberry Pi!