Controle de acesso RFID com Raspberry Pi 20

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:

Se o resultado for o seguinte:

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:

Reinicie o Raspbian e verifique novamente, o resultado deverá ser:

Verifique se o módulo SPI foi carregado corretamente através do comando:

O resultado deverá ser algo semelhante ao abaixo, indicando a comunicação RFID com Raspberry Pi:

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:

Após instalado iremos instalar o pacote Python para comunicação SPI, para isto execute os comandos abaixo:

Programa para leitura de cartão RFID

Primeiramente vamos criar uma pasta chamada leitor-rfid para armazenar nosso projeto, para isto execute o comando:

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:

Abaixo está o código para leitura das Tags RFID.

Salve este arquivo como leitor.py dentro da pasta do nosso projeto e execute através do comando:

Ao aproximar uma tag RFID do módulo, caso o UID esteja na lista CARTOES_LIBERADOS você verá uma mensagem semelhante a abaixo:

Caso contrário será exibida uma mensagem semelhante a esta:

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!

Posts Relacionados

20 Comentários

  1. Projeto muito bom, simples de executar e os outros projetos que eu achei estava faltando alguma coisa.
    Fica a dica para quem quiser usar um rele ou um led ou outra coisa, é só adicionar no começo GPIO.setmode(GPIO.BOARD)
    GPIO.setup(N° da Porta, GPIO.OUT) e adcionar
    GPIO.output(N° da Porta, GPIO LOW) depois do comando if status == LeitorRFID.MI_OK:
    uid = ‘:’.join([‘%X’ % x for x in uid])
    print(‘UID do cartão: %s’ % uid)
    GPIO.output(N° da Porta, GPIO LOW)

    e no final
    time.sleep(.25)
    GPIO.output(N° da Porta, GPIO HIGH)

    1. AMigo, estou iniciando nesse mundo, então poderia me dar um help? gostaria de adicionar uma fechadura eletronica ao projeto, seria mais ou menos por esse caminho? teria como me dar uma luz

      1. Se você utilizar RFID para abrir a porta, sim é este o caminho.

        Hoje em dia muitos prédios residenciais possuem RFID para permitir a entrada dos moradores.

  2. Boa tarde,
    Segui as recomendações mas o máximo que consegui foi ver o led do MFRC522 piscar quando o script Python manda o comando (alterando o valor do sleep) mas nunca um cartão (ou tag) é detectado.
    Plataforma: RPi 3
    #Drivers carregados
    lsmod
    Module Size Used by
    spi_bcm2708 5038 0

    #Dispositivos SPI
    ls -l /dev/spidev0.*
    crw-rw—- 1 root spi 153, 0 Jul 20 17:16 /dev/spidev0.0
    crw-rw—- 1 root spi 153, 1 Jul 20 17:16 /dev/spidev0.1

    uname -a
    Linux raspberrypi 4.1.19-v7+ #858 SMP Tue Mar 15 15:56:00 GMT 2016 armv7l GNU/Linux

    dmesg | grep spi
    [ 7.178040] bcm2708_spi 3f204000.spi: master is unqueued, this is deprecated
    [ 7.178758] bcm2708_spi 3f204000.spi: SPI Controller at 0x3f204000 (irq 80)

    Cheguei a instalar a versão mais recente do driver mas sem sucesso. Voltei então à 2708 (descontinuada) e o cabeamento foi triplamente revisado. Testei com o tag e o cartão que vem no kit (adquirido com vocês) e outros cartões MIFARE 1K que tenho mas nenhum foui reconhecido. Fiz até o downgrade da versão do Jessie para a versão indicada.

    Alguma ideia sobre qual possa ser o problema? Já gastei bem mais horas do que devia pesquisando soluções sobre isto.
    Obrigado.

    Thomas.

  3. Olá
    quando aplico o comando dmesg | grep spi
    nao tenho resposta no terminal, alguem sabe como resolver?
    agradeço

    1. Provavelmente o módulo de SPI não está carregado. Veja a tela de configuração acima como habilitar SPI.

  4. colar a pasta bcm fora da spi

  5. Tem como instalar um display de 4 polegadas que usa as gpio de 1 a 26 junto desse leitor rfid? Tipo, como o display usa as mesmas portas que o leitor precisa, tem como redirecionar as portas? da 27 a 40 tem alguma que seja spi pra conectar o leitor?

    1. Sim, existe outra SPI. Fica entre a 35 e a 40 no RPi 3. Para usar basta alterar o construtor MFRC522.MFRC522() por MFRC522.MFRC522(dev=’/dev/spidev0.1′, spd=1000000)

      Abraço.

      1. e como coloca a ordem dos cabos de 35 e a 40 ?

      2. Por favor me dê um help

        1. Segue tabela de comparação dos pinos do SPI0 e SPI1:

          SPI0 MOSI – GPIO 10 – Pino 19
          SPI0 MISO – GPIO 9 – Pino 21
          SPI0 SCLK – GPIO 11 – Pino 23 (SCK)
          SPI0 CS0 – GPIO 8 – Pino 24 (SDA)
          SPI0 CS1 – GPIO 7 – Pino 26

          SPI1 MOSI – GPIO 20 – Pino 36
          SPI1 MISO – GPIO 19 – Pino 35
          SPI1 SCLK – GPIO 21 – Pino 40 (SCK)
          SPI1 CS0 – GPIO 16 – Pino 36 (SDA)
          SPI1 CS1 – – – –

          1. obrigado pela ajuda brother, eu consegui fazer funcionar no spi1 porem sem um lcd 3.5 acoplado, e quando eu coloquei o lcd pra funcionar, nem mesmo reconhece que está abilitado o spi, aparece essa mensagem ls: cannot access /dev/spi*: No such file or directory, agora não sei o que fazer :/

  6. Olá alguém sabe se roda Java no raspberry? Gostaria de fazer um controle de acesso para portaria do condomínio com rfid porém sou javeiro…

    1. A principio sim, tanto o Oracle Java quando o OpenJDK. Só não sei o que é suportado tudo. Mas vale o teste e depois deixa um comentário aqui pra gente.

  7. ola, parece uma duvida simples, mas sou novato, como acesso como root o txt

    1. sudo nano boot/config.txt

      charley rodrigues santos
  8. Ola, estou tentando ultilizar esse projeto em um controle de acesso, que vai consultar um banco de dados dentro do raspbarry, como estou começando agora… sabem dizer se suporta banco de dados o raspbarry?

    1. Sim, pesquise por LAMP, que será fácil executar a instalação de um webserver com um banco de dados Mysql em seu raspberry. Coisa que 10 min resolve.

      Assim consegue fazer a integração com banco.

  9. Boa noite Alexandre, tudo bem?

    E se eu quiser colocar dois RFID no mesmo raspberry, como fica o esquema?

    Abraços

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *