Use um leitor RFID com o Raspberry Pi.
Comentáriosⓘ 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 é a segunda parte de um arquivo dedicado à descoberta de eletrônicos com o Raspberry Pi. Se você ainda não leu, aconselho que consulte o primeiro tutorial para controlar um LED com o Raspberry Pi.
Seja para sistemas de identificação, gerenciamento de estoque, pagamento ou para automação residencial, os chips RFID são cada vez mais usados.
Neste tutorial, veremos como ler cartões RFID com o Raspberry Pi e um leitor RFID RC522.
Ao final do tutorial, você poderá ler um crachá RFID, verificar se é o esperado e acender um LED verde ou vermelho, dependendo do resultado. Basta adaptar este exemplo básico para o projeto de sua escolha!
O equipamento necessário
Para concluir este tutorial, você precisará dos seguintes materiais:
- Um Raspberry Pi
- A dieta dele
- Cartão microSD
- Um leitor RFID RC522
- Um conjunto de cabos, LEDs, resistores e placas de teste
- Um ferro de solda e solda
Monte o leitor RFID RC522
Ao receber o módulo RFID RC522, você pode ver que ele vem com um conjunto de 2 x 8 pinos. O primeiro passo será, portanto, soldar 8 desses pinos no leitor RFID. Não entre em pânico, soldar é muito fácil!
Portanto, você deve inserir os PINs nos slots fornecidos no cartão RFID e soldá-los com o seu ferro.
Se você nunca soldou, recomendo este excelente guia para aprender a soldar de François de framboise314.fr.
Conecte o leitor RFID e os LEDs ao Raspberry Pi
Antes de prosseguir com a escrita do código que nos permitirá ler os crachás RFID e controlar os LEDs, devemos primeiro conectar todos os componentes ao Raspberry Pi.
Como um lembrete, conectar e desconectar componentes deve sempre ser feito com o Raspberry Pi desligado.
Conecte o leitor RFID RC522 ao Raspberry Pi
O primeiro componente que vamos conectar é o leitor RFID.
Para controlar o leitor RFID usaremos uma biblioteca externa. Infelizmente, isso é escrito com as portas GPIOs inseridas diretamente no código. Isso significa que não podemos configurá-los de forma diferente e que, portanto, somos forçados a usar exatamente as mesmas portas que as fornecidas na biblioteca.
Aqui está uma tabela que lista as portas do leitor e a porta GPIO do Raspberry Pi à qual você precisará conectá-lo.
Como um lembrete, você encontrará um mapa das portas GPIO do Raspberry Pi no primeiro tutorial desta série.
Conecte os LEDs
Após o leitor RFID, vamos conectar os LEDs ao Raspberry Pi.
Vamos fazer uma montagem muito simples. Cada LED terá seu ânodo (a perna alongada) conectado a uma porta GPIO e os dois LEDs terão seu ânodo conectado ao mesmo resistor, ele próprio conectado a uma porta do tipo GPIO Ground do Raspberry Pi.
Portanto, usamos um único resistor para dois LEDs e limitamos o número de cabos.
No final, uma vez que o cartão RFID e os LEDs estejam conectados ao Pi, você deve ter um conjunto semelhante a este.
Escreva o programa para ler um crachá RFID.
Temos um circuito funcional, basta ativar as portas SPI do Raspberry Pi, necessárias para usar o leitor RFID, e escrever o programa que irá ler um crachá RFID.
Como no tutorial anterior, o programa será escrito em Python. Este tutorial não é um curso de Python e iremos apenas explicar brevemente o programa. Se você quiser aprender mais sobre Python, publicamos um curso de Introdução à Programação com Python.
Ative o protocolo SPI do Raspberry Pi
Antes de escrever o programa, vamos habilitar o protocolo SPI em nosso Raspberry Pi para que possamos usar o módulo RFID.
Para ativá-lo, basta executar o comando sudo raspi-config
, no seu Raspberry, em seguida, escolha Interfacing Options
, SPI
, Yes
e finalmente Finish
.
Instale a biblioteca pi-rc522
Último pré-requisito, vamos instalar a biblioteca Python3 "pi-rc522" que permite controlar o reprodutor RC522.
Estaremos usando Pip3, um gerenciador de biblioteca para Python.
Você só precisa executar o comando:
sudo pip3 install pi-rc522
Escreva o programa para ler o identificador de um crachá RFID
Cada crachá RFID possui um identificador único. É lendo esse identificador e comparando-o com uma lista de identificadores autorizados que podemos saber se um emblema está autorizado.
Portanto, vamos escrever um programa que nos permita ler o identificador único de um crachá RFID.
Como fizemos no tutorial anterior, iremos escrever o programa na pasta /home/pi/electronic
(se ainda não o fez, crie a pasta).
Nesta pasta, crie um arquivo read_rfid_uid.py
e coloque o seguinte código nele:
#!/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
Assim que o arquivo for salvo, ele é autorizado para execução com o comando:
sudo chmod +x /home/pi/electronic/read_rfid_uid.py
Agora podemos iniciar o programa chamando-o com o comando:
/home/pi/electronic/read_rfid_uid.py
Cada vez que você passa um crachá RFID na frente do leitor, seu identificador exclusivo será exibido!
Escreva um programa que mostra se um crachá é válido ou não.
Agora que podemos ler o identificador único de um crachá, tudo o que temos que fazer é adaptar o código anterior para comparar o identificador lido com um identificador escrito no programa.
Portanto, vamos modificar um pouco o programa anterior para que compare o uid lido com o escrito no programa e acender o led vermelho ou verde dependendo do resultado.
Copie o arquivo anterior para um novo arquivo verify_rfid.py
e modifique-o para o código abaixo:
Edite a linha RFID_UID
para colocar o identificador da sua 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
Tudo o que você precisa fazer é lançar o programa e testar!
Você pode então adaptar o código para seus próprios projetos, como criar um bloqueio inteligente ou até mesmo uma jukebox usando etiquetas RFID!
Para obter informações, você pode obter todo o código deste tutorial no Github de Raspbian França.
No próximo tutorial, veremos como controlar um servo motor com o Raspberry Pi!