O objetivo deste BLOG é demonstrar como é possível enviar pacotes para a rede LoRaWAN através de comandos AT enviados ao módulo WISOL LSM110A.
Serão publicados dados simulando a tensão de uma bateria, alguns flags e intensidade de luz, valores de 0 a 255 e enviados pelo ESP32 a cada 10 segundos ao servidor LoRaWAN CHIRPSTACK (CLASS A, OTAA) e então encaminhado ao SERVIDOR ThingsBoards.
Para envio dos comandos AT, será programado em BASIC ANNEX.
LSM110A Starter KIT
Módulo LSM110A
O LSM110A é um módulo de última geração que integra o STMicroelectronics STM32WL. É muito menos consumo atual para o dispositivo IoT para estender a vida útil da bateria. E, também suporta ambas as tecnologias – Sigfox e LoRa – com o próprio módulo LSM110A.
Grave com o STM32 Programmer o BOOTLOADER no LSM110A
Assim, pode-se transferir o programa via Serial, através dos pinos PA2 e PA3 do LSM110A.
RAK3272-SiP_latest_final.hex
CHIRPSTACK
ChirpStack é um Servidor de Rede LoRaWAN de código aberto que pode ser usado para configurar redes LoRaWAN. O ChirpStack fornece uma interface web para o gerenciamento de gateways, dispositivos e inquilinos, bem como para configurar integrações de dados com os principais provedores de nuvem, bancos de dados e serviços comumente usados para lidar com dados de dispositivos. O ChirpStack fornece uma API baseada em gRPC que pode ser usada para integrar ou estender o ChirpStack.
BASIC ANNEX RDS
Best Embedded Basic Interpreter
ESP-NOW, BLE, MQTT...ÓTIMO PARA IoT
Veja o HELP do BASIC ANNEX RDS
Veja também FORUM
INTRODUÇÃO AO ANNEX BASIC
ANNEX WI-FI RDS é um poderoso interpretador de scripts para o popular módulo WI-FI ESP32 (u-BLOX NINA W106).
O módulo pode ser gerenciado com um IDE WEB dedicado e um conjunto de utilitários AnnexToolKit associado.
O ANNEX WI-FI RDS fornece as seguintes funcionalidades principais:
- Servidor web assíncrono baseado em Websockets
- Servidor web muito rápido/servidor de arquivos
- Apenas uma porta TCP necessária para http e websockets
- IDE integrado
- Pode ser programado usando seu navegador web (mesmo com um telefone/tablet)
- Pontos de interrupção, execução imediata de comandos, exibição de variáveis, passo único.
- Ajuda sensível ao contexto disponível pressionando a tecla F2
- Atualização OTA (Over the Air)
- Poderoso utilitário de faca suíça associado AnnexToolKit
- Programação de flash simplificada
- Backup/restauração (de/de arquivos, para/de zip)
FUNCIONALIDADES
Variáveis de dupla precisão de ponto flutuante
Variáveis de string com tamanho ilimitado
Matrizes multidimensionais (pontos flutuantes ou string)
Manipulação de eventos assíncronsos
Manipulação de erros
I/O em todos os pinos disponíveis, incluindo PWM/SERVO
Controladores PID
Contadores de frequência
Entrada ADC analógica
Geração de tons
Suporte para SPI e I2C
Suporte protocolos TCP e UDP para comunicações
Suporte para envio de e-mails usando servidores SSL SMTP
Suporte para comunicações AJAX
Suporte para comunicações ESP-NOW
Suporte para comunicações MQTT
Suporte para transferência de arquivos FTP
Suporte algoritmos IMU Fusion 6 DOF e 9 DOF (Madgwick e Mahony)
Forte integração com o javascript permitindo trocas entre script Básico e navegador web
Uma paleta completa de funções/comandos
Mais de 300 Comandos/Funções disponíveis
Suporte para os seguintes módulos/componentes
- Sensores de temperatura/umidade DHT11, DHT21 ou DHT22
- Sensor de temperatura DS18B20
- LCD HD44780 com módulo de interface I2C (1, 2 ou 4 linhas com 16 ou 20 chars por linha)
- Display LCD baseado no chipset ST7920 com monocromático de 128x64 pixels
- Display OLED baseado no chipset SSD1306 ou SH1106 com monocromáticos 128x64
- Display TFT baseado em chipset ILI9341 com 320x240 pixels e 16 bits cores
- Exibição TM1637 de 4 dígitos de 7 segmentos
- TM1638 8 dígitos 7 segmentos display incluindo 8 leds e 8 botões
- Exibição max7219 de 8 dígitos de 7 segmentos
- Módulos de exibição de matriz de ponto MAX7219 8x8
- Tiras led Neopixel WS2812
- Tela de matriz de pontos Neopixel WS2812 8x8
- Módulo PWM/SERVO PCA9685
- Interface infravermelha com muitos protocolos RC (transmissão e recepção)
- Módulo RTC (DS1307 ou DS3231)
- Sensor ultrassônico HC-SR04 para medição de distância
- Sensor de orientação absoluta BNO055
- BME280 Sensor combinado de umidade e pressão
- Proximidade Digital APDS9960, Luz Ambiente, RGB e Sensor de Gestos
PRIMEIROS PASSOS
- Descompacte o pacote do Annex WI-Fi Basic para uma pasta de sua escolha.
- Conecte o dispositivo ESP à porta Com serial do computador.
- Execute o AnnexToolKit.exe da pasta pai descompactada.
- Selecione o tipo de módulo, porta de comunicação e velocidade (taxa de transmissão) apropriados.
- Se o seu dispositivo ESP não for capaz de 'flash automático', inicie-o no modo de flash manualmente (gpio0 a 0v na inicialização).
- Clique no botão amarelo 'Flash Firmware + Dados' se estiver fazendo um flash pela primeira vez e siga as instruções na tela.
- Após a conclusão bem-sucedida, o dispositivo será reinicializado e executará o novo firmware.
- Conecte o wi-fi ao ESP SSID que aparecerá na lista de computadores de SSIDs Wifi disponíveis (leva alguns segundos).
- Navegue até 192.168.4.1 para abrir a janela Saída padrão e, a seguir, clique com o botão direito do mouse no botão Editor para abri-lo em uma nova guia.
Estes são os primeiros passos para começar:
Faça o download do ANNEX TOOLKIT para u-BLOX NINA W106 (ESP32), senha: annex
Abra o AnnexToolKit, selecione a Porta Serial, clique em Conectar e verifique o endereço IP mostrado na janela Serial Monitor. No exemplo foi escolhido o botão verde Flash Firmware ESP32 Only
Vendo se o boot ocorreu dentro do esperado
Neste caso, o Endereço é 192.168.1.8 porque foi pré-configurado para se conectar ao meu roteador wi-fi, caso contrário o endereço IP será padrão para 192.168.4.1
Veja como pegar IP da sua REDE (modo Station)
Procurando e se conectando no ANNEX
Acessando 198.168.4.1 (IP inicial do ANNEX)
Coloque o SSID e SENHA de seu Access Point
Obtendo o IP da sua Rede Local
Uma vez configurado, ele entrará em sua REDE
Abra uma janela do navegador da Web e selecione o endereço IP do módulo. Clique em Editor
Agora você pode simplesmente digitar seu programa e salvá-lo no disco interno.
Podemos começar com um programa muito simples:
Digite print "Hello World" na janela do editor e clique em Save as, nomeie o programa /program/test.bas e clique em Save
Você pode ver na janela Serial Monitor que o arquivo foi salvo
A ajuda sensível ao contexto on-line está disponível para qualquer comando Annex. Isso requer que o computador seja conectado ao dispositivo e à internet ao mesmo tempo. Assim, o computador precisa de 2 interfaces de rede (uma para o dispositivo e outra para internet), ou o dispositivo deve ser configurado para logon ao seu roteador wi-fi para que ele esteja na mesma sub-rede que a conexão com a internet.
Ajuda online é muito fácil de usar, se você quiser ajuda para o comando PRINT, por exemplo, basta colocar o cursor na palavra imprimir na janela de edição e pressionar a tecla F2.
Esta janela pop-up aparecerá:
Agora você pode executar o programa clicando no botão Run
Na janela Serial Monitor você verá o resultado
ESCREVENDO Hello SmartCore no TERMINAL COM A INSTRUÇÃO Print
THINGSBOARD
O ThingsBoard é uma plataforma IoT de código aberto para coleta, processamento, visualização e gerenciamento de dispositivos de dados.
Ele permite a conectividade de dispositivos por meio de protocolos IoT padrão do setor - MQTT, CoAP e HTTP e oferece suporte a implantações locais e na nuvem. O ThingsBoard combina escalabilidade, tolerância a falhas e desempenho para que você nunca perca seus dados.
CRIAÇÃO DO DEVICE E INTEGRAÇÃO
Faça login na sua conta no servidor demo.thingsboard.io ou na sua própria instância do ThingsBoard. SOMENTE VERSÃO APAGA ACEITA INTEGRAÇÃO
Criação do Device
Campos do JSON recebido (Atributos)
Obtido do Script Uplink (variáveis)
Script
Nome do Device deve ser o mesmo declarado no ChirpStack
Vínculo com Pacote LoRaWAN com JSON
Extração variáveis
Eventos
Requisição HTTP
CONEXÃO ENTRE O ESP32 E LSM110A
LÓGICA DO PROGRAMA BASIC ANNEX
AT+DEVEUI=00xxE115xx1Fxx0A
AT+APPKEY=A614D59963A0861EDF2702AE6F0E1AD6
AT+BAND=6
AT+MASK=0002
AT+CLASS=A
AT+JOIN=1:0:10:8
AT+CFM=1
loop
se já fez Join AT+NJS=? retorna 1, então
você pode enviar pacote AT+SEND=2:112233
caso contrário
faça Join AT+JOIN=1:0:10:8
caso contrário
faça Join AT+JOIN=1:0:10:8
fim se
verifica se há algum erro para reenvio dos comandos AT
aguarda downlink de pacotes
aguarde intervalo para o próximo pacote
fim loop
PROGRAMA
ERRORS_AT_NO_NETWORK_JOINED = 0
JOINED$ = "NO"
FAIL$ = "NO"
fail = 0
WDT = 0
pin.mode 12, output : pin(12) = 0
pin.mode 2, output : pin(2) = 0
pin.mode 5, output : pin(5) = 0
pin.mode 18, output : pin(18) = 0
pin.mode 19, output : pin(19) = 0
pin.mode 23, output : pin(23) = 0
serial2.mode 115200, 13, 15
onserial2 rec2
timer0 1000, mytimer_wdt
pause 1000
gosub RESET_LSM110A
gosub boot
do
printAT "AT+NJS=?"
pause 19500
if JOINED$ = "YES" then gosub joined
if FAIL$ = "YES" then gosub boot
loop
END
' -------------------
boot:
ERRORS_AT_NO_NETWORK_JOINED = 0
JOINED$ = "NO"
FAIL$ = "NO"
pin(2) = 0
pause 20000 ' Pause enough to receive the JOIN
if JOINED$ = "YES" then return
printAT "AT+NWM=1" ' enable LoRaWAN
printAT "AT+NJM=1" ' OTA
printAT "AT+LINKCHECK=2" ' enable linkcheck message
printAT "AT+DEVEUI=0080e115051fd80a" ' DEV EUI
printAT "AT+APPKEY=a614d59963a0861edf2702ae6f0e1ad6" ' APP KEY
printAT "AT+BAND=6" ' AU915
printAT "AT+MASK=0002" ' MASK (regional parameters)
printAT "AT+CLASS=A" ' CLASS A
printAT "AT+CFM=0" ' no confirmation downlink
printAT "AT+TXP=14" ' TX POWER 14
printAT "AT+ADR=1" ' adaptative data rate
printAT "AT+PNM=1" ' private network
printAT "AT+JOIN=1:0:10:8" ' auto join
return
' -------------------
joined:
pin(2) = 1
FAIL$ = "NO"
print "Sending Package"
printAT "AT+MASK=0002"
a$= STR$(rnd(255), "%02x", 1)
b$= STR$(rnd(255), "%02x", 1)
c$= STR$(rnd(255), "%02x", 1)
package$= "AT+SEND=2:" + a$ + b$ + c$
print package$
printAT package$
return
' -------------------
rec2:
wdt = 0
r$ = serial2.input$
print r$
fail = 0
if instr(r$, "AT_NO_NETWORK_JOINED") > 0 then incr ERRORS_AT_NO_NETWORK_JOINED
if ERRORS_AT_NO_NETWORK_JOINED = 3 then fail = 1
if fail = 1 then
FAIL$ = "YES"
JOINED$="FALSE"
ERRORS_AT_NO_NETWORK_JOINED = 0
gosub RESET_LSM110A
return
endif
if instr(r$, "+EVT:LINKCHECK") > 0 then print "Package Sent"
rem of who is the JOINED text ?
if instr(r$, "JOINED") > 0 then
if instr(r$, "AT_NO_NETWORK_JOINED") = 0 then
PRINT "CONGRATULATIONS, JOINED"
JOINED$="YES"
return
ENDIF
endif
if instr(r$, "+EVT:RX_1") > 0 then
s$= mid$(r$, instr(r$, ":") + 1)
s$= mid$(s$, instr(s$, ":") + 1)
s$= mid$(s$, instr(s$, ":") + 1)
s$= mid$(s$, instr(s$, ":") + 1)
s$= mid$(s$, instr(s$, ":") + 1)
s$= mid$(s$, instr(s$, ":") + 1)
s$= left$(s$,instr(s$, "+EVT") - 1)
if instr(s$, "31") > 0 then pin(23) = 1
if instr(s$, "32") > 0 then pin(19) = 1
if instr(s$, "33") > 0 then pin(18) = 1
if instr(s$, "34") > 0 then pin(5) = 1
if instr(s$, "35") > 0 then pin(23) = 0
if instr(s$, "36") > 0 then pin(19) = 0
if instr(s$, "37") > 0 then pin(18) = 0
if instr(s$, "38") > 0 then pin(5) = 0
endif
return
' -------------------
SUB printAT(message$)
print2 message$ + chr$(13) + chr$(10)
pause 500
END SUB
mytimer_wdt:
incr wdt
if wdt = 3600 then
wdt = 0
gosub RESET_LSM110A
end if
return
RESET_LSM110A:
pin(12) = 1
pause 1
pin(12) = 0
pause 1
return
Execução
ENVIANDO PACOTES
LOG
DADOS NO THINGSBOARD
Campos do Script Uplink
VÍDEO
DOWNLINK PARA LIGAR RELAY 4
CIRCUITO DE TESTES
ESP32 conectado ao LSM110A
GATEWAY LoRaWAN
ERRATA:
Fontes:
Dúvidas
FORUM
Sobre a SMARTCORE
A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portfólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS / GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
Mais detalhes em www.smartcore.com.br
Nenhum comentário:
Postar um comentário