ArduinoIoTLinuxRaspberry

Rede mesh com Arduino e Raspberry usando NRF24L01

E finalizando a série, vamos ver a rede mesh funcionando. Mas primeiramente quero deixar claro alguns detalhes relacionados à estrutura.

Mesh com Arduino e Raspberry

Nem todos os sketches estão disponíveis para outra arquitetura como por exemplo, ESP8266. Utilizando o ESP8266 como gateway mesh eu percebi congelamentos e em alguns momentos, a perda da comunicação com o nó de testes. prefira o setup sempre com Arduino e se precisar fazer uma bridge, adicione um bluetooth ou um ESP8266 como slave (eca).

Conceito

Para quem não sabe, uma rede mesh funciona da seguinte maneira; um master e N slaves, sendo suportados até 254 nós ao master. O master é chamado de gateway (pelo menos em todos os casos que vi). O gateway é a saída (ou entrada) dos dados coletados dos N dispositivos. O master (ou gateway) deve ter o ID 0.

A rede mesh permite que dispositivos sejam endereçados pelo gateway, de modo que você não precisa se preocupar com o endereçamento de cada um dos nós ou a topologia da rede (sempre tem um “mas”, descrito lá embaixo). Quando um nó está fora do alcance direto, ele faz uma rota através dos outros nós para então entregar os dados.

Os nós (slaves, não confundir com a quarta pessoa do verbo) podem tanto transmitir quanto receber dados e para isso o rádio permite a comunicação através de dois canais, tal como qualquer rede bidirecional. São chamados “pipes“, controlados através de lógica implementada no sketch.

Quando um nó se perde, ele deve se reconectar automaticamente à rede (se possível) e essa lógica também é implementada pelo programador, no caso das bibliotecas que vamos utilizar.

Configuração do Raspberry Pi



Se você está acompanhando essa série de comunicação com o NRF24L01, deve ter lido o artigo anterior. Nele está disposta toda a configuração e uma comunicação simples (sem mesh) entre Arduino e Raspberry. No artigo anterior, o mais importante é que você consiga fazer o wiring e a configuração do dispositivo no Raspberry. Minha sugestão é que esteja com o sistema devidamente atuallizado, porque do jeito que está escrito no artigo anterior foi como procedi, sem problemas. Com versões mais antigas do sistema houve uma série de complicações que precisaram ser sanadas. Se por alguma razão você não pode atualizar seu Raspberry Pi, pode ser bom dar uma olhada nesse artigo também.

No artigo anterior também expliquei que o wiring está relacionado ao número dos pinos, mas o driver BMC referencia o GPIO, portanto atente-se à tabela para saber a que pinos deve conectar o NRF24L01 (na tabela no post anterior está especificado como RPi – P1 Connector). Na programação, referencie o número do GPIO, descrito na coluna RPI da mesma tabela:

wiring - mesh com Arduino e Raspberry
wiring

Bibliotecas necessárias no Arduino

As bibliotecas necessárias podem ser encontradas diretamente no Library Manger da IDE do Arduino. Infelizmente não pude dedicar tempo suficiente para cobrir o funcionamento de forma satisfatória a garantir que você não terá nenhum problema, mas nessa prova de conceito está completamente funcional. Serão necessárias as seguintes bibliotecas:

libraries - mesh com Arduino e Raspberry

A RF24G é uma intrusa nessa lista, mas não havia como eliminá-la. Também, instalá-la não causará nenhum problema.

RF24Mesh

Não sei se todas as bibliotecas para rede mesh funcionam da mesma maneira, por isso vou citar diretamente a RF24Mesh e suas características.

Começando pelo endereçamento e roteamento para módulos de rádio frequência, ela permite uma larga rede de sensores, mas acredito que essa parte seja característica de qualquer rede mesh.

Os nós recebem uma assinatura numérica entre 1 e 255, sendo que 0 é reservado para o gateway. Tudo o que for relacionado a seu funcionamento também é definido pelo master, que além do endereço atribui rotas.

Quando um nó é movido fisicamente ou simplesmente perde a conexão com a rede (seja por problema de sinal, alimentação etc), ele pode ser configurado para automaticamente se juntar à rede mesh novamente e reconfigurar a sí próprio dentro da rede.

Característico de redes mesh, os nós podem ser movidos para longe do master, usando outros nós para rotear o tráfego sobre distâncias extendidas.

Recursos disponíveis na biblioteca em sua versão atual

Atualmente você encontrará os seguintes recursos:

  • Funcionalidade básica usando um Arduino ou RPi como nó master, com capacidade de enviar ou receber dados de outros nós.
  • Endereçamento dinâmico baseado em um identificador único pré assinado. Não tão bom, mas veremos mais a respeito.
  • Configuração de endereços dinâmico on-the-fly e da topologia de rede.
  • Roteamento automático e manipulação de dados. Os nós se juntarão para extender o alcance dos links de  rádio pelo roteamento de dados, conforme necessário.

 

Para o Arduino, basta instalar como supracitado. Para o Raspberry, um pouco mais de “braço” será necessário. Seguindo o tutorial anterior, você já terá em algum lugar do seu Raspberry o diretório RF24. Dentro do mesmo diretório que está o RF24, copie a RF24Network:

Descomprima o arquivo master.zip e se pretende guardá-lo, renomeie para o que desejar, mas não mantenha o mesmo nome ou ele será sobescrito.

Entre no diretório RF24Network e execute os seguintes comandos:

Resumidamente, você estará testando o funcionamento, nada de mais. O bom de executar esse programa é pelo fato da constatação de seu funcionamento (pelo menos em relação à comunicação com o dispositivo NRF24L01 no sistema):

mesh com Arduino e Raspberry

Ctrl+C para finalizar o programa, não precisa ler ou escrever nada por enquanto.

Feito isso, agora desça um nível de diretório (cd ..) e copie a RF24Mesh; descomprima-a da mesma forma que foi feito com a RF24Network, então faça o que quiser com o arquivo baixado e em seguida suba para o nível de diretório criado.

E após entrar no diretório:

Tem exemplo para RPi também. Adivinha?

Executar o primeiro teste com a rede mesh



Nesse ponto podemos considerar a configuração concluída. Tudo o que acontecer de anômalo daqui pra frente podemos considerar problemas. Execute o exemplo recém compilado RF24Mesh_Example_Master:

Agora na IDE do Arduino, abra o exemplo File > Examples > RF24Mesh > RF24Mesh_example.

O sketch tem sua explicação no header, então para não me repetir:

Vamos às partes tristes primeiro. Não dá pra ser tão dinâmico quanto se deseja; cada nó deve ter um NodeID para se juntar à rede mesh. Se isso precisar ser configurado automaticamente, ficará por sua conta a implementação de um algorítimo que possa atribuir um número mágico para cada nó a entrar na rede. Considerando que não tem como adivinhar se esse número mágico já foi atribuido a outro nó, a opção viável é manter uma tabela dos dispositivos de cada rede. Não tem escapatória.

O nodeID é gravado na EEPROM dos dispositivos AVR, de modo a manter a persistência em caso de falhas, uploads, queda de energia and so on, and so forth.

O resto é liso, não tem quase nada de código. Você sempre poderá usar o sketch de exemplo como base, uma vez que ele tem implementado o tratamento de reconexão.

O exemplo do Raspberry já está em execução e aguardando por nós (não confundir “nós” com “a gente”). Suba o sketch no Arduino agora e veja a mágica acontecer:

1 Star2 Stars3 Stars4 Stars5 Stars (123 votes, average: 5,00 out of 5)
Loading...

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.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!