Manual

do

Maker

.

com

Como configurar NRF24L01 com Raspberry

Como configurar NRF24L01 com Raspberry

Confesso que preciso brincar um pouco mais com periféricos no Raspberry. Apesar de já ter conectado alguns periféricos nesse brinquedo e até ter escrito um suporte ao BMP180 em Python, ainda tem muito a desbravar com esse computadorzinho (apesar da galera preferir tratá-lo como um video-game -e logo monto o meu também). E hoje vou dar mais um passo na direção das interconexões, mostrando como configurar um rádio NRF24L01 com Raspberry Pi para (de quebra)  fazer uma rede mesh.

Onde adquirir o módulo NRF24L01?

Primeiramente, você precisará definir qual módulo utilizar - e tem alguns modelos, hum? O que você deverá considerar é o custo/benefício. O modelo com antena embutida é mais barato, mas em contrapartida o modelo com antena externa tem uma melhor recepção. Tem relatos de alcance a até 14km de distância em campo aberto, mas sem pensar nesse exagero de distância, certamente é possível ter um alcance realmente bom com esse dispositivo. Escolha nesse link o seu modelo preferido para configurar seu NRF24L01 com Raspberry e sigamos.

Wiring

Peguei a imagem do mysensors.org porque não gosto muito de ter que parar pra usar o Fritizng. Repare que é recomendado a utilização de um capacitor de desacoplamento ao rádio.

nrf24l01_raspberry.webp

Se quiser dar uma conferida no pinout do Raspberry (1, 2 e 3), sugiro esse artigo com várias outras informações importantes para usuários de Raspberry Pi.

Capacitor de decoupling

O capacitor deve ser um 4.7u/47uF, único requisito. A solda é simples, caso não tenha conhecimentos em eletrônica (não chego nem a aprendiz de técnico, mas) basta colocar desse jeito:

CapacitorNRF24L01
negativoGND
positivo3V3

O capacitor é obrigatório?

Não, mas se a recepção ou transmissão de dados não acontecer, adicione o capacitor ao seu NRF24L01 com Raspberry.

Pinout

O pino de interrupção do NRF24L01 não está em uso no momento, mas em outro artigo eu mostrarei como aguardar uma interrupção do dispositivo. De antemão, se desejar ver como as interrupções podem ser tratadas no Raspberry, veja esse outro artigo.

nrf24l01-pinout-dobitaobyte.webp

 

 

Os pinos estão conectados da seguinte maneira:

NRF24L01Raspberry
VCC1 (3V3)
GND 6
CE 15
CS 24
SCK 23
MOSI 19
MISO 21

Não se esqueça de habilitar o barramento SPI no Raspberry. Se não sabe como fazê-lo, dê uma olhada nesse outro artigo onde exemplifico isso em detalhes.

Interconexão de rádio - NRF24L01 com Raspberry

Antes de seguirmos, deixe-me exclarecer que não é possível utilizar esse módulo para conectar-se à sua rede WiFi doméstica, ok? Mas nada impede de fazer uma bridge entre o um ponto de rádio com uma RPi conectada à internet por ethernet ou WiFi. Veremos isso futuramente.

A comunicação poderá ser feita entre Raspberry e Arduino ou entre placas da mesma arquitetura, sem maiores problemas. Esse artigo estou escrevendo como predecessor de uma rede mesh com múltiplas arquiteturas. Saber configurar cada arquitetura previamente é uma maneira de reduzir o tamanho do artigo que terá o propósito específico.

Compilando o gateway

Um gateway é o caminho padrão para estações conectadas à mesma rede. Isso é, qualquer destino não conhecido pela estação faz a busca do destino através do respectivo gateway. Em uma rede TCP/IP,  pode-se ter uma rota estática para um destino (um gateway comum) e/ou uma rota padrão para todos os endereços não pertencentes ao mesmo endereçamento da rede (default gateway). No caso desse artigo, utilizaremos o rádio como um modelo "master/slave", tendo um nó principal e dispositivos arredores.

Faça login no Raspberry (local ou remotamente) e tendo-o conectado à Internet, dispare os seguintes comandos:

sudo su

apt-get update
apt-get install git

git clone https://github.com/TMRh20/RF24.git
cd RF24
make all && sudo make install
cd ..

git clone https://github.com/mysensors/Raspberry.git
cd Raspberry
make all && sudo make install

cc1plus: error: bad value (cortex-a7) for -mtune switch

Pegou esse erro na compilação? Não se desespere, os erros são feios mais na maioria das vezes a solução é simples.

apt-get dist-upgrade

De imediato, fiz um "apt-get dist-upgrade", já que há muito tempo eu não atualizava meu Raspberry. Não é obrigatório, mas gosto de ter as coisas atualizadas, isso evita erros por incompatibilidade de versões com bibliotecas.

Após uma atualização dessas, é necessário um reboot.

Makefile

Para resolver o erro, edite o Makefile e remova a opção '-mtune' dessa linha (ou como eu, comente a linha e faça uma cópia com o parâmetro excluido).

A compilação deve ocorrer sem problemas a posteriori.

  Não se preocupe com a arquitetura, não será compilado pra x86 pela falta do tunning.

bcm2835.c:1207:28: error: invalid suffix "x" on integer constant

Se pegar esse erro, entre as soluções possíveis você pode mudar o Makefile da librf24-bmc em Raspberry/librf24-bmc/Makefile:

#IOBASE := $(shell cat /proc/iomem | grep bcm2708_vcio | cut -f 1 -d "-")
IOBASE := 3F000000

Não caia na blacklist

Garanta que o módulo spi-bmc2708 não esteja na blacklist, senão nada vai funcionar. Comente-o se estiver na blacklist. Comentar significa colocar a cerquilha (ou sustenido, jogo da velha, cardinal,  octothorpe , tralha, cancela, numeral, malha, sharp, carré, hash, trama ou seja lá como você chama esse símbolo - mas evite 'sustenido', que só é parecido) caso não esteja com ela no começo da linha. O arquivo que deve ser editado é o  raspi-blacklist.conf:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

E a linha deverá ficar assim:

#blacklist spi-bcm2708

Hora de começar a brincadeira.

PyGatewaySerial

Eu ainda não havia feito o wiring, mas executei o comando de qualquer modo. Se você fizer o wiring de forma errada, obterá a mesma mensagem.

Se você habilitou o SPI como referenciado no link de referência lá em cima e fez o wiring adequadamente, quando executar o comando /usr/local/sbin/PiGatewaySerial deverá ver algo assim:

piGatewaySerial-output.webp

Após confirmar o funcionamento, comemore e interrompa com Ctrl+C.

/etc/init.d/PiGatewaySerial

Para quem não é muito íntimo de sistemas Linux, /etc/init.d é o diretório de serviços do sistema. O PiGatewaySerial também é um serviço de sistema. Serviços de sistema rodam sob prioridade administrativa (não com o PID de root necessariamente), de modo que se for iniciá-lo manualmente, você deve estar com autoridade garantida. Você pode fazer isso de dois modos:

sudo su
/etc/init.d/PiGatewaySerial start
#ou...
sudo /etc/init.d/PiGatewaySerial start

Para garantir que o processo está rodando adequadamente, verifique o serviço através do arquivo contido em /dev:

sudo cat /dev/ttyMySensorsGateway

Auto-inicialização do serviço

Claro que você quererá seu rádio funcionando automaticamente a cada reboot, hum? Existem pelo menos 3 modos de fazê-lo sem que possam ser chamados de "gambiarra", sendo que recomendarei o último caso nesse artigo, porque é o procedimento adotado pelo criador da biblioteca. Mas vale a pena citar todos.

rc.local

Adicione o serviço no último arquivo lido pelo sistema operacional durante o processo de boot; o /etc/rc.local.  Inclua uma linha:

/etc/init.d/PiGatewaySerial start &

update-rc.d

Ou habilite-o da forma mais limpa:

update-rc.d PiGatewaySerial enable

make

De dentro do diretório Raspberry (cuja toda a compilação foi feita até aqui), digite o comando:

sudo make enable-gwserial

Confirmar a execução do serviço após o boot

Se precisar confirmar o serviço em execução (após ter comprovado seu funcionamento no sistema com os comandos anteriores), basta consultar com ps:

ps ax |grep PiGat

Integração com outros sistemas de domótica

O funcionamento da comunicação será como qualquer comunicação serial, mas diversos programas estão preparados para ler apenas dispositivos padrão do sistema, em /dev/tty*, onde o sufixo é sempre algo como USBx ou ACMx (por exemplo, /dev/ttyUSB0). Para evitar problemas, podemos criar um link simbólico do dispositivo que foi gerado e "linkado" pelo driver apontando para uma tty convencional do sistema. Em outro artigo mostrarei a integração com um desses sistemas, por enquanto, apenas mantenha um dispositivo disponível e funcionando:

sudo ln -s /dev/ttyMySensorsGateway /dev/ttyUSB20

Atualmente as distribuições Linux populam o diretório /dev em tempo de boot, baseando-se nos dispositivos realmente existentes no sistema. Antigamente montes desses dispositivos eram criados sem serem utilizados, então a prática atual é boa, mas causará um inconveniente; o dispositivo /dev/ttyUSB20 não existirá mais. Obviamente não executaremos manualmente o link simbólico a cada boot e para resolver essa questão, basta recorrer ao /etc/rc.local. Adicione o comando do link simbólico antes de "exit 0":

ln -s /dev/ttyMySensorsGateway /dev/ttyUSB20
exit 0

Cuidados a tomar com amplificação de sinal

O nível lógico do Raspberry é 3v3 e não existe nenhum tipo de proteção para os GPIO, por isso não tente resolver qualquer problema advindo de uma configuração problemática ligando o NRF24L01 à tensão de 5V. Além disso, se for amplificar o sinal, proporcione uma alimentação externa, uma vez que o limite de corrente que pode ser drenado do Raspberry Pi é de 50mA. Utilizando simplesmente o rádio, você não terá com o que se preocupar, pois seu consumo não deve passar de 15mA. Tendo feito a alimentação externa, atente-se em derivar o GND para o Raspberry ou o módulo não funcionará.

Transferência de dados

A comunicação com rádio poderá ser utilizada inclusive para atualização OTA, mas tenha em mente que a velocidade do rádio é consideravelmente lenta.

Próximo artigo relacionado

Eu acredito que esse artigo mereça exclusividade porque está bastante informativo, então vou deixar a comunicação entre o Raspberry e outros dispositivos para o próximo artigo relacionado, ok? No próximo, colocarei uns 3 dispositivos na rede, sendo Arduinos e ESP8266 para termos uma rede mesh híbrida, é só acompanhar!

Curtir a página

Que tal curtir a página no facebook como feedback? Assim você recebe uma notificação de novos artigos, hum? Tem também nosso canal no youtube e afins, logo mais abaixo.

Por favor, mostre seu interesse clicando nas estrelinhas pra avaliar, curtindo nossa página e assinando nosso canal no YouTube, em breve teremos um video bacana dessa rede mesh e também um outro incrível de um projeto quase finalizado.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.