Configurar o leitor RFID RC522 no Raspberry • Do bit Ao Byte
RC522 no Raspberry
Pra variar, mais um projeto com Raspberry Pi que pego e o procedimento não é trivial. Tem os passos tradicionais que o colocam pra o RC522 no Raspberry Pi 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.
1 Atualizando o sistema do Raspberry
2 RC522 no Raspberry
2.1 Barramento SPI
2.2 Barramento SPI no Raspberry
2.3 Habilitar o barramento SPI no Raspberry
2.4 Baixar o programa para testes
2.5 Device tree
2.6 Baixar a última versão da biblioteca da Broadcom BCM 2835
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:
sudo su apt-get update apt-get dist-upgrade reboot
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.
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'.
RC522 no Raspberry – Menu do programa raspi-config
No próximo menu, basta habilitar o SPI:
RC522 no Raspberry – 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:
sudo su apt-get install python-dev python setup.py build python setup.py install
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á.
RC522 no Raspberry – Wiring do RPi 1
RC522 no Raspberry – 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.
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.
tar zxvf bcm2835-1.50.tar.gz && cd bcm2835-1.50 ./configure && make && sudo su make check && make install && reboot
tar zxvf bcm2835-1.50.tar.gz && cd bcm2835-1.50
./configure && make && sudo su
make check && make install && reboot
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:
import RPi.GPIO as GPIO #ai voce escolhe GPIO.setmode(GPIO.BOARD) #ou... GPIO.setmode(GPIO.BCM)
#ai voce escolhe
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.
Tagged bcm2835, broadcom, i2c, i2s, mfrc522, mfrc522-python, raspberry, rc522, rpi1, rpi2, spi, spi-py, wiring