SUPORTE TÉCNICO
De segunda à sexta pelo e-mail:
suporte@robocore.net
CENTRAL DE ATENDIMENTO
De segunda à sexta das 8:00 às 17:30
(11) 3522-7626 / vendas@robocore.net
Retornar
ao topo

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


Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


lucasgb7_ks
date Enviado: 2021-09-01 11:28:06
Meu módulo fica imprimindo toda hora: "?". Quando eu digito os comandos ele parece ignorar e continua imprimindo isso.

Giovanni5
date Enviado: 2021-09-01 12:01:52
lucasgb7_ks
Nós recebemos o seu e-mail, e prosseguiremos com o suporte através daquele canal.

Spsilvestre
date Enviado: 2021-06-24 18:46:10
Mesmo problema aí do colega abaixo... logo depois de configurar tudo pra 0, parece que a placa dá um reboot automático:

00:02:43.527 RxConfig 69 923300000 bw 2 sf 12
Send JOIN_REQ Port 0 Size 0 Adr 1 AdrAckReq 0 Ack 0 Cnt 0
00:02:44.613 TxConfig 70 925500000 bw 2 sf 8 pwr 30
00:02:44.656 TxDone
00:02:49.644 RxConfig 70 926900000 bw 2 sf 7
00:02:50.648 RxConfig 70 923300000 bw 2 sf 12
00:02:51.732 TxConfig 5 916200000 bw 0 sf 12 pwr 30
00:02:53.228 TxDone
00:02:58.226 RxConfig 5 926300000 bw 2 sf 12
00:02:59.236 RxConfig 5 923300000 bw 2 sf 12
Send later 140169 ms ...

Vou mandar o e-mail tb..

Giovanni5
date Enviado: 2021-06-25 08:10:17
Spsilvestre
Spsilvestre sem problemas, aguardamos seu retorno também. Por gentileza nos envie um log dos comandos enviados até esse "reset" mencionado, para que possamos entender um pouco melhor o comportamento do módulo.

saulohsp
date Enviado: 2021-06-24 16:29:43
Novo problema:

Desabilitei todos os canais, porém por algum motivo, do 64 ao 71 fica sempre voltando para status 1.

64 freq 915900000 drrange 6 to 6 status 1
65 freq 917500000 drrange 6 to 6 status 1
66 freq 919100000 drrange 6 to 6 status 1
67 freq 920700000 drrange 6 to 6 status 1
68 freq 922300000 drrange 6 to 6 status 1
69 freq 923900000 drrange 6 to 6 status 1
70 freq 925500000 drrange 6 to 6 status 1
71 freq 927100000 drrange 6 to 6 status 1

Giovanni5
date Enviado: 2021-06-24 16:56:17
saulohsp
Encaminhe por gentileza um e-mail para supore@robocore.net, com algumas fotos do Kit recebido, principalmente do módulo LoRaWAN Bee, e um pequeno "log" das respostas obtidas ao enviar os comandos <AT+DEVEUI>, <AT+REGION>, <AT+CH> e <AT+NJM>.

saulohsp
date Enviado: 2021-06-24 15:06:43
Meu sistema está diferente, ao digitar o comando AT+CH eu não tenho retorno de 71 canais, porém de apenas 15. Os valores da frequência 7 me parecem estranhos:

0 freq 922100000 drrange 0 to 5 status 1
1 freq 922300000 drrange 0 to 5 status 1
2 freq 922500000 drrange 0 to 5 status 1
3 freq 922700000 drrange 0 to 5 status 1
4 freq 922900000 drrange 0 to 5 status 1
5 freq 923100000 drrange 0 to 5 status 1
6 freq 923300000 drrange 0 to 5 status 1
7 freq 0 drrange 0 to 0 status 1

Giovanni5
date Enviado: 2021-06-24 15:21:38
saulohsp
Talvez o seu módulo tenha voltado para os padrões de fábrica por algum motivo. Envie o comando <AT+REGION>, e observe se o módulo retorna "6". Se for esse o caso, envie logo em seguida <AT+REGION 1>. Isso fará com que o módulo volte para o padrão Australiano (usado no Brasil), e habilite os 72 canais. Feito isso, será necessário desabilitar os canais de 8 à 71.

saulohsp
date Enviado: 2021-06-24 15:21:57
saulohsp
Segue abaixo o restante das linhas:

8 freq 0 drrange 0 to 0 status 0
9 freq 0 drrange 0 to 0 status 0
10 freq 0 drrange 0 to 0 status 0
11 freq 0 drrange 0 to 0 status 0
12 freq 0 drrange 0 to 0 status 0
13 freq 0 drrange 0 to 0 status 0
14 freq 0 drrange 0 to 0 status 0
15 freq 0 drrange 0 to 0 status 0

<OK>

saulohsp
date Enviado: 2021-06-24 15:23:47
saulohsp
Deu certo. Obrigado

jvdl
date Enviado: 2021-04-24 14:35:26
APÓS DIGITAR O COMANDO AT+DEVEUI ESTÁ RETORNANDO 00000000000000000000 E NÃO O MEU DEVEUI
O QUE PRECISO ALTERAR?

Giovanni5
date Enviado: 2021-04-26 08:31:57
jvdl
Aparentemente o seu módulo perdeu o "Device EUI" gravado por algum motivo, mas ele pode ser regravado enviando o comando "AT+DEVEUI deveui", e substituindo a palavra "deveui" pelo código que está presente na etiqueta do chip do módulo (código de 16 caracteres que contém números e letras).

jvdl
date Enviado: 2021-05-08 13:54:39
jvdl
OK, obrigado! Deu certo

hmendes.88
date Enviado: 2021-01-09 17:37:22
nao consigo baixar a biblioteca da lorawan

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>0A22E474597111FA</RequestId>
<HostId>HaLMV4eyk7XB5+XYwN4BVJyXm3z+eTegCd4CyjN74X2fHF4KjdtKwqf3kGKNFCZAWDolYxKXlwc=</HostId>
</Error>

Giovanni5
date Enviado: 2021-01-11 08:12:32
hmendes.88
Qual navegador você está usando? A biblioteca do LoRaWAN Bee está disponível para download, então é possível que o seu problema esteja atrelado ao navegador usado, portanto tente usar outro navegador para fazer o download. Se continuar com dificuldades, você pode baixar a biblioteca diretamente pelo "Gerenciador de Bibliotecas" da IDE, ou através de nosso diretório do GitHub (https://github.com/RoboCore/RoboCore_SMW-SX1276M0).