LoRaWAN - Primeiros Passos de Comunicação
Introdução
Você está precisando conectar o seu projeto à internet, mas o lugar de instalação não possui acesso à conexão cabeada ou a uma rede Wi-Fi? Com o protocolo LoRaWAN você consegue enviar mensagens para a internet sem a necessidade de uma cabo de rede, ou Wi-Fi, já que este protocolo pode alcançar torres de rede a quilômetros de distância.
Neste tutorial iremos aprender de maneira fácil e rápida como iniciar a conexão com a PROIoT e como enviar as primeiras mensagens para a plataforma através do uso dos comandos "AT" do módulo.
Lista de Materiais
Lista completa de produtos
comprarMódulo LoRaWAN Bee V2 Chip Antenna
Bee Explorer Stick
Redes LoRaWAN
Existem redes de LoRaWAN gratuitas, como a da TTN ("The Things Network"), e redes pagas, como a da ATC ("American Tower Corporation"), que estão sendo comercializadas em parte pela PROIoT. Assim como um celular, precisamos de uma rede LoRaWAN para que possamos nos conectar e enviar dados para uma aplicação.
As redes gratuitas não cobram para que você as utilize, porém os seus equipamentos de conexão geralmente são instalados e configurados por pessoas comuns que podem ser especializadas ou não nesta área. Este fator pode ser problemático, já que a conectividade e a estabilidade podem ser comprometidas. Embora algumas redes gratuitas disponibilizam um número ilimitado de "Downlinks" e "Uplinks", a grande maioria limita a quantidade de mensagens que você pode enviar ou receber por um determinado período.
Já as redes pagas oferecem muito mais robustez ao seu projeto, já que os equipamentos de conexão são instalados e gerenciados por profissionais especializados na área. Entretanto, assim como um plano pós pago de celular e como a maioria das linhas gratuitas, elas possuem uma limitação de "Downlinks" e "Uplinks" mensais. Isso não tende a ser um problema para a maioria das aplicações, até porque existem planos com uma boa quantidade de mensagens disponíveis, porém é melhor dimensionar corretamente a quantidade de mensagens para não consumir o pacote de dados mensais antes do final do mês.
É importante ter em mente que o protocolo LoRaWAN foi projetado para transmitir pequenas mensagens de tempos em tempos, pois essa configuração maximiza o tempo de uso da bateria. Isso significa que esse tipo de comunicação é uma ótima opção para ler sensores algumas vezes por dia, por exemplo para monitorar a temperatura e a umidade de um ambiente. No entanto, se as mensagens forem muito grandes (por exemplo para enviar um arquivo) ou se for uma aplicação em tempo real (por exemplo para monitorar uma câmera), então é melhor usar um protocolo mais adequado.
Para este tutorial usaremos uma rede paga ATC para enviar uma mensagem para a plataforma PROIoT, portanto, caso ainda não tenha uma rede ATC, siga os passos de nosso tutorial PROIoT - Compra de Plano ATC LoRaWAN. Mas é importante lembrar que o dispositivo LoRaWAN deve ser usado dentro da área coberta pela ATC, conforme o mapa abaixo.
Configuração da Conexão
A conexão entre o módulo LoRaWAN Bee e a plataforma depende de parâmetros iguais nas duas pontas, portanto é recomendado seguir lado a lado os passos dos sistemas, conforme é explicado na seção a seguir.
Criação do Dispositivo
Antes de iniciarmos a criação e configuração de um dispositivo LoRaWAN, lembre-se que é necessário criar uma "Aplicação" dentro de sua "Organização". Para isso, acesse a seção "Organização" da plataforma, onde será exibido um resumo de sua "Organização", com o número de "Aplicações", "Tokens API", "Gateways", "Perfis - LoRa Privado" e "Perfis - ATC LoRaWAN". Então clique sobre esta janela de resumo, como na primeira imagem abaixo. Caso você ainda não tenha uma "Organização", apenas clique no botão "+ Organização", digite um nome para ela e pressione o botão de confirmação verde. Ao clicar sobre a janela de resumo, você é redirecionado para uma página de configuração da "Organização", mais especificamente para a seção de "Aplicações". Com esta seção aberta, pressione o botão "+ Aplicação", digite um nome para ela e pressione o botão de confirmação verde, como na segunda imagem abaixo.
Assim que a "Organização" e a "Aplicação" estiverem corretamente criadas e configuradas, acesse a seção "Dispositivos" da plataforma para iniciarmos a configuração. Ao acessar essa seção, clique sobre o botão "+ Dispositivo" da página, como na imagem abaixo.
Ao pressionar o botão, é exibida uma janela de criação de um novo dispositivo, como na imagem a seguir.
Neste momento temos de escolher a tecnologia que utilizaremos para conectar o nosso dispositivo à plataforma. Para este tutorial, selecione a opção "LoRaWAN". Após a seleção da tecnologia, temos que selecionar o "Modelo" de dispositivo, e, como o LoRaWAN Bee não está listado nas opções, temos que selecionar a opção "Dispositivo genérico", como na próxima imagem.
Agora que a tecnologia e o modelo de dispositivo estão devidamente configurados, temos que selecionar o tipo de conectividade que usaremos com este dispositivo. No caso deste tutorial, usaremos a opção "Rede ATC LoRaWAN", como na imagem a seguir.
Com a conectividade selecionada, a plataforma irá apresentar uma janela de configuração dos dados do dispositivo, como na imagem abaixo. Com esta janela aberta, digite o nome de seu dispositivo no campo "Nome do Dispositivo". Além do nome do dispositivo, aproveite para selecionar a sua rede ATC adquirida no campo "Conectividade LoRaWAN", antes de conectarmos o LoRaWAN Bee ao computador. Se não houver nenhuma opção nesse campo de conectividade, significa que não há um plano ATC disponível e você deve adquirir um (veja nosso tutorial sobre esse passo a passo).
Agora precisamos descobrir o "Device EUI" de nosso módulo para prosseguir com a configuração do dispositivo na plataforma. Uma opção é usar a identificação que está na etiqueta colada sobre o módulo. Outra forma de obter esse valor é perguntando para o próprio módulo com um comando AT. Para isso precisamos acoplar o LoRaWAN Bee ao XBee Explorer Stick (atente-se à polaridade do módulo para não danificá-lo) e então conectar o conjunto à porta USB de seu computador. Vale lembrar que, assim como a BlackBoard UNO R3 V1.1, o Bee Explorer Stick também requer a instalação do driver FTDI, caso o mesmo já não esteja instalado no seu computador. Com o conjunto conectado ao computador, abra o monitor serial da Arduino IDE na porta serial correspondente de seu Explorer Stick e configure-o para "Ambos NL & RC", com a velocidade de comunicação de 115200 bps (velocidade de comunicação padrão do módulo). Com o monitor aberto e configurado, envie o comando AT+DEVEUI
para descobrir o "Device EUI" de seu LoRaWAN Bee, como na imagem a seguir.
O "Device EUI" é um código de 8 bytes (16 dígitos hexadecimais) que representa o endereço do dispositivo, como o "MAC Address" de dispositivos com conectividade Wi-Fi. Com este código exibido em seu monitor serial, copie-o e cole-o no campo "Device EUI" da plataforma.
Feito isso, crie uma "Application EUI" aleatória, clicando sobre o ícone de uma seta em formato de circunferência, como na imagem abaixo, e então copie este código, clicando sobre o ícone de duas folhas de papel, para que possamos associá-lo ao seu módulo.
Para isso, utilize o comando AT+APPEUI CÓDIGO_APPLICATION_EUI
(lembre-se de alterar "CÓDIGO_APPLICATION_EUI" pelo código de 16 dígitos hexadecimais gerados pela plataforma), como na imagem a seguir.
Este comando apenas retorna um "<OK>", mas caso queira certificar-se que o código foi realmente atrelado ao módulo, basta enviar o comando AT+APPEUI
. Deste modo, o módulo irá retornar o mesmo código enviado anteriormente, com um "<OK>" logo abaixo.
O próximo e último código que temos que gerar para este tutorial é a "Application Key", que como o próprio nome já diz, é a chave de acesso da aplicação. Para gerá-la aleatoriamente, assim como foi feito com a EUI da aplicação, clique sobre o ícone de seta em formato de circunferência, e então copie-a para associá-la ao módulo. Feito isso, envie o comando AT+APPKEY CÓDIGO_APLICATION_KEY
(lembre-se novamente de alterar "CÓDIGO_APLICATION_KEY" pelo código de 32 dígitos hexadecimais), como na próxima imagem.
Assim como o comando AT+APPEUI
, você pode enviar o comando AT+APPKEY
para confirmar se o código foi corretamente associado ao módulo.
Por fim, temos que verificar se o módulo está configurado com o modo de conexão OTAA. Para isso envie o comando AT+NJM
, como na imagem abaixo.
Os módulos LoRaWAN Bee estão configurados por padrão em modo OTAA, resposta "1" do comando AT+NJM
. Portanto, se por algum motivo o seu módulo retornar "0" (ABP) ou "2" (P2P), envie o comando AT+NJM 1
para que o módulo seja configurado para o modo de comunicação OTAA. Este modo de comunicação também é pré-selecionado por padrão na PROIoT, portanto apenas certifique-se que este está corretamente selecionado na configuração do dispositivo, como na imagem abaixo.
Por fim, temos apenas que alterar a criptografia de segurança, de "APP", pré-selecionada pela plataforma, para "NS", assim como o tamanho de contador, de "2" para "4". Além disso, certifique-se que as opções "Classe do Dispositivo" e "Formato de Payload" estão corretamente selecionados como "A" e "Hexadecimal", respectivamente. Após esta configuração, a sua página de edição de dispositivo deve estar parecida com a da imagem abaixo.
Com o dispositivo finalmente configurado, clique sobre o símbolo de confirmação verde na parte de baixo da página para que a criação do dispositivo seja finalizada. Após pressionar o botão, é exibido na lista de "Dispositivos" o dispositivo que acabamos de criar, como na imagem a seguir.
Configuração de Variáveis
Agora que o nosso dispositivo está criado e devidamente configurado, podemos criar uma variável para armazenar os valores que enviaremos posteriormente. Para isso, clique sobre o dispositivo criado e então pressione o botão "+ Variável" para entrar no campo de criação, como na imagem a seguir.
Com esta janela de configuração aberta, digite um nome para a sua variável e então digite sua unidade como "%", por exemplo (você pode definir a unidade que desejar). Além do nome e da unidade, certifique-se que os "Pontos Decimais" estão configurados como "0" e altere a opção "Comprimento Fixo" para "2", pois embora vamos enviar uma mensagem hexadecimal, ela vai ser automaticamente convertida para decimal na plataforma. Após estas configurações, sua variável deve estar como a da imagem abaixo.
Com a variável devidamente configurada, pressione o botão de confirmação verde para que a variável seja criada. Após pressionar o botão, é possível observar a variável na lista do dispositivo.
Edição do Painel
Agora temos que acessar o nosso "Painel", para adicionarmos um "Widget" para exibir as mensagens que enviaremos para a plataforma. Com o painel aberto, selecione o botão "+ Widget" e selecione a opção "Métrico", como na imagem a seguir.
Ao pressionar esta opção, você é direcionado para uma página de edição do "Widget". Nesta janela, configure primeiramente a sua "Organização" e a sua "Aplicação", e então selecione a variável criada neste tutorial, dentro do dispositivo previamente configurado (ela deve aparecer embaixo do nome do dispositivo - "test-device" na imagem). Com estas primeiras configurações feitas, altere o "Nome do Widget" e altere a cor de exibição da variável, se desejar. Por fim, a sua tela de configuração deve estar parecida com a da próxima imagem.
Com a configuração concluída, pressione o botão de confirmação verde, e observe o "Widget" ser adicionado ao seu painel, como na imagem abaixo.
Vale lembrar que você pode editar o tamanho de exibição do "Widget", se desejar.
Envio de Mensagens
Agora que o seu módulo LoRaWAN Bee já está com os dados de segurança configurados, juntamente com a plataforma PROIoT, podemos nos conectar à rede ATC e enviar nossa primeira mensagem. Porém, antes temos que verificar se os canais de conexão do módulo estão habilitados, e para isso envie o comando AT+CH
no monitor serial. O módulo deve retornar algo como a lista a seguir.
AT+CH
0 freq 915200000 drrange 0 to 5 status 1
1 freq 915400000 drrange 0 to 5 status 1
2 freq 915600000 drrange 0 to 5 status 1
3 freq 915800000 drrange 0 to 5 status 1
4 freq 916000000 drrange 0 to 5 status 1
5 freq 916200000 drrange 0 to 5 status 1
6 freq 916400000 drrange 0 to 5 status 1
7 freq 916600000 drrange 0 to 5 status 1
8 freq 916800000 drrange 0 to 5 status 0
9 freq 917000000 drrange 0 to 5 status 0
10 freq 917200000 drrange 0 to 5 status 0
11 freq 917400000 drrange 0 to 5 status 0
12 freq 917600000 drrange 0 to 5 status 0
13 freq 917800000 drrange 0 to 5 status 0
14 freq 918000000 drrange 0 to 5 status 0
15 freq 918200000 drrange 0 to 5 status 0
16 freq 918400000 drrange 0 to 5 status 0
17 freq 918600000 drrange 0 to 5 status 0
18 freq 918800000 drrange 0 to 5 status 0
19 freq 919000000 drrange 0 to 5 status 0
20 freq 919200000 drrange 0 to 5 status 0
21 freq 919400000 drrange 0 to 5 status 0
22 freq 919600000 drrange 0 to 5 status 0
23 freq 919800000 drrange 0 to 5 status 0
24 freq 920000000 drrange 0 to 5 status 0
25 freq 920200000 drrange 0 to 5 status 0
26 freq 920400000 drrange 0 to 5 status 0
27 freq 920600000 drrange 0 to 5 status 0
28 freq 920800000 drrange 0 to 5 status 0
29 freq 921000000 drrange 0 to 5 status 0
30 freq 921200000 drrange 0 to 5 status 0
31 freq 921400000 drrange 0 to 5 status 0
32 freq 921600000 drrange 0 to 5 status 0
33 freq 921800000 drrange 0 to 5 status 0
34 freq 922000000 drrange 0 to 5 status 0
35 freq 922200000 drrange 0 to 5 status 0
36 freq 922400000 drrange 0 to 5 status 0
37 freq 922600000 drrange 0 to 5 status 0
38 freq 922800000 drrange 0 to 5 status 0
39 freq 923000000 drrange 0 to 5 status 0
40 freq 923200000 drrange 0 to 5 status 0
41 freq 923400000 drrange 0 to 5 status 0
42 freq 923600000 drrange 0 to 5 status 0
43 freq 923800000 drrange 0 to 5 status 0
44 freq 924000000 drrange 0 to 5 status 0
45 freq 924200000 drrange 0 to 5 status 0
46 freq 924400000 drrange 0 to 5 status 0
47 freq 924600000 drrange 0 to 5 status 0
48 freq 924800000 drrange 0 to 5 status 0
49 freq 925000000 drrange 0 to 5 status 0
50 freq 925200000 drrange 0 to 5 status 0
51 freq 925400000 drrange 0 to 5 status 0
52 freq 925600000 drrange 0 to 5 status 0
53 freq 925800000 drrange 0 to 5 status 0
54 freq 926000000 drrange 0 to 5 status 0
55 freq 926200000 drrange 0 to 5 status 0
56 freq 926400000 drrange 0 to 5 status 0
57 freq 926600000 drrange 0 to 5 status 0
58 freq 926800000 drrange 0 to 5 status 0
59 freq 927000000 drrange 0 to 5 status 0
60 freq 927200000 drrange 0 to 5 status 0
61 freq 927400000 drrange 0 to 5 status 0
62 freq 927600000 drrange 0 to 5 status 0
63 freq 927800000 drrange 0 to 5 status 0
64 freq 915900000 drrange 6 to 6 status 0
65 freq 917500000 drrange 6 to 6 status 0
66 freq 919100000 drrange 6 to 6 status 0
67 freq 920700000 drrange 6 to 6 status 0
68 freq 922300000 drrange 6 to 6 status 0
69 freq 923900000 drrange 6 to 6 status 0
70 freq 925500000 drrange 6 to 6 status 0
71 freq 927100000 drrange 6 to 6 status 0
<OK>
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
.
Agora que sabemos que todas as funções de nosso módulo estão devidamente configuradas, podemos nos conectar à rede ATC. Para isso basta enviar o comando AT+JOIN
. Este comando irá nos conectar à rede ATC LoRaWAN e você deve receber uma mensagem de resposta como a da próxima imagem.
A conexão só é confirmada através da mensagem [EVENT] JOINED
, portanto, se o módulo retornar qualquer outra mensagem, é sinal que a conexão ainda não foi feita. Talvez o módulo não se conecte na primeira tentativa, o que é normal, mas não desanime, espere algumas tentativas ou consulte a seção Solução de Problemas.
Atenção: cada procedimento de conexão na rede (join) em modo OTAA consome uma mensagem de Downlink para notificar o dispositivo que o acesso foi bem-sucedido.
Como estamos conectados, podemos finalmente enviar nossa primeira mensagem através desta tecnologia. Para isso temos que usar o comando AT+SENDB 1:CÓDIGO_HEX_2
, onde a parte "CÓDIGO_HEX_2" deve ser substituída por um código hexadecimal de dois dígitos, que serão convertidos em decimais na plataforma, como na imagem abaixo (com o comando AT+SENDB 1:25
para enviar o valor decimal 37). Existem algumas ferramentas online, como esta aqui, que permitem que você converta um número decimal em um código hexadecimal. Esta ferramenta pode ser muito útil para sabermos se a mensagem enviada foi corretamente recebida pela plataforma.
Note na imagem acima que, após o envio da mensagem, o módulo retorna algumas informações sobre a conexão e sobre o próprio envio da mensagem. Você pode receber uma resposta semelhante à da imagem acima, porém não se preocupe se ela não for tão detalhada, o importante é que a mensagem seja recebida.
Agora temos que acessar o nosso "Painel" da PROIoT, para verificar se o valor da nossa variável foi alterado, como na imagem a seguir.
Note que a mensagem foi corretamente recebida e convertida pela plataforma, já que a mensagem utilizada como exemplo (AT+SENDB 1:25
) teve seu valor hexadecimal "25" convertido para o decimal "37".
Quando estiver satisfeito com os testes e já tiver enviado corretamente algumas mensagens para a plataforma, utilize o comando AT+RESET
para reiniciar o módulo e para desconectá-lo. Então, quando o módulo retornar <OK>, desconecte o conjunto do computador para desligá-lo.
Conclusão
Neste tutorial damos início aos nossos estudos sobre o envio de mensagens através do protocolo LoRaWAN, onde aprendemos como configurar corretamente o módulo LoRaWAN Bee e a plataforma PROIoT.
Solução de Problemas
Comando "AT+JOIN" Retornou "Send later xxxxx ms. . ."
Caso o seu módulo responda a mensagem "Send later xxxxx ms. . .", é sinal que o seu módulo não conseguiu se conectar à rede, portanto verifique se a configuração do mesmo está de acordo com as configurações da plataforma. Além disso, verifique se os 8 canais iniciais do módulo estão habilitados e que os os demais canais estão desabilitados, assim como se o dispositivo está na área coberta pela rede ATC LoRaWAN.
Caso tudo esteja corretamente configurado e o módulo ainda retorne esta mensagem, não se preocupe, aguarde algumas tentativas e verifique se a conexão é estabelecida. Se mesmo assim não se conectar, reinicie o módulo através do comando AT+RESET
, e tente novamente, pois é comum que os módulos não se conectem na primeira tentativa.
Além disso, verifique se o seu dispositivo está marcado como "CONECTADO" nas configurações do mesmo na plataforma PROIoT, como na imagem abaixo. Isso deve estar configurado por padrão, mas se por algum motivo não estiver marcado, selecione esta opção, reinicie seu módulo, tente novamente se conectar e observe os resultados.
Se mesmo assim não conseguir se conectar a plataforma, encaminhe um e-mail para suporte@robocore.net, com o número de seu pedido e um pequeno log de todos os comandos "AT" enviados com suas respectivas respostas.
Comando "AT+SENDB" Retornou "<Failed: AT_PARAM_ERROR>"
Se o seu módulo retornar "<Failed: AT_PARAM_ERROR>" após o envio de sua mensagem, é sinal que houve algum erro de digitação/conversão na hora de enviar a mensagem. Esta mensagem pode estar atrelada ao fato de ter sido usado um código com número ímpar de caracteres ("AT+SENDB 1:123", por exemplo), ou pelo uso de caracteres inválidos ("AT+SENDB 1:GH", por exemplo). Portanto, tente enviar uma mensagem novamente, porém desta vez com um código que tenha o número correto de caracteres e sem caracteres inválidos.
Mensagem Enviada não Recebida pela Plataforma
Caso você tenha enviado a mensagem e o valor do "Widget" da plataforma não foi atualizado, verifique que você usou os mesmos parâmetros do protocolo na plataforma e no módulo LoRaWAN Bee e que o módulo conectou na rede (mensagem "[EVENT] JOINED"). Além disso, certifique-se de ter utilizado o comando correto para enviar a mensagem ("AT+SENDB") e com a porta da aplicação correta ("1").