Lire badge RFID

Use um leitor RFID com o Raspberry Pi.

Atualizada 11 July 2019 - 0 Comentários - , , ,

ⓘ Este artigo pode ter sido parcialmente ou totalmente traduzido usando ferramentas automáticas. Pedimos desculpas por quaisquer erros que isso possa causar.

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:

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.

Módulo RFID soldado RC522
Você provavelmente encontrará conectores retos e curvos. Aconselho você a usar o curvo, mais prático.

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.

Portas GPIO / portas RC522 correspondentes
Conecte as portas do RC522 às portas correspondentes no Raspberry Pi.

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.

Observe, você também pode conectar o RC522 diretamente ao Raspberry Pi sem usar uma breadbord.

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!

Compartilhar
Boletim de Notícias
Autor:
Raspberry Pi FR
Junte-se à comunidade Raspberry Pi
Um computador de $35 já vendeu 10 milhões de cópias
COMPRE A NOVA RASPBERRY PI 4
Tutoriais relacionados
Ligue e desligue um LED com o Raspberry Pi e o Python. Ative a porta serial TTL do Raspberry Pi e verifique se está funcionando. Crie um cluster Raspberry Pi com Docker Swarm Faça piscar o LED verde integrado do Raspberry Pi. Aprenda a programar com Python 3 e Raspberry Pi, curso introdutório.
No Comments
Compartilhar
Inscrição no boletim informativo
Assine a newsletter.
Gostou deste artigo ?
Inscreva-se e mantenha-se informado!