Primeiros Passos com o Shield LoRaWAN em OTAA
This tutorial is not available in English
Introdução
Com o Shield LoRaWAN da RoboCore, você pode conectar o seu projeto baseado em Arduino à internet, com um alcance que só o protocolo LoRaWAN é capaz de fornecer.
Neste tutorial você verá como enviar mensagens à rede LoRaWAN usando o novo Shield, para poder implementar esta funcionalidade em seus projetos.
Lista de Materiais
Lista completa de produtos
comprarShield para Arduino - LoRaWAN Helix Antenna
BlackBoard UNO R3
Cabo USB AB 1.50m
Atenção: na lista acima foi listado o Shield LoRaWAN Helix Antenna, porém este tutorial também é possível com o Shield LoRaWAN Chip Antenna.
Instalação da Biblioteca
A biblioteca do Shield LoRaWAN está disponível para ser instalada diretamente pelo "Gerenciador de Bibliotecas" da Arduino IDE. Para acessá-lo siga o caminho da imagem abaixo, ou então pressione "Ctrl+Shift+I".
Com o gerenciador aberto, digite "robocore smw sx1262", conforme mostrado na imagem abaixo.
Com a biblioteca listada como na imagem acima, pressione o botão "Instalar" e aguarde alguns instantes. Assim que a instalação estiver finalizada, será exibido "Instalada" ao lado do nome da biblioteca, como na imagem a seguir.
Aproveite que o "Gerenciador de Bibliotecas" está aberto e pesquise por "arduinojson" para instalar a biblioteca "ArduinoJSON", conforme mostrado na imagem abaixo. Esta biblioteca será utilizada posteriormente para auxiliar no envio de mensagens pela rede LoRaWAN.
Teste da Comunicação Serial
Com a biblioteca instalada, abra o exemplo "Bridge", conforme mostrado na próxima imagem, e então carregue-o para a placa base conectada ao Shield LoRaWAN.
Com o código carregado, abra o monitor serial da porta serial corresponde à placa base no seu computador e configure-o para a velocidade de 9600 bps, assim como com a função "retorno de carro". Com o monitor aberto e configurado, envie o comando "AT" e veja se o Shield retorna "OK" como na imagem abaixo.
Com o comando corretamente respondido, envie o comando "AT+DEUI=?" para coletar o Device EUI do seu Shield, para a configuração posterior da ProIoT. Esse comando irá retornar um código de 16 caracteres hexadecimais separados por dois pontos, como na imagem a seguir. Este código é a identificação do seu dispositivo, portanto anote-o e guarde-o, pois ele é importante.
Com isso conseguimos confirmar o funcionamento e coletar a informação necessária para a conexão do Shield com a rede LoRaWAN, e já estamos prontos para prosseguir com o envio de mensagens pela rede. Entretanto, o Shield possui diversos comandos AT que podem ser enviados para configurá-lo, e é possível ver todos os comandos disponíveis neste documento.
Envio de Mensagens pela Rede LoRaWAN
Agora que coletamos o Device EUI necessário para a conexão do Shield à rede LoRaWAN, já podemos prosseguir com a configuração da ProIoT para enviar mensagens à ela. Vale lembrar que é necessário adquirir uma plano ATC para poder conectar o Shield à ela. Portanto, se ainda não possui uma, aproveite para adquirir seguindo os passos deste tutorial. Além disso, certifique-se que está em uma área de boa cobertura da rede ATC pelo mapa abaixo (zonas avermelhadas).
Configurações da Plataforma
Além de adquirir o plano da ATC, para criar um dispositivo na ProIoT, também será necessário criar uma aplicação em uma organização. Então, se ainda não tiver uma, acesse a seção "Organizações" da plataforma e crie uma.
Já para criar um dispositivo, acesse a seção "Dispositivos" e pressione o botão "+ Dispositivo" para criar um novo. Após pressionar este botão, será exibida uma janela para as configurações do novo dispositivo que será criado. Neste momento, selecione a opção "ATC LoRaWAN" na aba de "Conectores", como demarcado na imagem abaixo.
Logo em seguida, serão listadas algumas opções de "Modelo" de dispositivos. Para o Shield LoRaWAN, selecione a opção "Custom Device", como demarcado na imagem a seguir.
Feito isso, serão habilitados os campos de edição na aba "Selecione o protocolo e modelo". Então selecione uma de suas "Aplicações", dê um nome para o seu dispositivo e insira o Device EUI coletado anteriormente, como feito na próxima imagem, por exemplo.
Feito isso, role um pouco a aba de configurações para baixo e, para finalizar, gere um Application EUI aleatório (clicando sobre o botão de uma seta em formato de círculo), selecione o seu plano ATC no campo "Conectividade LoRaWAN", e certifique-se que a "Ativação de Segurança", a "Criptografia de Segurança", a "Classe do Dispositivo" e o "Tamanho do Contador" estão selecionados como "OTAA", "NS", "A" e "2", como na imagem abaixo. Após selecionar a "Criptografia de Segurança" como "NS", será criado um novo campo para criação de um
Com as configurações finalizadas, pressione o botão de confirmação verde para criar o dispositivo. Ele então será listado na seção de "Dispositivos" da plataforma.
Em seguida, temos que criar uma variável para receber as informações que serão enviadas do Shield. Para isso, clique sobre o dispositivo recém criado e acesse a seção lateral "Variáveis". Assim que a seção estiver aberta, clique sobre o botão "+ Variável" e então dê um nome para ela, com o "ALIAS" "Data". O restante dos campos pode ficar em branco ou com a configuração padrão. De modo geral, a configuração da sua variável deve ser semelhante à da imagem abaixo.
Após a criação da variável, acesse a seção "Dashboard" da plataforma para que possamos editar um "Widget" para receber as informações que serão enviadas do Shield. Após acessar a seção "Dashboard", clique sobre o botão "+ Widget" e então selecione a opção "Métrico". Isso abrirá a janela de edição novo "Widget".
Com a janela de edição do "Widget" aberta, selecione a variável criada anteriormente na lista do dispositivo criado, como na próxima imagem.
Feito isso, dê um nome para o "Widget" e configure-o como preferir, com o tamanho da fonte, ícone de exibição, cor de exibição e opção de exibir a última atualização do "Widget", como na imagem abaixo, por exemplo.
Para finalizar, pressione o botão de confirmação verde para que ele seja criado no "Dashboard" da plataforma. Vale lembrar que você pode alterar o tamanho do "Widget" no "Dashboard", se quiser.
Código
Com as configurações da plataforma finalizadas, já podemos gravar o código abaixo para enviar mensagens pela rede LoRaWAN. Lembre-se de, antes de carregar o código para a placa base, alterar o valor das variáveis APPEUI
e APPKEY
com os códigos gerados aleatoriamente pela plataforma. Ambos podem ser copiados da seção "Informações do Dispositivo", como na nesta imagem.
Entendendo o Código
O código se inicia com a inclusão das bibliotecas "RoboCore_SMW_SX1262M0", "SoftwareSerial" e "ArduinoJson" ao código. Em seguida, é criado o objeto LoRaSerial
a partir da biblioteca "SoftwareSerial" e para a comunicação com o Shield. Este objeto é então utilizado para criar o objeto LoRaWAN
a partir da biblioteca "SMW_SX1262M0". Após a criação destes objetos, são declaradas as constantes APPEUI
e APPKEY
, que armazenam os parâmetros Application EUI e Application Key gerados anteriormente na ProIoT.
Para finalizar as declarações globais do código, temos a declaração da variável booleana conectado
, responsável por armazenar o estado de conexão do Shield; a declaração da variável contador
, que será incrementada em uma unidade a cada vez que o botão for pressionado, para o envio de uma mensagem diferente; a variável ALIAS
, que, como o próprio nome diz, armazena o alias da variável criada na plataforma; e, finalmente, a variável PINO_BOTAO
, que armazena o pino conectado ao botão do Shield (pino A0).
Já nas configurações do código, o monitor serial é iniciado na velocidade de 9600 bps e os pinos conectados ao botão do Shield e ao LED L são configurados como entrada com pull-up interno ("INPUT_PULLUP") e como saída com nível lógico inicial baixo ("LOW"), respectivamente.
Em seguida, a comunicação do Shield é iniciada com a velocidade de 9600 pelo comando LoRaSerial.begin(9600)
e o Shield é reiniciado pelo comando LoRaWAN.reset()
. Feito isso, o método de conexão é alterado para OTAA, é coletado o Device EUI do Shield para exibição no monitor serial e são configurados os parâmetros Application EUI e Application Key da rede LoRaWAN no Shield. Para finalizar as configurações do código, as configurações são salvas na memória do Shield, e o Shield inicia a requisição de conexão à rede ("join") pelo comando LoRaWAN.join()
.
Já na repetição do código, verificamos através da condição if (LoRaWAN.isConnected())
se a requisição de conexão do Shield foi aceita pela rede, ou seja, se ele está conectado. Se esta condição for verdadeira, a variável conectado
é atualizada para verdadeiro ("true"), e em seguida é verificado se o botão do Shield foi pressionado com debounce. Caso o botão tenha sido pressionado, a variável contador
é incrementada em uma unidade, e caso ela supere o valor de 255 durante a execução do código (condição if (contador > 255)
), o seu valor é zerado novamente.
Com o valor da variável atualizado, é então criado o objeto json
como instância DynamicJsonDocument
da biblioteca "ArduinoJson", com o tamanho unitário, já que estamos enviando apenas um dado pela mensagem. Em seguida é atrelado ao objeto json
o contador com o nome definido na variável ALIAS
. A variável tamanho_mensagem
é então criada com o valor do tamanho do objeto JSON que foi criado, somando-se uma unidade para considerar o caractere de fim de texto. Em seguida, a variável mensagem
é declarada com o tamanho contido na variável tamanho_mensagem
. Por fim, o comando serializeJson(json, mensagem, tamanho_mensagem)
salva a mensagem JSON criada na variável mensagem
, levando em conta o tamanho de mensagem salvo, e então a mensagem é enviada pelo Shield através do comando LoRaWAN.sendT(1, mensagem)
.
Caso o Shield ainda não esteja conectado (condição else if (!conectado)
), o código apenas mostra atividade imprimindo pontos no monitor serial e aguarda 5 segundos para repetição do código.
O Que Deve Acontecer
Após carregar o código para a placa, abra o monitor serial para monitorar a execução do código. Inicialmente será exibido o Device EUI do Shield, e que as configurações dos parâmetros de conexão do Shield foram alterados e salvos na memória do Shield. Em seguida, será iniciada a tentativa de conexão do Shield à rede e, assim que ele estiver conectado, também será exibido "Conectado!" no monitor serial.
Para enviar uma mensagem pela rede, pressione o botão no Shield. Será exibida a mensagem em formato JSON enviada para a plataforma, como na imagem abaixo.
Juntamente com a exibição da mensagem, será possível observar que após alguns instantes o "Widget" criado no "Dashboard" também será atualizado com o valor enviado pelo Shield, como na imagem a seguir.
Indo Além
Neste tutorial utilizamos o método de conexão OTAA, que é o mais recomendado para dispositivos LoRaWAN, para enviar mensagens para a ProIoT, porém este método consome um "Downlink" do plano para cada tentativa de conexão, o que pode ser um ponto negativo em algumas aplicações. Entretanto, é possível utilizar o método de conexão ABP, que não depende de um "Join" e, portanto, não consome um "Downlink" a cada conexão.
Para entender melhor como usar este outro tipo, você pode alterar o método de conexão do dispositivo criado para ABP, gerar os parâmetros de conexão aleatoriamente e inseri-los no exemplo "SimpleSend_ABP" da biblioteca do Shield.
Além disso, o Shield LoRaWAN também possui a possibilidade de comunicação ponto a ponto (chamada popularmente de "P2P") entre dois ou mais Shields, como abordamos no tutorial Primeiros Passos com o Shield LoRaWAN com P2P.
Conclusão
Neste tutorial vimos como utilizar o método de conexão OTAA com o Shield LoRaWAN e como configurar a ProIoT para receber mensagens.