domingo, 19 de novembro de 2023

LSM110A - COMANDOS AT (LORAWAN - OTA) - RAK LIB - ANNEX BASIC - UPLINK APENAS DE DADOS ESTÁTICOS

       

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á publicada uma sequência de bytes AAAAAAAA a cada 10 segundos na rede LoRaWAN CHIRPSTACK (CLASS A, OTAA).

Para envio dos comandos AT, será utilizado o ESP32, o qual será programado em BASIC ANNEX.


LSM110A - WISOL

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.

Você pode trocar Sigfox ou LoRa com ele para que você também possa reduzir o custo. É altamente otimizado para solução de IoT (Alto Consumo de Energia, Baixo Custo)

BREAKOUT para testes

Esquema Elétrico - últimas correções





PLACA MONTADA



CONEXÃO COM ST-LINK V2 E UART


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 


Agora você pode se divertir em experimentar qualquer programa usando a mesma lógica!

ESCREVENDO Hello SmartCore no TERMINAL COM A INSTRUÇÃO Print



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
       fim se
       verifica se há algum erro para reenvio dos comandos AT
      aguarde intervalo para o próximo pacote
fim loop

PROGRAMA

ERRORS_LINKCHECK = 0 JOINED$ = "NO" FAIL$ = "NO" fail = 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 gosub boot do printAT "AT+NJS=?" pause 19500 if JOINED$ = "YES" then gosub joined if FAIL$ = "YES" then gosub boot loop END ' ------------------- boot: ERRORS_LINKCHECK = 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" printAT "AT+SEND=2:AAAAAAAA" return ' ------------------- rec2: r$ = serial2.input$ print r$ fail = 0 if instr(r$, "AT_NO_NETWORK_JOINED") > 0 then fail = 1 if instr(r$, "AT+NJS=0") > 0 then fail = 1 if instr(r$, "+EVT:SEND_CONFIRMED_FAILED") > 0 then fail = 1 if instr(r$, "+EVT:JOIN_FAILED_RX_TIMEOUT") > 0 then fail = 1 if instr(r$, "+EVT:LINKCHECK:1:0:0:0:0") > 0 then incr ERRORS_LINKCHECK if ERRORS_LINKCHECK = 3 then fail = 1 if fail = 1 then FAIL$ = "YES" JOINED$="FALSE" ERRORS_LINKCHECK = 0 return endif if instr(r$, "+EVT:LINKCHECK") > 0 then print "Package Sent" if instr(r$, "JOINED") > 0 then PRINT "CONGRATULATIONS, JOINED" JOINED$="YES" return 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

Execução

ENVIANDO PACOTES

LOG

CHIRPSTACK

Recebimento do Pacote LoRaWAN

Pacote LoRaWAN - BASE64

AAAAAAA enviado pelo ANNEX BASIC

VÍDEO


CIRCUITO DE TESTES

ESP32 conectado ao LSM110A

GATEWAY LoRaWAN

Dragino

Thanks to Fernando Perez to remake the code :)

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