Manual
do
Maker
.
com
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.
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.
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.
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.
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.
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).
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
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.
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:
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.