IoT DevKit - 7. Introdução ao LoRaWAN




Introdução

O LoRaWAN é um dos protocolos de comunicação sem fio possíveis com o IoT DevKit. Além disso, ele está se popularizando cada vez mais e se mostrando uma grande ferramenta para projetos que exigem um longo alcance. Mas afinal, o que é LoRaWAN?

Neste tutorial iremos te introduzir ao protocolo LoRaWAN, com seus conceitos básicos, métodos de conexão e de operação. Além disso, iremos aprender como nos comunicar com o módulo LoRaWAN Bee usando o IoT DevKit.

Lista de Materiais

O Que é LoRaWAN?

LoRaWAN é um protocolo de comunicação baseado no protocolo de radiofrequência LoRa da Semtech, e foi desenvolvido para alcançar as camadas mais altas de uma aplicação, chegando até o usuário final, como na imagem abaixo. Entretanto, dispositivos LoRaWAN não são apenas módulos de radiofrequência, eles também são compostos de microcontroladores dedicados, que são responsáveis por conectar o dispositivo à rede e garantir a segurança da comunicação.

camadas-aplicação
Camadas de uma "Aplicação"
Fonte: Semtech

Estrutura do Protocolo

Os dispositivos LoRaWAN não se conectam e enviam mensagens diretamente para a internet, eles utilizam uma rede de componentes para chegar à plataforma final, como na imagem a seguir.

estrutura-comunicacao-protocolo
Estrutura de Comunicação do Protocolo
Fonte: Profissionais TI

Os "End Nodes", ou "End Devices", representam os dispositivos LoRaWAN remotos, como o LoRaWAN Bee. Estes dispositivos enviam e recebem informações dos "Gateways", ou "Concentrators" como também são conhecidos, que representam basicamente as antenas de conexão, como as da ATC ("American Tower Corporation"), por exemplo. Da antena de conexão, as informações trocadas com os dispositivos são enviadas pela internet para o "Network Server", que é responsável por encaminhar corretamente as mensagens de um certo dispositivo para sua respectiva aplicação final, ou no sentido inverso. Por fim, as informações chegam ao "Application Server", que representa a plataforma onde são finalmente exibidas, ou de onde partem, as informações da comunicação, como a PROIoT, por exemplo.

Classes do Protocolo

Como é possível observar na primeira imagem da seção anterior , este protocolo é subdividido em três classes de dispositivo: a classe "A", a classe "B" e a classe "C". Cada uma destas classes representa um funcionamento distinto do dispositivo.

A classe "A" representa uma sigla de "All" (Todos/Tudo), pois todas as outras classes deste protocolo ("B" e "C") são capazes de se comportar como esta classe. Os dispositivos de classe "A" apresentam o menor consumo de energia, pois embora eles possam enviar dados a qualquer momento, eles só aguardam por uma resposta do servidor durante um breve período determinado. Nesta classe, o dispositivo cria duas janelas de recepção de resposta do servidor após o envio da mensagem, e ele pode receber esta resposta na primeira janela (Rx1), na segunda janela (Rx2), ou não receber resposta em nenhuma delas, como nas imagens a seguir. No entanto, o dispositivo nunca receberá a mesma resposta nas duas janelas.

mensagem-recebida-primeira-janela
Mensagem Recebida na Primeira Janela
Fonte: LoRa Developers
mensagem-recebida-segundaa-janela
Mensagem Recebida na Segunda Janela
Fonte: LoRa Developers
mensagem-nao-recebida
Mensagem Não Recebida
Fonte: LoRa Developers

Já a classe "B" representa a sigla de "Beacon" (Farol/Sinaleiro), pois os envios são "guiados". Nesta classe, o dispositivo recebe sinais ("beacon") de tempos em tempos para sincronizar o seu relógio interno com o do "gateway". Depois desta sincronização, o dispositivo abre janelas de recepção de mensagens do servidor com uma frequência predefinida, como na imagem abaixo.

exemplo-comportamento-classe-b
Exemplo de Comportamento da Classe B
Fonte: Mobilefish.com

A classe "C", por sua vez, representa a sigla de "Continuous" (Contínuo), que, como o próprio nome já diz, mantém o dispositivo ouvindo continuamente por uma resposta do servidor, como na próxima imagem. Entretanto, devido ao seu método de funcionamento, este tipo de dispositivo é o que consome mais energia entre todas as classes.

exemplo-comportamento-classe-c
Exemplo de Comportamento da Classe C
Fonte: Mobilefish.com

Métodos de Conexão

As três classes de dispositivos acima podem utilizar dois métodos distintos de comunicação, o "OTAA" ("Over The Air Activation") e o "ABP" ("Activation By Personalization"). Estes dois métodos exigem diferentes informações para conectar o dispositivo à rede.

O método "OTAA" utiliza apenas três dados do dispositivo para conectá-lo à rede, sendo eles a "Application EUI", sua respectiva "Application Key" e a "Device EUI". Com essas informações, o dispositivo envia uma requisição de conexão ao servidor juntamente com um "Device Nonce" (um contador para garantir que não ocorram conexões duplicadas), e, caso os dados estejam corretos e válidos, o servidor retorna a requisição com a confirmação e com alguns dados sobre a rede, que são salvos no dispositivo, como na imagem a seguir.

exemplo-requisicao-resposta-conexao-otaa
Exemplo de Requisição e Resposta de Conexão OTAA
Fonte: Research Gate

A grande vantagem deste tipo de conexão é que as chaves de sessão ("Network Session Key" e "Application Session Key") são geradas somente quando requisitadas, o que aumenta a segurança da conectividade. Entretanto, como o "Device EUI" deve ser único na rede, é necessário configurar cada dispositivo com uma identificação única no mundo. Outro ponto negativo é que o dispositivo deve ser capaz de gerar as chaves de segurança dinamicamente.

O método "ABP", por sua vez, requer apenas que sua sessão seja configurada, através de um "Device Address", uma "Application Session Key" e uma "Network Session Key", que são configurados diretamente no dispositivo. Estes mesmos dados devem ser configurados no servidor, como na próxima imagem.

exemplo-conexao-abp
Exemplo de Conexão ABP
Fonte: Newie Ventures

Nesta configuração, os dispositivos não precisam da autorização prévia da rede, logo não dependem da capacidade de gerar as chaves de segurança dinamicamente. Entretanto, este método acaba sendo menos seguro que o "OTAA", já que as chaves de segurança estão armazenados no dispositivo. Outro ponto importante é que, caso o dispositivo precise mudar de rede, tanto ele quanto a rede devem ser reconfigurados com novos parâmetros de conexão.

Primeira Comunicação com o Módulo

Biblioteca

Para que possamos nos comunicar pela primeira vez com o módulo LoRaWAN Bee, temos que instalar a biblioteca "RoboCore_SMW_SX1276M0", que pode ser encontrada no "Gerenciador de Bibliotecas" da IDE, ou instalada manualmente, baixando o arquivo compactado através do botão abaixo. Caso não saiba como instalar bibliotecas na Arduino IDE, siga os passos deste tutorial.

Download da Biblioteca "RoboCore_SMW_SX1276M0"

Código

Com a biblioteca instalada, copie e cole o código a seguir na Arduino IDE, e então carregue-o para a placa. Vale lembrar que é necessário selecionar corretamente o modelo da placa e a sua respectiva porta serial.

Após carregar o código para a placa, abra o monitor serial e configure-o para as opções "Ambos NL & RC" e taxa de transmissão de 115200 bps.

Comandos "AT"

Agora podemos enviar a nossa primeira mensagem para o módulo, e para isso vamos usar o seu set de comandos AT. O primeiro e mais importante que vamos usar neste tutorial é o AT+DEVEUI ("DEVEUI" é uma abreviação para "Device EUI"), que deve retornar o "Device EUI" do módulo, um código de 16 dígitos hexadecimais (8 bytes), como na imagem abaixo.

resposta-requisicao-device-eui
Resposta de Requisição "Device EUI"

O "Device EUI" representa o endereço do dispositivo para a rede, basicamente como o "MAC Address" da conexão Wi-Fi do ESP32, portanto ele é extremamente importante e único para cada módulo. Anote-o e guarde-o com muito cuidado, pois se perdê-lo, não será possível recuperá-lo.

Em seguida, envie o comando AT+NJM ("NJM" é uma sigla de "Network Join Mode"), para saber para qual método de conexão o seu módulo está configurado. Este comando deve retornar uma resposta como a da próxima imagem.

resposta-requisicao-network-join-mode
Resposta de Requisição "Network Join Mode"

Por padrão os módulos LoRaWAN Bee são configurados como "OTAA" ("1"), mas se o seu módulo retornar "0" ("ABP") ou "2" ("P2P" - "Point to Point"), não se preocupe, pois é possível voltá-lo ao método de fábrica através do comando AT+NJM 1.

Por fim, vamos verificar os canais de conexão do módulo através do comando AT+CH ("CH" é uma abreviatura para "Channel"), e você deve receber uma resposta como a demarcada a seguir.

Note na resposta acima que o módulo possui 71 canais, porém apenas os 8 canais iniciais (de 0 a 7) estão habilitados ("status 1"). Para a conexão com a rede ATC precisamos apenas que estes canais estejam habilitados, portanto, se algum outro canal de seu módulo estiver habilitado, será necessário desabilitá-lo através do comando AT+CH NÚMERO_CANAL status=0. O mesmo vale caso você tenha algum dos 8 canais iniciais desabilitados, porém, para habilitá-lo, utilize o comando AT+CH NÚMERO_CANAL status=1.

Conclusão

Ainda são necessárias diversas configurações do módulo para que possamos nos conectar e enviar a primeira mensagem para a internet usando o IoT DevKit, porém com estas configurações iniciais já podemos avançar com os tutoriais. Posteriormente iremos usar as funções da biblioteca para facilitar a nossa comunicação com o módulo, sem precisar enviar os comandos "AT" manualmente.

Solução de Problenas

Arduino IDE Retornou a Mensagem "#error Use this example with the ESP32"

Esta mensagem é retornada quando o modelo de placa selecionado não está correto, portanto certifique-se que a seleção está para o modelo "ESP32 Dev Module".

Avatar