Controle de acesso RFID com Raspberry Pi
Leitores e tags RFID (Radio Frequency Identification, ou Identificação por Radiofrequência) costumam ser utilizados para controle de acesso, identificação de pessoas e equipamentos, seja por meio de crachás ou etiquetas aplicadas à produtos. Neste post vamos ver como utilizar o módulo RFID com Raspberry Pi, criando um controle de acesso para o seu projeto.
No Raspbberry Pi a comunicação do leitor RFID RC522 é feita através da interface SPI (Serial Peripheral Interface). O SPI utiliza comunicação síncrona, full duplex, utilizando o modelo de comunicação mestre-escravo. Na imagem abaixo é possível observar quais são os pinos correspondentes ao SPI na GPIO do Raspberry Pi 3, eles estão destacados com a cor roxa.
Conexão módulo RFID com Raspberry Pi
Na tabela abaixo está descrito o pino do módulo RFID e seu respectivo pino/GPIO. Siga o esquema de conexão mostrado na tabela para utilizar o RFID com Raspberry Pi 3. Atenção, a tensão do módulo é de 3.3 volts.
Preparando o ambiente
Esse passo a passo é para o Raspbian Jessie versão 2016-03-18 (download), versões após esta release estão com problemas na interface SPI, e versões do Wheezy não suportam Device Tree, usado no exemplo abaixo. Leia mais sobre Device Tree na documentação do Raspberry. Caso você deseje configurar outra versão do Raspbian siga o tutorial da documentação do SPI.
O Raspbian vem com SPI desabilitado por padrão, para verificar se está ou não habilitado vamos executar o comando a seguir:
ls /dev/spi*
Se o resultado for o seguinte:
ls: cannot access /dev/spi*: No such file or directory
Nesse caso devemos habilitar o SPI. Para habilitar o SPI no Raspbian acesse o Menu > Preferences > Raspberry Pi Configuration e na aba Interface habilite SPI. Clique em OK.
Em seguida, no seu editor de texto preferido abra o arquivo /boot/config.txt (como root) e adicione a seguinte linha:
dtoverlay=spi-bcm2708
Reinicie o Raspbian e verifique novamente, o resultado deverá ser:
/dev/spidev0.0 /dev/spidev0.1
Verifique se o módulo SPI foi carregado corretamente através do comando:
dmesg | grep spi
O resultado deverá ser algo semelhante ao abaixo, indicando a comunicação RFID com Raspberry Pi:
[ 6.240564] bcm2708_spi 3f204000.spi: master is unqueued, this is deprecated [ 6.241262] bcm2708_spi 3f204000.spi: SPI Controller at 0x3f204000 (irq 80)
Para utilizar o módulo RC522 no Python necessitamos instalar alguns componentes antes de começar a programar. Primeiramente iremos instalar o pacote python-dev através do comando:
sudo apt-get install python-dev
Após instalado iremos instalar o pacote Python para comunicação SPI, para isto execute os comandos abaixo:
git clone https://github.com/lthiery/SPI-Py.git cd SPI-Py sudo python setup.py install
Programa para leitura de cartão RFID
Primeiramente vamos criar uma pasta chamada leitor-rfid para armazenar nosso projeto, para isto execute o comando:
mkdir -p /home/pi/leitor-rfid && cd /home/pi/leitor-rfid
Após criar a pasta onde armazenaremos nosso projeto, iremos fazer download do arquivo para fazer comunicação com o módulo RC522 através do comando:
wget https://raw.githubusercontent.com/mxgxw/MFRC522-python/master/MFRC522.py
Abaixo está o código para leitura das Tags RFID.
#!/usr/bin/env python # -*- coding: utf8 -*- import time import RPi.GPIO as GPIO import MFRC522 # UID dos cartões que possuem acesso liberado. CARTOES_LIBERADOS = { '4F:FD:2F:0:9D': 'FilipeFlop', '3C:2F:4F:0:2D': 'Teste', } try: # Inicia o módulo RC522. LeitorRFID = MFRC522.MFRC522() print('Aproxime seu cartão RFID') while True: # Verifica se existe uma tag próxima do módulo. status, tag_type = LeitorRFID.MFRC522_Request(LeitorRFID.PICC_REQIDL) if status == LeitorRFID.MI_OK: print('Cartão detectado!') # Efetua leitura do UID do cartão. status, uid = LeitorRFID.MFRC522_Anticoll() if status == LeitorRFID.MI_OK: uid = ':'.join(['%X' % x for x in uid]) print('UID do cartão: %s' % uid) # Se o cartão está liberado exibe mensagem de boas vindas. if uid in CARTOES_LIBERADOS: print('Acesso Liberado!') print('Olá %s.' % CARTOES_LIBERADOS[uid]) else: print('Acesso Negado!') print('\nAproxime seu cartão RFID') time.sleep(.25) except KeyboardInterrupt: # Se o usuário precionar Ctrl + C # encerra o programa. GPIO.cleanup() print('\nPrograma encerrado.')
Salve este arquivo como leitor.py dentro da pasta do nosso projeto e execute através do comando:
python leitor.py
Ao aproximar uma tag RFID do módulo, caso o UID esteja na lista CARTOES_LIBERADOS você verá uma mensagem semelhante a abaixo:
Aproxime seu cartão RFID Cartão detectado! UID do cartão: 4F:FD:2F:0:9D Acesso Liberado! Olá FilipeFlop.
Caso contrário será exibida uma mensagem semelhante a esta:
Aproxime seu cartão RFID Cartão detectado! UID do cartão: 6B:4:FE:E5:74 Acesso Negado!
Para descobrir o UID da sua tag basta aproximá-la do leitor RFID e esperar a mensagem de acesso negado. Após edite o arquivo leitor.py e adicione o UID na lista CARTOES_LIBERADOS.
Gostou? Ajude-nos a melhorar o blog atribuindo uma nota a este tutorial (estrelas no final do artigo) e visite nossa loja FILIPEFLOP!
Site: Blog FILIPEFLOP