Como uma mensagem Meshtastic viaja?
Uma explicação interativa: do teclado do rádio aos chirps LoRa e daí pela malha, nó a nó.
Resposta rápida: quando você envia uma mensagem no Meshtastic, o rádio monta um pacote (o texto mais um cabeçalho), transmite esse pacote como uma sequência de chirps LoRa (sinais que varrem a frequência do canal) e os nós que ouvem retransmitem o pacote, salto a salto, até o limite de saltos (3, por padrão). Uma mensagem curta no preset LongFast fica cerca de meio segundo no ar.
1. Enviando uma mensagem: quanto tempo ela fica no ar?
O texto que você digita vira um pacote: os bytes do texto, mais uma pequena estrutura de dados (o tipo de mensagem e alguns campos) e um cabeçalho de 16 bytes do Meshtastic (destino, origem, identificador, canal). A mensagem "oi" vira um pacote de 24 bytes; o limite é de 200 bytes de texto.
No preset padrão, o LongFast (fator de espalhamento SF11, largura de banda de 250 kHz, taxa de código 4/5), esse pacote de 24 bytes leva cerca de 436 ms no ar; uma mensagem de 200 bytes leva quase 2 segundos. No Brasil, que usa a região ANZ (915 a 928 MHz), o canal padrão do LongFast fica em 919,875 MHz. O tempo no ar é calculado com a fórmula da Semtech, fabricante do chip LoRa.
2. O que são os chirps LoRa?
O LoRa não liga e desliga uma portadora: ele transmite chirps, sinais que varrem toda a largura do canal, de uma ponta à outra, num tempo fixo. No LongFast cada chirp (um "símbolo") dura 8,192 ms. Um pacote é sempre desenhado na mesma ordem:
- Preâmbulo: 16 chirps ascendentes iguais, para o receptor se sincronizar.
- Palavra de sincronismo: 2 chirps levemente deslocados (o 0x2B do Meshtastic), que separam a rede Meshtastic de outras redes LoRa.
- Chirps descendentes: 2 chirps e um quarto varrendo para baixo, que marcam o início dos dados (é o "^" que aparece no espectrograma).
- Cabeçalho e carga útil: cada símbolo de dados começa numa frequência diferente e dá a volta no canal. É nessa posição de partida que os bits viajam.
3. Como a mensagem se espalha pela malha?
O Meshtastic usa uma inundação gerenciada (managed flooding): cada nó que ouve a mensagem pela primeira vez se prepara para retransmiti-la, mas antes espera um pouco. Essa espera é menor quando o sinal chegou mais fraco, ou seja, os nós mais distantes tendem a retransmitir primeiro, levando a mensagem mais longe a cada salto.
Se, durante a espera, o nó ouvir outro nó retransmitindo a mesma mensagem, ele cancela a sua retransmissão, o que evita congestionar o canal. Cada retransmissão gasta um salto: com o limite padrão de 3, quem ouve o remetente diretamente está a 0 saltos e a mensagem pode ser repassada até 3 vezes. Nós configurados como CLIENT_MUTE recebem as mensagens mas nunca as repassam.
O que está simplificado
- As frequências de partida dos chirps de dados são ilustrativas: o rádio real ainda aplica embaralhamento, código de correção de erros, entrelaçamento e mapeamento Gray. A quantidade de símbolos é a real.
- No bairro, a distância faz o papel da qualidade do sinal (SNR), o alcance é um círculo fixo (sem relevo, paredes ou desvanecimento) e a espera de cada nó é fixa (no firmware ela é sorteada dentro de uma janela que depende do SNR). Os tempos estão desacelerados para dar para acompanhar.
Quer melhorar esta explicação?
O código é aberto (licença MIT), em SVG e JavaScript puro, sem framework. Correções e ideias são bem-vindas: seletor de presets, a codificação real dos símbolos, novas cenas (canais e criptografia, armazenamento e envio) e mais idiomas.
Código no GitHub O que é Meshtastic? Monte o seu rádio
Desenhado com o kit de desenho open-source Anatomy. O logo "M-Powered" é do projeto meshtastic/design. Meshtastic® é uma marca registrada da Meshtastic LLC; o Meshbrasil é uma comunidade não oficial, sem vínculo com a Meshtastic LLC.