Consumo de Energia no nRF24L01+
O datasheet do nRF24L01+ apresenta valores típicos de consumo em várias situações.
O consumo mínimo (900 nA) é quando ele está no estado power down, que é selecionado no bit PWR_UP do registrador CONFIG. Entretanto, é preciso um tempo grande (1,5 a 4,5 ms, dependendo do cristal) para sair deste estado e poder receber ou transmitir.
Seguindo em ordem crescente, temos os estados standby-I (26 uA) e standby-II (320 uA). Para entrar no estado standby-I é necessário configurar o bit PWR_UP no registrador CONFIG e deixar o sinal CE no nível baixo. Quando o sinal CE for levantado, o nRF24L01+ passará rapidamente (130 us) para a recepção ou transmissao (conforme selecionado no bit PRIM_RX do registrador CONFIG). O modo standby-II ocorre quando o sinal CE é levantado, está selecionada transmissão e não há nada a transmitir.
A transmissão irá consumir entre 7 e 11.3 mA, dependendo da potência configurada.
O campeão no consumo é a recepção, que gira em torno de 13 mA e varia ligeiramente com a taxa de comunicação.
Portanto o consumo é, no pior caso, semelhante a um LED com brilho forte. Nada demais para situações em que a alimentação vem da rede elétrica, porém problemático quando se deseja alimentação por bateria.
Comunicação Ponto-a-Ponto, Recepção Sempre Ativa
Esta é a topologia que usei nos meus exemplos anteriores. É extremamente simples do ponto de vista de implementação e permite que qualquer uma das pontas transmita a qualquer momento. Entretanto, é extremamente "gulosa" do ponto de vista de energia.
Como o nRF24L01+ possui seis pipes de recepção, este esquema pode ser estendido sem muitas complicações para seis dispositivos, permitindo a comunicação direta de qualquer par. É preciso somente tratar o caso de dois dispositivos tentarem comunicar ao mesmo tempo, o que provavelmente vai impedir ambas as comunicações. Neste caso basta cada transmissor esperar um tempo diferente (por exemplo, baseado no seu endereço) antes de tentar transmitir de novo.
Comunicação em Estrela
Uma situação comum é termos alguns sensores querendo reportar a sua leitura para um nó central. O nó central provavelmente estará sendo alimentado pela rede elétrica enquanto que pode ser necessário que os sensores operem com bateria. Neste caso o fluxo da comunicação é primordialmente em um único sentido, do sensor para o nó central.
Se tivermos até seis sensores, o nRF24L01+ cabe como uma luva nesta configuração. O nó central fica permanentemente em recepção, com os seus pipes preparados para receber os dados enviados pelos sensores. Dependendo da latência desejada na leitura dos sensores, o rádio poderá ser mantido desligado ou em standby. Periodicamente (ou quando ocorrer uma mudança significativa na leitura) o sensor ativa o rádio e envia a leitura.
Este esquema pode ser expandido para permitir uma comunicação restrita no outro sentido: basta o sensor deixar o rádio em recepção por um pequeno período de tempo após enviar uma leitura (não necessariamente a toda leitura). Isto permite que o nó central envia algum parâmetro de configuração (ou até mesmo uma atualização de software, se o microcontrolador do sensor permitir isto).
A coisa complica se quisermos suportar mais de seis sensores. Neste caso não dá para contar com os pipes e o recurso de auto ack, pois o ack é enviado para o endereço de recepção do pipe. O jeito é fazer a coisa toda na raça:
- Desligar o ack automático
- Usar um endereço único de recepção no nó central
- Colocar nos dados do pacote o endereço do sensor que será usado para o nó central responder a ele.
- Implementar "na unha" um esquema de ack, retransmissão e descarte de pacotes repetidos.
Comunicação em Árvore
Nesta topologia a comunicação entre os nós se faz em uma estrutura de árvore, com endereços (e posições na árvore) previamente definidos. Uma mensagem podendo passar por vários nós antes de chegar ao destino.
Por exemplo, uma mensagem no nó 13 para o nó 123 faria o caminho 13 -> 03 -> 23 -> 123.
O autor da biblioteca RF24 (TMRh20) criou também a biblioteca RF24Network que implementa esta topologia. Ela não economiza energia e pode exigir vários "saltos" para uma mensagem chegar ao seu destino, mas permite a comunicação entre até mais de 3000 nós. Uma figura melhor e mais detalhada que a acima, explicando o endereçamento usado na biblioteca, pode ser vista aqui.
Uma desvantagem deste esquema é que a "queda" de um nó deixa inacessíveis os nós pendurados a ele.
Rede Mesh
Uma rede mesh é uma generalização do caso acima. O TMRh20 possui um projeto experimental, RF24Mesh, que cria uma camada acima do RF24Network para permitir a alocação dinâmica dos endereços na árvore. Com isto a árvore é montada e remontada dinamicamente, permitindo que nós se juntem e se separem da rede.
Próximos Passos
Vou dar um tempo neste assunto aqui no blog. Na lista de ideias está fazer um teste de montar um "nó sensor" alimentado a bateria, usando um MSP430. Ficaria legal este nó conversar com um Raspberry Pi, pra gravar as leituras em um arquivo e/ou disponibilizar na web. Este projeto deve demorar algumas semanas, após o que eu reporto no blog os resultados.
Nenhum comentário:
Postar um comentário