Configurar o leitor RFID MFRC522 (RC522) no Raspberry Pi

rpi_and_rc522

Pra variar, mais um projeto com Raspberry Pi que pego e o procedimento não é trivial. Tem os passos tradicionais que o colocam pra funcionar em uma RPI 1 sem maiores problemas e os passos adicionais, que permitem seu uso no Raspberry Pi 2. Vou descrever o processo e quando forem os passos adicionais, aviso. Desse modo, você poderá parar tão logo a versão 1 do seu RPi esteja configurado ou então seguir adiante para os próximos passos, caso deseje configurar o RC522 no RPi 2.

Atualizando o sistema do Raspberry

Não importa se é uma imagem que você acabou de baixar, siga esse procedimento para garantir que o processo seja o mesmo descrito nesse post. É bom que você preceda mantendo tudo atualizado para a configuração adequada, portanto recomendo que faça isso:

Isto é, você atualiza os repositórios, então faz uma atualização do sistema e posteriormente o reinicia. Pra mim esse processo foi fundamental na Raspberry Pi 3, que não estava achando o WiFi com a imagem padrão. Mas isso também pode ajudar a previnir outros tipos de erros, portanto, é extremamente recomendado.

 

Barramento SPI




O barramento SPI (ou, Serial Peripheral Interface) é um dos tantos barramentos seriais disponíveis. Em seu comportamento, tenho uma visão de que ele se assimila ligeiramente ao RS485 por ter um master e vários slaves em uma rede. A maior diferença é que ele serve para comunicação no barramento do hardware, mas não só isso.

Em displays ele é grandemente difundido e também é utilizado em comunicação com cartão de memória. O comportamento normal é a comunicação full-duplex entre master-slave, tendo apenas um master.

Quando escravo, ele recebe sinal de clock e quando em mestre, ele gera o sinal. Nesse caso, ele precisa de um gatilho para habilitar o periférico que fará a comunicação e é aí que começamos falar de Raspberry.

Barramento SPI no Raspberry

As conexões são as mesmas para as diferentes versões do RPi, porém como existem variações do número de pinos de GPIO, as conexões ficam mais ao centro ou mais à borda.

Uma característica interessante do Raspberry é que ele não suporta comunicação com slaves. Ao contrário, suporta apenas master e o mais interessante – suporta 2 dispositivos master. Logo você já deve ter imaginado; 2 dispositivos, 2 gatilhos. E assim o é. Se você olhar a imagem de pinout, verá os gatilhos CE0 e CE1. Esses gatilhos funcionam de forma simples, bastando levantar ou baixar o nível lógico. Desse modo, qualquer pino serviria como gatilho, mas considere que bibliotecas já tem um endereçamento pré-definido.

Habilitar o barramento SPI no Raspberry




Não, o barramento não está disponível por padrão. Será necessário habilitá-lo manualmente ou da maneira mais prática, através do programa ‘raspi-config’.

Menu do programa raspi-config
Menu do programa raspi-config

No próximo menu, basta habilitar o SPI:

Segundo menu do raspi-config
Segundo menu do raspi-config

Pra resumir, alguns questionamentos serão feitos. Apenas confirme (iniciar durante o boot, bla,bla,bla…). Ao término, quando selecionar ‘Finish’, ele perguntará se deve reiniciar. Confirme também.

Baixar o programa para testes

Primeiro de tudo, precisamos testar. Depois cada um implementa como quiser, mas para o teste recomendo algo bem simples, como essa belezinha escrita em Python. Mas calma, não acabou por ai; antes de executá-lo será necessário instalar essa outra coisinha.  Sugiro que faça tudo via git mesmo. Ao clonar, entre no diretório SPI-Py e como root instale a dependência e execute a instalação:

Depois disso, sugiro que faça um reboot. Ao iniciar novamente, entre no diretório MFRC522-python e experimente fazer a leitura:

Hum? Ah, é. Faltou o wiring, vamos lá.

Wiring do RPi 1
Wiring do RPi 1
Wiring do RPi 2
Wiring do RPi 2

Se você tem o RPi 1, parabéns, seu trabalho terminou. Se você tem o RPi 2, acomode-se um pouco mais.

Device tree

Nas versões mais atuais dos sistemas para Raspberry, o Device Tree é utilizado por padrão para alocação de recursos e carga de módulos, porém esse recurso não é 100% integrado com o sistema e barramentos como o I²C, SPI e I²S precisam ser instanciados. Para tal, forçamos a carga no boot, modificando o arquivo /boot/config.txt. Apenas adicione a linha a seguir ao final do arquivo:

Muito fácil até aqui, não? Ótimo, porque ainda tem mais trabalho pela frente.

Baixar a última versão da biblioteca da Broadcom BCM 2835

A última versão disponível na publicação desse post é a 1.50, disponível nesse link, mas você pode visitar o site aqui e bisbilhotar se tem algo novo.





Após baixar, será necessário compilá-lo, uma vez que trata-se de código C.

Como todo o remédio, esse também tem efeito colateral. Você não poderá acessar o GPIO pelo pino quando usando o RC522 porque ele coloca o GPIO em modo BOARD. Por exemplo:

O programa utiliza GPIO.BOARD, portanto você precisará referenciar-se pelo número do pino especificado na board para utilizar o GPIO com o MFRC522-python.

Não vou fazer video de algo tão besta quanto ler uma tag, desculpe-me se esperava por isso. EU até fiz um video, mas é idiota demais um video pra mostrar a leitura de um cartão RFID e certamente os negativadores negativarão; os haters odiarão. Mas tranquilamente deve funcionar pra você, se funcionou pra mim.

Em um outro post mostro como configurar um segundo dispositivo SPI. Não posso fazê-lo agora porque estou em um projeto sobre isso e não posso utilizar os mesmos hardwares pra fazer o exemplo, não seria ético, mas tenho mais dispositivos SPI, logo mais escrevo.

Aproveite pra se inscrever na nossa página. à direita, você pode curtir nossa fanpage e lá em cima, no começo da página, tem o nosso grupo do face no último ícone.

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Próximo post a caminho!

Agregador de Links - Loucuras da Net

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.

Deixe uma resposta