Utilice un lector de RFID con la Raspberry Pi.
Comentariosⓘ Cet article peut avoir été partiellement ou totalement traduit à l'aide d'outils automatiques. Nous nous excusons des erreurs que cela pourrait engendrer.
Este tutorial es la segunda parte de un archivo dedicado a descubrir la electrónica con la Raspberry Pi. Si no lo has leído, te aconsejo que consultes el primer tutorial para controlar un LED con la Raspberry Pi.
Ya sea para sistemas de identificación, gestión de inventarios, pagos o domótica, los chips RFID se utilizan cada vez más.
En este tutorial veremos cómo leer tarjetas RFID con la Raspberry Pi y un lector RFID RC522.
Al final del tutorial, podrás leer una placa RFID, comprobar si es la esperada y encender un LED verde o rojo, según el resultado. ¡Todo lo que tiene que hacer es adaptar este ejemplo básico al proyecto de su elección!
El equipo necesario
Para completar este tutorial, necesitará los siguientes materiales:
- Una frambuesa pi
- Su dieta
- Tarjeta micro SD
- Un lector RFID RC522
- Un conjunto de cables, LED, resistencias y placas de prueba.
- Un soldador y una soldadura.
Ensamble el lector RFID RC522
Cuando recibe el módulo RFID RC522, puede ver que viene con un juego de 2 x 8 pines. Por lo tanto, el primer paso será soldar 8 de estos pines en el lector RFID. ¡Que no cunda el pánico, soldar es muy fácil!
Por lo tanto, debe insertar los PIN en las ranuras provistas en la tarjeta RFID y soldarlos con su plancha.
Si nunca ha soldado, le recomiendo esta excelente guía para aprender a soldar de François de framboise314.fr.
Conecte el lector RFID y los LED a la Raspberry Pi
Antes de pasar a escribir el código que nos permitirá leer las placas RFID y controlar los LED, primero debemos conectar todos los componentes a la Raspberry Pi.
Como recordatorio, la conexión y desconexión de los componentes siempre debe realizarse con la Raspberry Pi apagada.
Conecte el lector RFID RC522 a la Raspberry Pi
El primer componente que vamos a conectar es el lector RFID.
Para controlar el lector RFID usaremos una biblioteca externa. Desafortunadamente, esto está escrito con los puertos GPIO ingresados directamente en el código. Esto significa que no podemos configurarlos de manera diferente y que, por lo tanto, nos vemos obligados a usar exactamente los mismos puertos que los proporcionados en la biblioteca.
Aquí hay una tabla que enumera los puertos del lector y el puerto GPIO de la Raspberry Pi al que deberá conectarlo.
Como recordatorio, encontrará un mapa de los puertos GPIO de la Raspberry Pi en el primer tutorial de esta serie.
Conecte los LED
Después del lector RFID, conectemos los LED a la Raspberry Pi.
Vamos a realizar un montaje muy sencillo. Cada LED tendrá su ánodo (la pata alargada) conectado a un puerto GPIO y los dos LED tendrán su ánodo conectado a la misma resistencia, a su vez conectado a un puerto de tipo GPIO Ground de la Raspberry Pi.
Por lo tanto, usamos una sola resistencia para dos LED y limitamos el número de cables.
Al final, una vez que la tarjeta RFID y los LED estén conectados al Pi, debería tener un ensamblaje parecido a este.
Escriba el programa para leer una tarjeta RFID.
Contamos con un circuito funcional, solo tenemos que activar los puertos SPI de la Raspberry Pi, necesarios para utilizar el lector RFID, y escribir el programa que leerá una placa RFID.
Como en el tutorial anterior, el programa estará escrito en Python. Este tutorial no es un curso de Python y solo explicaremos brevemente el programa. Si desea obtener más información sobre Python, hemos publicado un curso de introducción a la programación con Python.
Activar el protocolo SPI de la Raspberry Pi
Antes de escribir el programa, habilitemos el protocolo SPI en nuestra Raspberry Pi para que podamos usar el módulo RFID.
Para activarlo, simplemente ejecute el comando sudo raspi-config
, en tu Raspberry, luego elige Interfacing Options
, SPI
, Yes
y por fin Finish
.
Instale la biblioteca pi-rc522
Último requisito previo, vamos a instalar la biblioteca Python3 "pi-rc522" que le permite controlar el reproductor RC522.
Usaremos Pip3, un administrador de biblioteca para Python.
Solo necesita ejecutar el comando:
sudo pip3 install pi-rc522
Escriba el programa para leer el identificador de una placa RFID
Cada tarjeta RFID tiene un identificador único. Es leyendo este identificador y comparándolo con una lista de identificadores autorizados que podemos saber si una insignia está autorizada.
Por tanto, vamos a escribir un programa que nos permita leer el identificador único de una placa RFID.
Como hicimos en el tutorial anterior, escribiremos el programa en la carpeta /home/pi/electronic
(si aún no lo ha hecho, cree la carpeta).
En esta carpeta, cree un archivo read_rfid_uid.py
y poner el siguiente código en él:
#!/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 vez guardado el archivo, se autoriza su ejecución con el comando:
sudo chmod +x /home/pi/electronic/read_rfid_uid.py
Ahora podemos iniciar el programa llamándolo con el comando:
/home/pi/electronic/read_rfid_uid.py
Cada vez que pase una tarjeta RFID frente al lector, se mostrará su identificador único.
Escribe un programa que muestre si una insignia es válida o no.
Ahora que podemos leer el identificador único de una placa, todo lo que tenemos que hacer es adaptar el código anterior para comparar el identificador leído con un identificador escrito en el programa.
Por tanto vamos a modificar un poco el programa anterior para que compare el uid leído con el escrito en el programa, y encienda el led rojo o verde según el resultado.
Copie el archivo anterior a un archivo nuevo verify_rfid.py
y modificarlo para el código siguiente:
Edita la línea RFID_UID
para poner el identificador de su etiqueta 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
¡Todo lo que tienes que hacer es iniciar el programa y probar!
A continuación, puede adaptar el código para sus propios proyectos, como crear una cerradura inteligente o incluso una máquina de discos con etiquetas RFID.
Para obtener información, puede obtener todo el código para este tutorial en el Github de Raspbian France.
En el siguiente tutorial, veremos cómo controlar un servomotor con la Raspberry Pi.