Manual

do

Maker

.

com

Comunicação do Raspberry com Arduino utilizando NRF24L01

Comunicação do Raspberry com Arduino utilizando NRF24L01

Nesse artigo veremos a comunicação entre dois dispositivos, já em uma rede mesh, sendo um Raspberry Pi e um Arduino. Alguns passos estão sendo repassados porque as versões anteriores do Raspbian beseados em Debian Wheezy e Jessie tinham uma pequena diferença na configuração do SPI, além de que a versão mais nova (Stretch) tem umas arestas, que veremos no decorrer do artigo.

Raspberry com Arduino

Não se espante com o Debian 9 da imagem de destaque. O artigo está devidamente revisado.

Acredito que seja a melhor forma de fazer uma comunicação entre o Raspberry e o Arduino, afinal, utilizar um módulo ethernet já não é mais tão atrativo nos dias de hoje e, se for para utilizar um ESP8266, não tem porque inserir um Arduino na configuração. Já o rádio NRF24L01 é uma solução de baixo custo que lhe oferece uma excelente interface.

Onde comprar o NRF24L01

Para essa comunicação você precisará de no mínimo um Raspberry Pi e um Arduino UNO. E claro, os rádios. Se você ainda não tem um par de NRF24L01, pegue na AutoCore Robótica.

Habilitar o barramento SPI no Raspberry Pi

A ferramenta de interação para isso continua sendo a mesma no Raspbian, mas o menu foi modificado. Se você está utilizando a última versão do sistema (Stretch), execute o programa raspi-config e vá ao menu Interfacing options. Procure por SPI, habilite-o e confirme qualquer questionamento da interface, incluindo um reboot.

Ajustando o locales

Se você também recebe essa sujeira no terminal, saiba que a solução para o ajuste do locales é simples, porém tem um efeito colateral;  será necessário reconectar-se à sua rede WiFi.

Para fazer esse ajuste e se livrar desses warnings, rode mais uma vez o comando raspi-config e selecione o menu localisation options. O código a ser selecionado é o pt_BR.UTF8.

Concluindo essa configuração, um reboot será solicitado e então você não terá mais mensagem de erro.

Configurar o NRF24 no Raspberry

Isso já foi visto anteriormente nesse outro artigo, mas aqui vou adotar outro caminho. Tendo habilitado o barramento SPI como explicado anteriormente, baixe o RF24 e configure-o com o suporte ao SPIDEV.

git clone https://github.com/nRF24/RF24.git
cd RF24
sudo su
./configure --driver=SPIDEV
make install -B

Exisem outras opções além do SPIDEV, mas estou focando nele. Assim sendo, você tem o pino 15 para o GPIO 22 (CE) e pino 24 para o GPIO 8 (CSN).

O construtor então deve ficar desse modo:

RF24 radio(22,0);

Essa compilação foi exemplificada nesse outro artigo , onde o foco principal era configurar o NRF24L01 no Raspberry para ser um gateway (calma, hoje vamos fazer a comunicação entre o Raspberry e o Arduino, chega de gateway).

Adicionando suporte ao Python

Nada mais simples do que usar Python e pode ser desejável utilizá-lo por essa razão, apesar dos exemplos contidos no diretório da compilação. Se quiser adicionar o suporte a Python, siga esses passos (adicionalmente, instalando o bpython para programação em fluxo):

sudo apt-get install python-dev libboost-python-dev bpython

Agora o processo é um pouco demorado, principalmente em Raspberry menor que o 3. Se tiver menos que 1G de RAM, é bom que tenha swap de sobra. Se não tiver e precisar de uma swap temporária, faça o seguinte:

dd if=/dev/zero of=temp.swap count=1000 bs=1048576 #isso demora um bocadinho
sudo mkswap temp.swap
sudo swapon temp.swap

E depois que finalizar o uso, poderá descartá-la:

sudo swapoff temp.swap && rm -f temp.swap

Tendo a swap ativa (ou memória RAM suficiente), o passo final:

cd pyRF24
python setup.py build && sudo python setup.py install

Wiring

O wiring não deve ser confundido com o GPIO, eles são representados por números diferentes. Eu encontrei uma tabela bacana para o wiring de diferentes boards, basta seguir por aqui e você terá seu NRF24L01 funcionando no Raspberry e no Arduino. De quebra, pode usar um Digispark ou qualquer outra board com Attiny85.

pinout_many_boards.webp

Hello World!

Faça uma primeira execução de teste, mas como root ou utilizando o comando sudo. De outro modo, vocẽ pegara uma falha de segmentação. O gettingstarted é uma boa opção pra começar, mas para isso, compile os exemplos primeiramente:

cd examples_linux && make

Execute o exemplo gettingstarted e veja saída:

gettingstarted-raspberry-nrf24l01.webp

...e no Arduino

Abra o gerenciador de bibliotecas e instale o que tiver relacionado a "RF24" (assim não tem erro). Selecione a opção 0 e suba o sketch File > Examples > RF24 > gettingStarted para o Arduino. Eu utilizei o Arduino UNO no exemplo e ao abrir o terminal Serial, inseri a letra 't' para iniciar a transmissão. O resultado é a imagem de destaque.

No próximo artigo relacionado iniciaremos a comunicação de uma rede mesh, por enquanto aproveite essa comunicação, modique os sketches e divirta-se um pouco.

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.