RFID com Raspberry Pi e Python

raspberry pi

Introdução

 

Identificação por radiofrequência, como podemos chamar o RFID, não é uma tecnologia recente e há especulações que já era utilizada na segunda guerra mundial. É a comunicação por sinal de rádio onde um dos dispositivos é energizado e fica ativo, e o outro lado, a TAG (chaveiro ou cartão RFID), não necessariamente é energizado. Quando aproximados, realizasse a captura da informação do TAG, tecnologia essa que deu o passo inicial para NFC (Near Field Communication).

 

Utilizando o computador de bolso mais popular, o Raspberry Pi, a linguagem de programação Python, que é o canivete suíço para prototipar ideias, e um módulo RFID comercial vamos ver como é simples, direto e didático fazer a comunicação via SPI com essa turma. 

 

Não conhece muito bem o Raspberry Pi? Veja o artigo Raspberry Pi do Thiago Lima. E como vamos usar o Raspberry Pi B com Linux, para conhecer melhor essa dupla veja o artigo A Raspberry Pi e o Linux de Vinicius Maciel. Se isso não te assusta, continue lendo o artigo.

 

 

Módulo RFID

 

O Mifare MFRC522 (NXP RC522), ou comercialmente RFID-RC522, é um dos mais populares leitores RFID do mercado, no modo comprar, ligar e usar, uma excelente forma para prototipar.

 

O RFID-RC522 já vem pronto para ser utilizado, fazendo uso da comunicação SPI. Essa comunicação é nova pra você? Então recomendo o artigo Comunicação SPI do Francesco Sacco. Além disso o CI RC522 possui os recursos I2C e UART para comunicação e realiza comunicação RFID a 13.56 MHz.

 

Na figura 1 temos uma imagem do nosso módulo leitor RFID (RFID-RC522) e junto o que o acompanha na compra, um chaveiro e um cartão.

 raspberry pi

Figura 1 - Módulo RFID com cartão e chaveiro

 

Segue a relação dos pinos disponíveis para alimentação e comunicação na figura 2.

 

raspberry pi

Figura 2 - Relação de pinos de alimentação e comunicação do módulo RFID

 

 

Esquema de ligação

 

Na sequência, na figura 3, o esquema de ligação do módulo RFC522 com o Raspberry Pi.

 

raspberry pi

Figura 3 - Esquema de ligação do módulo RFID com o GPIO do Raspberry Pi B

 

Apenas alguns detalhes no esquema de ligação é a alimentação 3,3V utilizando o pino 1 do barra de pinos de GPIO, e a comunicação SPI, sendo o SDA no módulo RFID o sinal CS (Chip Select) ou SS (Slave Select), que depende da adoção do fabricante, sendo o correto uso do nome SDA para comunicação I2C.

 

 

Configuração do ambiente host

 

  • Board: Raspberry Pi B;
  • Distribuição: Raspbian – Debian Wheezy (2014-01-07);
  • Kernel 3.12.22;
  • Python 2.7.

 

 

Preparando o ambiente

 

Agora a parte legal, vamos preparar o Raspbian para liberar o uso device SPI no Linux, resolver as dependências de software e testar com uma aplicação padrão de teste. Para isso, o primeiro passo é verificar se o dispositivo SPI está liberado, ou melhor, se o módulo do kernel subiu para fornecer o acesso.

[email protected] ~ $ ls /dev/spi*
ls: cannot access /dev/spi*: No such file or directory 
[email protected] ~ $ lsmod | grep spi_bcm*
[email protected] ~ $ dmesg | grep spi
[email protected] ~ $ 

 

Se na sua Raspberry Pi obteve as mesmas saídas acima, o módulo SPI está desabilitado. Caso contrário, pule a próxima etapa. No Raspbian isso quer dizer que ele está no black list do modprobe, e para habilitar o módulo SPI siga o passo a passo abaixo e reinicie a Raspberry Pi.

[email protected] ~ $ sudo vim /etc/modprobe.d/raspi-blacklist.conf

# blacklist spi and i2c by default (manu users don't need them)

#blacklist spi-bcm2708
blacklist i2c-bcm2708

:wq
[email protected] ~ $ sudo reboot

 

Verificando novamente:

[email protected] ~ $ ls /dev/spi*
/dev/spidev0.0 /dev/spidev0.1
[email protected] ~ $ lsmod | grep
spi_bcm spi_bcm2708 4808 0
[email protected] ~ $ dmesg | grep spi
[ 5.078766] bcm2708_spi bcm2708_spi.0: master in unqueued, this is deprecated
[ 5.230200] bcm2708_spi bcm2708_spi.0: SPI Controller at 0x2020400 (irq 80)
[email protected] ~ $ 

 

Para ler/escrever no barramento SPI precisamos de um módulo no Python. Um que possui rotinas e funções bem escritas é o SPI-Py do Louis Thiery. Vamos clonar o repositório do GitHub, compilar e instalar. Mas antes, é necessário confirmar se possui o python-dev. Você pode verificar com o comando abaixo: 

[email protected] ~ $ dpkg –list | grep -E 'ii.*python.*dev'
ii python-dbus-dev 1.1.1-1 all main loop integration development files
ii python2.7-dev 2.7.3-6+deb7u2 armhf Headers files and static library for Python (v2.7) 

 

No caso acima temos instalado. Caso não aparecesse python2.7-dev ou python-dev, poderia executar a sua instalação com o comando abaixo: 

[email protected] ~ $ sudo apt-get update && sudo apt-get install python-dev -f 

 

Agora vamos clonar o repositório do SPI-Py, acessar o diretório e instalar. 

[email protected] ~ $ git clone https://github.com/lthiery/SPI-Py spi-py
Cloning into 'spi-py'...
remote: Counting objects: 64, done.
remote: Total 64 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (64/64), done.
[email protected] ~ $
[email protected] ~ $ cd spi-spy
[email protected] ~/spi-py $ sudo python setup.py install
running install
running build
running build_ext
building 'spi' extension
…
running install_lib
copying build/lib.linux-arm6l-2.7/spi.so → /usr/local/lib/python2.7/dist-packages
running install egg_info
Writing /usr/local/lib/python2.7/dist-packages/SPI_Py-1.0.egg-info
[email protected] ~/spi-py $

 

O módulo para comunicação via SPI está pronto. Agora vamos baixar de outro repositório um código exemplo pronto para comunicar com RC522, que depende do módulo SPI-Py para funcionar, no caso é o MFRC522-python que, além do SPI-Py, utiliza também o RPi.GPIO

[email protected] ~/spi-py $cd ~
[email protected] ~ $ mkdir -p python_rfid
[email protected] ~ $ cd python_rfid
[email protected] ~/python_rfid $ git clone https://github.com/mxgxw/MFRC522-python
Cloning into 'MFRC522-python'...
remote: Counting objects: 60, done.
remote: Total 60 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (60/60), done.
[email protected] ~/python_rfid $ cd MFRC522-python
[email protected] ~/python_rfid/MFRC522-python $

 

 

Testando a aplicação RFID

 

Dos arquivos clonados do repositório e que estão no diretório MFRC522-python, o importante neste momento é saber que toda programação e tratamento do SPI com o RF522 está no arquivo MFRC522.py, e que no arquivo Read.py há um exemplo pronto para testar a comunicação e o Write.py é outro exemplo para gravação no RC522. 

[email protected] ~/python_rfid/MFRC522-python $ sudo python Read.py
Welcome to the MFRC522 data read example
Press Ctrl+C to stop.

 

No momento que aproximo o cartão: 

[email protected] ~/python_rfid/MFRC522-python $ sudo python Read.py
Welcome to the MFRC522 data read example
Press Ctrl+C to stop.
Card detected
Card read UID: 227, 41, 93, 116
Size: 8
Sector 8 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
^Cctrl+C captured, ending read.

 

Agora, vamos utilizar o módulo MFRC522.py e criar uma aplicação nossa baseada no Read.py. Primeiro vou abrir o código do Read.py e comentá-lo, logo em seguida irei escrever nossa aplicação (veja os comentários para mais detalhes). 

#!/usr/bin/env python
# -*- coding: utf8 -*-

import RPi.GPIO as GPIO
import MFRC522
import signal

continue_reading = True

"""
Função que é chamada assim que Ctrl+C é pressionado
"""
# Capture SIGINT for cleanup when the script is aborted
def end_read(signal,frame):
    global continue_reading
    print "Ctrl+C captured, ending read."
    continue_reading = False
    GPIO.cleanup()

"""
Responsável por capturar o SIGINT gerado (Ctrl+C) e chamar a função end_read
"""
# Hook the SIGINT
signal.signal(signal.SIGINT, end_read)

"""
Criando um objecto da class MFRC522
"""
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()

# Welcome message
print "Welcome to the MFRC522 data read example"
print "Press Ctrl-C to stop."

"""
Entra em um loop infinito baseado na variavel global 🙁 continue_reading, que ira mudar o seu valor assim que
a aplicação for interrompida e a função end_read() irá setar como False
"""
# This loop keeps checking for chips. If one is near it will get the UID and authenticate
while continue_reading:
    """
    Maioria das chamadas abaixo falam por si só, irei comentar as que achar interessante
    """
    # Scan for cards    
    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

    # If a card is found
    if status == MIFAREReader.MI_OK:
        print "Card detected"
    
    """
    Agora iremos receber o ID RFID e o status, e o nome Anticoll é baseado no proprio protocolo
    no Registrador ErrorReg bit3 verifica se houve colisão dos dados
    """
    # Get the UID of the card
    (status,uid) = MIFAREReader.MFRC522_Anticoll()

    
    # If we have the UID, continue
    if status == MIFAREReader.MI_OK:

        # Print UID
        print "Card read UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3])
    
        """
        Uma camada de segurança a mais, onde além de verificar o ID que recebemos podemos enviar a key dos chaveiros e tags
        e aguardar a autenticação
        Veja no datasheet MF1S70yyX.pdf Pagina: 11 - 8.6.3 Sector trailer
        E as rotinas para esta checagem segue abaixo.

        Usando a key abaixo é a chave de 6 bytes utilizada para 
        autenticar a comunicação maneira esta usando o MFAuthent 
        endereço 0x60 a 0x61

        OBS: Não irei utilizar isso em nossa aplicação!
        """
        # This is the default key for authentication
        key = [0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]
     
        # Select the scanned tag
        MIFAREReader.MFRC522_SelectTag(uid)

        """
        Aqui é enviado a key do "fabricante", modo de autenticação 0x60 ou 0x61, Block Address e nosso uid
        """
        # Authenticate
        status = MIFAREReader.MFRC522_Auth(MIFAREReader.PICC_AUTHENT1A, 8, key, uid)

        # Check if authenticated
        if status == MIFAREReader.MI_OK:
            MIFAREReader.MFRC522_Read(8)
            MIFAREReader.MFRC522_StopCrypto1()
        else:
            print "Authentication error"

 

O código foi exposto e adicionei alguns comentários para facilitar. As informações detalhadas sobre o protocolo e o modo de autenticação pode ser abstraído no datasheet do cartão RFID. No meu caso o cartão é um MIFARE Classic 4k e do código do MFRC522.py.

 

Agora vamos à nossa aplicação rfid_embarcados.py, onde utilizaremos a estrutura pronta do Read.py, removendo a parte de autenticação. 

#!/usr/bin/env python
# -*- coding: utf8 -*-

import os
import sys
import signal

"""
    Lista com relação dos IDs autorizados 
"""
acessos_autorizados = [[227,41,93,116,227], [201,39,92,115,201], [225,95,12,103,225]]

"""
    Vou tentar importar os modulos abaixo, caso algum problema ocorra,
    sera lançada a exceção na sequencia
"""
try:
    import MFRC522
    import RPi.GPIO as GPIO
except ImportError as ie:
    print("Problema ao importar modulo {0}").format(ie)
    sys.exit()

"""
    Funcao que irá garantir que o root ou usuario com permissão de
    super-usuario irá executar a aplicação
"""
def check_user():
    if os.geteuid() != 0:
        print("Você deve executar o programa como super-usuario!")
        #print "Exemplo:\nsudo python {0}".format(os.path.realpath(__file__))
        print("Exemplo:\nsudo python {0}").format(__file__)
        sys.exit()


"""
    Captura o sinal gerado, no caso o que nos interessa é o sinal
    SIGINT(Interrupção do Terminal ou processo) e irá encerrar a aplicação
"""
def finalizar_app(signal,frame):
    global continue_reading
    print("\nCtrl+C pressionado, encerrando aplicação...")
    continue_reading = False
    GPIO.cleanup()


continue_reading = True

def main():

    check_user()

    # Handler do sinal SIGINT
    signal.signal(signal.SIGINT, finalizar_app)

    # Cria o objeto da class MFRC522
    MIFAREReader = MFRC522.MFRC522()

    print("Portal Embarcados - Python é sucesso!")
    print("Pressione Ctrl-C para encerrar a aplicação.")

    while continue_reading:
        # Scan for cards    
        #(status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
        MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)


        # Get the UID of the card
        (status,uid) = MIFAREReader.MFRC522_Anticoll()

        # If we have the UID, continue
        if status == MIFAREReader.MI_OK:
            if uid in acessos_autorizados:
                    print("Acesso liberado!")
            else:
                    print("Sem acesso!")




if __name__ == "__main__":
    main()

 

No caso, para um controle simples, criei uma lista chamada acessos_autorizados=[] que contem listas de ID’s RFID. Na linha 73 verifico se o uid recebido está contido ou não da minha lista. Em caso positivo, irá imprimir “Acesso Liberado!”, caso contrário, “Sem Acesso!”. Agora vamos ver nossa aplicação em funcionamento.

[email protected] ~/rfid-python $ sudo python rfid_embarcados.py 
Portal Embarcados - Python é sucesso!
Pressione Ctrl-C para encerrar a aplicação.
Acesso liberado!
Acesso liberado!
Acesso liberado!
Sem acesso!
Acesso liberado!
^C
Ctrl+C pressionado, encerrando aplicação...

 

A aplicação funcionou como previsto, porém, algumas implementações novas surgiram na aplicação como a função check_user() e um except ImportError. Nesses casos, estou garantindo que a aplicação só deve continuar se estiver sendo executada com permissão de super-usuário e é obrigatório ter MFRC522 e RPi.GPIO para prosseguir. Agora vamos ver o que ocorre se executar a aplicação como usuário comum e logo em seguida, executar se não tivermos o MFRC522.py. 

[email protected] ~/rfid-python $ python rfid_embarcados.py 
Você deve executar o programa como super-usuario!
Exemplo:
sudo python rfid_embarcados.py
[email protected] ~/rfid-python $ 
[email protected] ~/rfid-python $ sudo python rfid_embarcados.py 
Problema ao importar modulo No module named MFRC522
[email protected] ~/rfid-python $

 

Para melhorar essa aplicação, poderia utilizar um banco de dados que contém os IDs com alguns nomes e informações, realizar consultas e, em caso de sucesso, poderia acionar algum GPIO e abrir uma porta ou liberar algo.

 

Implemente, invente e faça seus testes e qualquer dúvida envie pelos comentários.

 

 

Conclusão

 

Vimos como é fácil realizar a configuração do módulo ao Raspberry Pi B, como é prático preparar o Linux com Python e realizar os testes, e como é simples utilizar o módulo que baixamos para criar uma aplicação própria para ler os dados RFID. E utilizando um arquivo exemplo mais os recursos do python conseguimos criar uma aplicação simples e com recursos interessantes, como por exemplo verificar se é o root que está executando e se o módulo existe.

 

 

Referências

 

http://www.nxp.com/documents/data_sheet/MFRC522.pdf
https://github.com/lthiery/SPI-Py
https://github.com/mxgxw/MFRC522-python
https://pypi.python.org/pypi/RPi.GPIO
https://www.nxp.com/documents/data_sheet/MF1S70YYX.pdf

 

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Cleiton Bueno
Proprietário da B2Open onde oferecemos consultoria, treinamentos e desenvolvimento em Sistemas Embarcados. Entusiasta a filosofia open-source, mais de 10 anos de experiências em Linux e FOSS. Em sistemas embarcado do firmware baremetal ao Linux Embedded, e há aproximadamente 8 anos desenvolvendo em (C, Python, Qt e muito Shell Script), além de profiling, hardening e tuning para targets com Linux Embarcado. Graduado em Engenharia da Computação pela UNICEP com ênfase em robótica e sistemas embarcados.

65
Deixe um comentário

avatar
 
18 Comment threads
47 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
17 Comment authors
Vinicius MacielRaphaelJorgeMatheus George AbelCleiton Bueno Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Raphael
Visitante
Raphael

Pessoal, boa tarde!

Já segui várias instruções e sempre acabo no mesmo lugar. Ao executar qualquer script que envolva o módulo MFRC22, recebo o erro:

TypeError: function takes exactly 2 arguments (1 given).

Alguma ideia ou procedimento que posso tomar para solucionar isso?

Obrigado.

Vinicius Maciel
Membro
Jorge
Visitante
Jorge

Gostei do artigo, obrigado e parabens!!

Matheus George Abel
Visitante
Matheus Abel

Olá Cleiton, estou tentando implementar este artigo em uma BeagleBone Black, acha que é possível? Há alguma diferença significativa na parte de configuração dos módulos do kernel para comunicação SPI? Obrigado.

tiago
Visitante
tiago

Olá, gostaria de saber se é possível e como realizar a leitura da RFID e consulta em um banco de dados que esta em um servidor, tudo isso via rede.

Henrique Freitas
Visitante
Henrique Freitas

1 ano depois... rsrs
Ficou show o artigo, queria tirar um duvida, seria possivel ligar dois Leitor RFID na mesma Raspberry?

Erivando Sena
Visitante
Erivando Sena

@disqus_KeXn2J9V3p:disqus Sim é possível!
Talvez esta resposta esteja chegando tarde, mas, pode ser que outras pessoas estejam com a mesma dúvida, por isso, eu apresento a solução neste link: https://github.com/erivandoramos/TwoRC522RPi

rwd
Visitante
rwd

Oi Cleiton

já li todos estes comentários, e não consigo entender porque não consigo ler o UID correto , sempre recebo esses pares de números esquisitos [177, 26, 232, 158, 221] ao invés do hexadecimal 9EE81AB1 que seria o decimal 2666011313 correto da minha Tag, alguma sugestão? por acaso eu teria de fazer algum ajuste no script MFRC522.py ?

Javier Thevenet
Visitante
Javier Thevenet

hola, quisiera hacer una consulta sobre el modulo MFRC522. Segui todos los pasos de este post

pero cuando ejecuto Read.py no detecta la tarjeta ni el llavero.He probado con varias tarjetas y llaveros. Verifique conexiones y todos los pasos.
Alguna sugerencia para que pueda hacer funcionar el modulo? Gracias!

Cleiton Bueno
Visitante

Hola javier. Su tarjeta RFID también se MIFARE? ¿Qué error?

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Cleiton estou querendo escrever em uma tag rfid, você pode informar como ou conhece algum site que descreva sobre isto?

Cleiton Bueno
Visitante

Olá Bruno,

recomendaria você ler o artigo do Henrique Puhlmann (http://embarcados.com.br/introducao-a-tecnologia-de-identificacao-rfid/) ele aborda com muitos detalhes o RDIF e principalmente as classes e você terá a resposta para as duas perguntas sobre ler e/ou escrever em um ou o que são os números que aparecem.

Abraço.

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Cleiton, você sabe me dizer o que representa cada número desse UID "227, 41, 93, 116" ?

Cleiton Bueno
Visitante

Recomendo a leitura no caso do artigo usei este da MIFARE:

http://www.nxp.com/documents/data_sheet/MF1S70YYX.pdf

E este outro link:
http://www.corerfid.com/Files/077%20Mifare%20Codes%20FAQ.pdf

Pra você entender o que é UID e quando/como pode modificá-lo de acordo com o modelo que possuir.

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Parceiro segui os passos do artigo e deu tudo certo até o momento em que tentei a identificação da tag rfid, onde não acontece nada. Só fica naquele parte "Welcome..."
Tenho o raspberry b+, os pinos da da comunicação SPI pelo que pesquisei são em lugares diferentes do raspberry b, será que pode ser isto?

Cleiton Bueno
Visitante

Olá Bruno, sim o GPIO da Raspberry PI B+ possui mais pinos, porém, fisicamente o SPI e os pinos utilizados aqui estão na mesma localização, veja a imagem do link a seguir:

http://data.designspark.info/uploads/images/53bc258dc6c0425cb44870b50ab30621

Se você verificar tanto no Raspberry PI B quando na Raspberry PI B+ são utilizados os pinos (19,21,23) e (22,24), e estes pinos "físicos" estão na mesma ordem no RaspB+, porém o GPIO é estendido um pouco mais.

Você conectou olhando na descrição do SPI do novo GPIO?

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Realmente Cleiton, a posições dos pinos são as mesmas. E sim, conectei conforme a SPI do novo GPIO. Provavelmente o problema não será esse. O que acha que pode ser? Outra coisa tem a possibilidade de minha tag estar vazia?

Cleiton Bueno
Visitante

Você esta executando como super-usuário(root)? Tentou o segundo exemplo rfid_embarcados.py?

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Boa noite amigo, primeiramente muito obrigado pela atenção. Estou executando conforme esta no seu artigo "sudo python Read.py". O segundo exemplo não tentei. Mas esta engraçado parece que não estabeleceu nenhuma conexão entre o rfid e raspberry pois não esboça nenhuma mensagem, nem de erro. Só fica no "Welcome..."

Cleiton Bueno
Visitante

Que isso Bruno.

Então, se esta iniciando e parando em:

print "Welcome to the MFRC522 data read example"
print "Press Ctrl-C to stop."

Esta aguardando a leitura, se realmente as ligações estão corretas e continuidade da conexão OK, pode ser algo com cartão ou chaveiro RFID, tem outro para testar ou como ver se estes ae esta OK?

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Então Cleiton as ligações fiz conforme seu artigo, creio que está ok!
Testei os dois o cartão e o chaveiro que veio com o produto e não deu certo. Tenho outros porém são de 125 khz. 7
Pois é Cleiton, não sei como ver se estão "Ok", você tem alguma ideia?
Obs: testei o segundo exemplo e ele fica aguardando a leitura, sem sucesso!

Cleiton Bueno
Visitante

Mas o modulo RFID é um MFRC522? Ou qual você esta usando?

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Estou usando o mesmo do seu artigo o MFRC522! Falei do 125khz pois estou com outra antena rfid aqui. Mas resolvi usar o C522 por ter encontrado seu artigo e não precisar de uma protoboard!

Cleiton Bueno
Visitante

Estou sem parâmetros/recursos para falar pra voce Bruno.
Tem como você tirar uma foto da placa + o modulo instalado? Fazer upload em algum lugar e passar o link.

PS: Existe algum /dev/spi*?

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Segue o link do meu protótipo!comment image

E sim, existe o /dev/spi* .

Cleiton Bueno
Visitante

Gostei que conseguiu usar as mesmas cores na ligação 🙂

Bruno, copie o código abaixo, salve como teste.py dentro do diretório do MFRC522-python onde esta o Read.py e Write.py.

http://pastebin.com/kfkKUWvp

E execute com:
$ sudo python teste.py

PS: E mostre a saída pra mim, se der erro também, porque eu adaptei mas não testei.

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Segue a img do codigo em execução. Ele entra em modo de loop nesse Type e Status.
Tirei uma foto porque estou acessando remotamente do vnc e o print não estava dando xD.

Ps: Deu erro no momento de executar o código porém já arrumei. E antes que pergunte, ou não hehe, eu testei aqui com o cartão e a tag e não esboçou nem um resultado.

Cleiton Bueno
Visitante

Baseado na informação modulo MFRC522.py

https://github.com/mxgxw/MFRC522-python/blob/master/MFRC522.py

Nas linhas 36 a 38 podemos ver que 2 é ERRO, quando você passa o cartão ele retornar 2 tambem?
Tenta adicionar um time.sleep(0.25) e la em cima coloca um import time

Pode-se tentar outros parâmetros do próprio modulo pra tentar chegar a algo mais concreto.

O Cartão RFID e chaveiro você testou ou tem como testar pra ver se estão ok? Porque eu tenho um chaveiro que nunca funcionou.

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Não entendi muito bem quando você disse: "Nas linhas 36 a 38 podemos ver que 2 é ERRO".

Mas assim, quando passo o cartão e o chaveiro não acontece nada, o sistema continua em loop como se não houvesse nenhuma intervenção.

Qual a necessidade do time.sleep?

Pois é, com relação a testar, eu não sei como realizar o procedimento para verificar a integridade do cartão e do chaveiro, já dei umas pesquisadas aqui mas não achei nada concreto.

Obrigado pela atenção Cleiton!

Cleiton Bueno
Visitante

Na ultima imagem que você passou, o status vale 2, nas linhas 36, 37 e 38 do MFRC522.py tem a variável que equivale a este numero. MI_OK = 0 MI_NOTAGERR = 1 MI_ERR = 2 Sobre o time.sleep() é para colocar um "delay" nesse loop e não ficar direto, ae lá parte superior do código que enviar você coloca lá. import time E dentro do while continue_reading: e antes do (status,uid) = MIFAREReader.MFRC522_Anticoll(). eu colocaria um time.sleep(0.25) Sobre demais testes, estou ficando sem alternativas, porque esse mesmo passo a passo dois amigos fizeram e fluiu bem, e mais uma galera… Leia mais »

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Pois é Cletion, também estou sem saber onde recorrer e a que recorrer. E precisava resolver logo, pois esse protótipo é pro meu tcc que tem que estar pronto ate julho!
A possibilidade de meu modulo estar com defeito não existe né? Pelo fato da luz estar acendendo.

E com relação ao Arduíno, não tenho ele :/.

Mas obrigado mais uma vez pela atenção,

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Você conhece algum bom fórum que posso expor esse meu problema?

Roberto Falk
Visitante
Roberto Falk

Oi Bruno, alguma evolução? Estou enfrentando o mesmo problema com meu rasp B+.

Att.,
Roberto

Cleiton Bueno
Visitante

Olá Roberto, você esta com o mesmo problema (erro) que o Bruno? Quer reportar a saida aqui?

Abraço

Roberto Falk
Visitante
Roberto Falk

Estou exatamente com o mesmo problema do Bruno, ao aproximar o cartão ou o chaveiro, nada acontece. Estranho que pelo que li nos foruns, parece que o problema so ocorre com rasp pi B+. Obrigado!

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Ola Roberto. O meu consegui resolver sim e o problema nem era no código ou em algum passo do artigo que tinha seguido erroneamente , o problema era mal contato do módulo rfid, eu não tinha soldado os pinos com o módulo rc522, com isso não tinha um contato plausível. Depois que soldei, ficou "balaa".

Cleiton Bueno
Visitante

Legal Bruno, que bom que deu certo.
E obrigado por compartilhar a solução 😉

Bruno Oliveira de Faria
Visitante
Bruno Oliveira de Faria

Aguardando respostas suas Cleiton. Estou sem saber o que fazer. Tenho pesquisado aqui mas não encontro nada de concreto pro meu problema!