Quantcast
Channel: MakerHero
Viewing all articles
Browse latest Browse all 416

Controle de acesso RFID com Raspberry Pi

$
0
0

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.

 Controle de Acesso com RFID com Raspberry Pi

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.

Raspberry PI 3 GPIO

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.

Conexão módulo RFID Raspberry Pi 3

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.

Habilitar SPI Raspbian

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.

tela2

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


Viewing all articles
Browse latest Browse all 416