LoRaMessenger
LoRaMessenger é um bate-papo fora da rede entre nós ESP32 equipados com LoRa com uma interface web sem fio simples.
O ESP32 hospeda uma rede Wi-Fi que fornecerá uma interface simples semelhante a um bate-papo que exibirá nós online, mensagens recebidas e enviadas e algumas caixas de texto para definir o nome do nó, o nó de destino e a mensagem.
Como o protocolo de comunicação LoRa é utilizado para enviar e receber mensagens, é possível configurar dois ou mais módulos para transmitir e receber mensagens até uma distância de alguns quilômetros.
A maioria dos módulos ESP32 LoRa, como o TTGO LoRa32 ou Heltec Wifi LoRa 32, são equipados com um display, para que você possa usá-los de forma independente para receber mensagens como um pager.
Um nó pode ser facilmente instalado dentro de uma pequena caixa com bateria, criando assim um sistema de comunicação que pode se comunicar mesmo em áreas onde não há sinal telefônico.
Interface web
Após a inicialização do ESP32, uma nova rede Wi-Fi chamada LoRaMessenger [número] é criada.
Quando um dispositivo se conecta à rede, a interface web deve abrir automaticamente, caso nada aconteça a interface pode ser acessada abrindo um navegador web e navegando até o IP do ESP32, que por padrão é 1.1.1.1.
No Android, uma página de login wifi contendo a interface web é aberta após a conexão à rede Wi-Fi. Dessa forma, a conexão de rede 4G em segundo plano é mantida mesmo ao usar LoRaMessenger . Uma notificação informando o login na rede deve permanecer no painel de notificações e pode ser aberta a qualquer momento para mostrar a interface novamente.
A interface web agora é apresentada em seu navegador, o chat possui as seguintes funcionalidades:
- No topo da página, o nome do nó pode ser inserido para que o destinatário saiba quem está escrevendo. Após pressionar atualizar, o nome é salvo e enviado a todos os nós acessíveis.
- A seção on-line mostra todos os nós disponíveis detectados, com algumas informações adicionais, como o nó relé que está sendo usado pelo nó receptor, se presente, o RSSI receptor, o número de saltos entre os relés e o tempo decorrido desde o último contato.
- A seção de mensagens mostra as últimas 5 mensagens enviadas e recebidas (por padrão, configuráveis pelo usuário) em ordem cronológica. O nome de todos os nós que receberam a mensagem corretamente é indicado em cada mensagem.
- Na parte inferior da página existem duas caixas de texto, a primeira é utilizada para definir o nó de destino e a segunda para escrever a mensagem.
O campo de destino contém o valor Broadcast por padrão. Desta forma a mensagem é enviada para todos os nós disponíveis. Você também pode escrever o nome de um nó exatamente como relatado na seção online para enviar a mensagem apenas para um destinatário específico.
Observe que a partir de agora é necessária uma atualização da página para atualizar as mensagens recebidas e as confirmações de leitura.
Protocolo LoRa
LoRaMessenger usa um protocolo de comunicação personalizado, cada pacote enviado consiste em um cabeçalho e uma carga útil.
O cabeçalho fornece as informações necessárias para que a rede e o roteamento de pacotes funcionem corretamente, os parâmetros contidos no cabeçalho são os seguintes:
- NETID: ID da rede, especificado em config.h. Isto permite a criação de múltiplas redes independentes.
- TTL: tempo de vida do pacote, especificado em config.h. Este valor é usado para saber quantos saltos um pacote realizou e é necessário para o algoritmo de roteamento.
- RECEPTOR: Número do nó receptor.
- SENDER: Número do nó remetente.
- ÚLTIMO NÓ: Número do nó remetente ou último nó que retransmitiu o pacote.
- PRÓXIMO NÓ: Número do nó receptor ou próximo nó necessário para retransmitir o pacote ao nó receptor.
- ID: ID do pacote, cada pacote enviado do mesmo nó possui seu ID exclusivo de 4 bytes. Isto é necessário para descartar pacotes já recebidos e para enviar uma confirmação recebida.
- PAYLOAD TYPE: Tipo de carga útil, usado para interpretar corretamente a carga útil. Os possíveis tipos de cargas úteis são: Mensagem, Confirmação e Anúncio.
Carga útil da mensagem:
- TAMANHO DA MENSAGEM: Tamanho da mensagem em bytes, necessário para leitura da mensagem.
- MENSAGEM: Conteúdo da mensagem. Isso é enviado em texto simples por enquanto!
Carga útil de confirmação:
- RECEIVED PACKET ID: ID do pacote de mensagem recebido. Isso é enviado de volta ao remetente para que ele saiba que o pacote foi recebido.
Anuncie a carga útil:
- TAMANHO DO NOME: Tamanho do nome do nó em bytes, necessário para leitura do nome.
- NOME DO NÓ: Nome do nó. Isso é exibido na interface web de cada nó e pode ser escrito no campo de destino para enviar uma mensagem apenas para um nó específico.
Retransmissão e roteamento de pacotes
LoRaMessenger cria uma rede de nós capazes de encaminhar mensagens para nós não acessíveis diretamente ao remetente.
Para fazer isso, cada nó utiliza uma tabela de roteamento automático contendo os nós de destino e a melhor rota para alcançá-los. A tabela é atualizada por meio de pacotes de anúncios enviados periodicamente ou mediante alteração de nome por todos os nós.
O algoritmo de roteamento atual é muito simples e prefere um número menor de saltos, no caso de duas rotas com o mesmo número de saltos é escolhida aquela com conexão ao próximo nó mais forte.
Instalação
Este programa pode ser facilmente instalado importando o projeto no platformio, atualizando as configurações e enviando-o para os fóruns.
Configuração
Na pasta inclui, um arquivo de configuração chamado config.h está presente. Este arquivo contém todas as configurações necessárias para o funcionamento LoRaMessenger .
Configuração LoRa:
- LORABAND: Frequência do chip LoRa. A frequência depende da sua placa e das frequências locais permitidas, certifique-se de usar apenas frequências permitidas em seu país, mais informações aqui.
Valores possíveis: 433E6, 866E6, 915E6. - SPREADINGFACTOR: Fator de espalhamento LoRa. Tenha cuidado ao utilizar valores superiores a 7 porque LoRaMessenger respeita o ciclo de trabalho de transmissão. Valores elevados retardam muito o tempo de espera entre as transmissões e podem afetar o funcionamento correto; outros ajustes, como o tempo anticolisão, podem ser necessários. Valores possíveis: 7 - 12.
- TXDBM: Potência de transmissão do chip LoRa.
Valores possíveis: 1 - 20 - LORADUTY: Ciclo de trabalho da transmissão. Certifique-se de usar apenas valores permitidos em seu país. Valores possíveis: 1 - 99.
- NETID: ID da rede LoRaMessenger . Isto permite a criação de múltiplas redes independentes.
Valores possíveis: 0 - 255.
Configuração L1:
- L1BUFFER: Fila de pacotes de transmissão. Aumente se usar grandes redes de nós ou usar altos fatores de espalhamento.
- TTL: Tempo de vida do pacote. Define o número máximo de saltos que um pacote pode realizar antes de expirar.
Valores possíveis: 1 (apenas mensagens diretas, sem retransmissão), >1. - BROADCASTADDR: Número do endereço de transmissão.
Configuração L3:
- NODENUMBER: Número do nó local. Cada nó precisa de um número de nó diferente! Você pode pensar que isso equivale a um endereço IP de uma rede normal.
Valores possíveis: 1 - 255. Cuidado para não utilizar o mesmo endereço de BROADCASTADDR! - MAXNODES: Número máximo de nós esperados na rede.
- ANNOUNCEMINS: Anúncio de presença do nó e atualização de nome. Esta mensagem é necessária para informar todos os nós da presença de todos os outros nós. O intervalo pode ser aumentado para evitar spam se usar nós estáticos, fatores de propagação elevados ou grandes redes.
- INACTIVEMINS: Tempo de inatividade necessário para que um nó seja considerado offline. Cuidado para usar pelo menos 2 a 3 vezes o valor de ANNOUNCEMINS ou ainda maior se a recepção for ruim.
- INACTIVESECONDSREMOVECHECK: Intervalo para verificação da remoção de nós offline.
Configuração de mensagens:
- SHOOWNMESSAGES: Quantidade de mensagens a serem exibidas na interface web.
- KEEPNMESSAGES: Número de mensagens a manter na memória.
Configuração de exibição:
- DISPLAYSTBYSECS: Número de segundos após o display ser desligado.
Configuração de rede:
- WIFIENABLED: Wi-Fi habilitado. Isso pode ser usado para reduzir a energia utilizada no caso de implantação de um nó apenas para retransmissão de mensagens.
- NODENAMEOVERRIDEEN: habilitação de substituição de nome de nó. Usado para substituir o nome do nó padrão (Nó [número]) pela sequência especificada em NODENAMEOVERRIDE.
- NODENAMEOVERRIDE: substituição do nome do nome. Isso pode ser usado para definir o nome do nó sem modificá-lo na interface da web. Útil ao configurar um nó somente retransmissão.
- WIFISSID: prefixo do nome da rede Wi-Fi ( LoRaMessenger [número])
- DNSPORT: porta DNS.
Pinagem:
- SCK: Relógio SPI.
- MISO: SPI MISO.
- MOSI: SPI MOSI.
- SS: seleção de escravo SPI.
- RST: Redefinição do chip LoRa.
- DI0: LoRa recebe retorno de chamada.
- I2CSCL: relógio I2C.
- I2CSDA: dados I2C.
- LCDRESET: reinicialização do LCD.
As definições dos pinos podem precisar ser editadas caso outra placa seja usada (as definições dos pinos são baseadas em um TTGO LoRa32 V2).
Melhorias/correções futuras
Outros recursos planejados para o futuro são:
- Criptografia de mensagens, a partir da direita todas as mensagens são enviadas sem criptografia.
- Atualização automática de mensagens.
- Testes e melhorias do algoritmo de roteamento.
Licença
Licença do MIT.