quinta-feira, 29 de julho de 2021

u-BLOX NINA W106 SENDO PROGRAMADO EM BASIC ANNEX RDS -MANDANDO TEMPERATURA PARA O SERVIDOR u-BLOX THINGSTREAM.IO - SSL

 u-BLOX NINA W106 SENDO PROGRAMADO EM BASIC ANNEX RDS  -MANDANDO TEMPERATURA PARA O SERVIDOR u-BLOX THINGSTREAM.IO - SSL


O objetivo deste BLOG é demonstrar como é possível programar o módulo u-BLOX NINA W106 (ESP32) no starter kit EVK-NINA-W1 com a linguagem BASIC ANNEX WiFi RDS (1.43.5) e transmitir os dados coletados (temperatura - Random) para um servidor MQTT da u-BLOX (mqtt.thingstream.io) via WIFI, pela porta 8883 (SSL). Os  dados são tratados por uma poderosa ferramenta da u-BLOX chamada FLOW.

u-BLOX NINA W106

Wi-Fi 802.11b/g/n
Dual-Mode Bluetooth v4.2
Poderoso suporte de CPU aberta para aplicativos personalizados
Tamanho pequeno e várias opções de antena
Pino compatível com outros módulos NINA
Certificação global
Módulo baseado no ESP32, com 4MB FLASH

SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifó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

SOBRE A LINGUAGEM BASIC

BASIC (acrônimo para Beginner's All-purpose Symbolic Instruction Code; em português: Código de Instruções Simbólicas de Uso Geral para Principiantes) é uma linguagem de programação, criada com fins didáticos, pelos professores John George Kemeny, Thomas Eugene Kurtz e Mary Kenneth Keller em 1964 no Dartmouth College.

Basic pode ser uma opção de linguagem para se aprender lógica, uma vez que foi desenvolvida em alto nível (próxima da linguagem humana). Além da sua relativa facilidade de criar aplicações de forma simples e rápida.

BASIC também é o nome genérico dado a uma grande família de linguagens de programação derivadas do BASIC original. Provavelmente existem mais variações de BASIC do que de qualquer outra linguagem de programação.

BASIC ANNEX RDS

ESP-NOW, BLE, MQTT...ÓTIMO PARA IoT

Veja o HELP  do BASIC ANNEX RDS

Veja também FAQ


MQTT

Para os dispositivos de Internet das Coisas (IoT), a conexão com a Internet é um requisito. A conexão com a Internet permite que os dispositivos trabalhem entre si e com serviços de backend. O protocolo de rede subjacente da Internet é o TCP/IP. Desenvolvido com base na pilha TCP/IP, o MQTT (Message Queue Telemetry Transport) tornou-se o padrão para comunicações de IoT.



 É um protocolo de mensagens de publicação/assinatura, extremamente simples e leve, projetado para dispositivos restritos e redes de baixa largura de banda, alta latência ou não confiáveis. Os princípios de design são minimizar a largura de banda da rede e os requisitos de recursos do dispositivo, ao mesmo tempo em que tentam garantir a confiabilidade e algum grau de garantia de entrega. Esses princípios também acabam por tornar o protocolo ideal do emergente mundo "máquina para máquina" (M2M) ou "Internet das Coisas" de dispositivos conectados, e para aplicativos móveis onde a largura de banda e a bateria estão em um prêmio.

ANNEX implementa o protocolo com as seguintes características:

- Pode publicar mensagens QoS 0, QoS 1 ou QoS 2.

- Pode se inscrever em QoS 0, QoS 1 ou QoS 2.

- O tamanho máximo da mensagem é 1.024 caracteres

- O intervalo de manutenção de atividade é definido para 120 segundos

- O tempo limite da rede é definido para 10 segundos

- O cliente usa MQTT 3.1.1

Se a conexão MQTT com o servidor remoto for perdida, o módulo tentará se reconectar automaticamente.

Ao usar conexões SSL, pode ser necessário usar certificados/chaves privadas.

Os certificados SSL desempenham um papel importante ao habilitar a segurança. 

Esses certificados / chaves privadas podem ser armazenados em uma variável de sequência e fornecidos como argumentos para a função MQTT.certif. O melhor é armazená-los em arquivos de texto e entrar em uma variável de string usando FILE.READ $

Thingstream
Conheça ThingStream, servidor MQTT da U-BLOX
Implementa também SSL e SN-MQTT

ublox


INTERPRETADOR ?

O interpretador básico funciona através da leitura de um arquivo de script salvo no sistema de arquivamento em disco local esp.

Este é o modo padrão se nenhum SDcard externo estiver conectado ao u-BLOX NINA W106.

Além disso, o Annex32 pode usar um SDcard externo como sistema de arquivos, permitindo até 16 Gbytes de espaço em disco.

Durante a inicialização, se um SDcard externo for detectado, ele será conectado automaticamente e usado como o sistema de arquivos padrão, caso em que o sistema de arquivo interno não será usado.

Como o u-BLOX NINA W106 contém uma boa quantidade de RAM, o script do usuário é copiado do disco para uma área dedicada na memória RAM onde é executado, junto com a lista das linhas do programa, os rótulos dos ramos e a lista do usuário definido sub-rotinas ..

Isso usa mais RAM em comparação com outras abordagens, mas permite uma execução mais rápida do programa.

Outra consideração de desempenho é que o u-BLOX NINA W106 deve ser capaz de executar várias atividades em segundo plano (servidor web, servidor de arquivos, etc.), portanto, precisa de memória livre suficiente para executar tais tarefas, e essas tarefas paralelas obviamente terão um impacto no desempenho do script ..

Portanto, em termos de desempenho, o interpretador não é particularmente rápido, mas deve ser rápido o suficiente para a maioria das tarefas que você pode exigir. 

Comandos/Eventos MQTT do BASIC Annex RDS

FUNCTIONS / COMMANDS

DESCRIPTION

Ret = MQTT.Setup(server$, [debug])

Setup the MQTT communications.

Server$ is the MQTT server url

‘debug’, if set to 1, enable some useful debug messages

This function clears all the existing certificates and PSK

Returns 258 at the first initialisation and then 0

Ret = MQTT.Certif(cert_pem$ [,client_cert_pem$] [,client_key_pem$])

Set the SSL certificates.

‘cert_pem$’ is used for the main server authorisation

‘client_cert_pem’ and ‘client_key_pem$’ are used for a more complex authorisation scheme (for advanced users)

When setting the certificates, the PSK will be removed

Ret = MQTT.PSK(psk_hint_key$)

Set the PSK as an alternative to certificate verification.

When setting this PSK all the certificates will be removed

Ret = MQTT.Connect(login$, pass$ [id$])

Connect to the server using the provided login and password.

Optionally id$ permit to define an arbitrary ID

Returns 0 if OK

Ret = MQTT.Connect("", "", [id$])

Connect to the server without identification

Optionally id$ permit to define an arbitrary ID

Returns 0 if OK

Ret = MQTT.Disconnect[()]

Disconnects from the MQTT server

Returns 0 if OK

Ret = MQTT.Publish(topic$, message$ [Qos], [retain])

Publish a string message in the specified topic

Qos can be 0, 1 or 2; if not defined defaults to 0

‘retain’, if set to 1, the message is retained

Returns the msg_id of the message sent

Ret = MQTT.Subscribe(topic$ [,Qos])

Subscribes to messages published to the specified topic.

Qos can be 0, 1 or 2; if not defined defaults to 0

Returns 0 if OK

Ret = MQTT.UnSubscribe(topic$)

Unsubscribes from the specified topic

Returns 0 if OK

Ret= MQTT.Connected[()]

Returns the current connection status.

Returns 1 if connected or 0 if disconnected

Ret = MQTT.Status[()]

Returns the current status. It can be:

    MQTT_STATE_INIT = 0

    MQTT_STATE_DISCONNECTED = 1

    MQTT_STATE_CONNECTED = 2

    MQTT_STATE_WAIT_RECONNECT = 3

OnMQTT label

Define a label where the program will jump when an MQTT message is received

Ret$ = MQTT.Message$

Returns the MQTT message received

Ret$ = MQTT.Topic$

Returns the MQTT topic received or the event name.

The event can be:

 

Value

Event

_BEFORE_CONNECT_

Raised before the connection is done. Useful to determine if the module is trying to (re)connect

_CONNECTED_

Raised when the connection is done

_DISCONNECTED_

Raised when the connection is lost

_ERROR_

Raised in case of error

 Assina: Subscribe  Publica: Publish


Obtendo MAC ADDRESS

Print MAC$

Exemplo

O exemplo abaixo:
  • Define o servidor e porta (SSL) do Servidor ThingsStream.io
  • Transfere as credenciais
  • Publica um número RANDOM no tópico a cada 10 segundos
  • Se inscreve no mesmo tópico, mostra o retorno quando publicado algo nele

' MQTT SSL test program ' Using ThingStream server ' MQTT SSL using certificate ca$ = file.read$("/thingstream.crt") ' reads the certificate from file
'-----BEGIN CERTIFICATE----- 'MIIEAzCCAuugAwIBAgIUBY1hlCGvdj4NhBXkZ/uLUZNILAwwDQYJKoZIhvcNAQEL 'BQAwgZAxCzAJBgNVBAYTAkdCMRcwFQYDVQQIDA5Vbml0ZWQgS2luZ2RvbTEOMAwG 'A1UEBwwFRGVyYnkxEjAQBgNVBAoMCU1vc3F1aXR0bzELMAkGA1UECwwCQ0ExFjAU 'BgNVBAMMDW1vc3F1aXR0by5vcmcxHzAdBgkqhkiG9w0BCQEWEHJvZ2VyQGF0Y2hv 'by5vcmcwHhcNMjAwNjA5MTEwNjM5WhcNMzAwNjA3MTEwNjM5WjCBkDELMAkGA1UE 'BhMCR0IxFzAVBgNVBAgMDlVuaXRlZCBLaW5nZG9tMQ4wDAYDVQQHDAVEZXJieTES 'MBAGA1UECgwJTW9zcXVpdHRvMQswCQYDVQQLDAJDQTEWMBQGA1UEAwwNbW9zcXVp 'dHRvLm9yZzEfMB0GCSqGSIb3DQEJARYQcm9nZXJAYXRjaG9vLm9yZzCCASIwDQYJ 'KoZIhvcNAQEBBQADggEPADCCAQoCggEBAME0HKmIzfTOwkKLT3THHe+ObdizamPg 'UZmD64Tf3zJdNeYGYn4CEXbyP6fy3tWc8S2boW6dzrH8SdFf9uo320GJA9B7U1FW 'Te3xda/Lm3JFfaHjkWw7jBwcauQZjpGINHapHRlpiCZsquAthOgxW9SgDgYlGzEA 's06pkEFiMw+qDfLo/sxFKB6vQlFekMeCymjLCbNwPJyqyhFmPWwio/PDMruBTzPH '3cioBnrJWKXc3OjXdLGFJOfj7pP0j/dr2LH72eSvv3PQQFl90CZPFhrCUcRHSSxo 'E6yjGOdnz7f6PveLIB574kQORwt8ePn0yidrTC1ictikED3nHYhMUOUCAwEAAaNT 'MFEwHQYDVR0OBBYEFPVV6xBUFPiGKDyo5V3+Hbh4N9YSMB8GA1UdIwQYMBaAFPVV '6xBUFPiGKDyo5V3+Hbh4N9YSMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL 'BQADggEBAGa9kS21N70ThM6/Hj9D7mbVxKLBjVWe2TPsGfbl3rEDfZ+OKRZ2j6AC '6r7jb4TZO3dzF2p6dgbrlU71Y/4K0TdzIjRj3cQ3KSm41JvUQ0hZ/c04iGDg/xWf '+pp58nfPAYwuerruPNWmlStWAXf0UTqRtg4hQDWBuUFDJTuWuuBvEXudz74eh/wK 'sMwfu1HFvjy5Z0iMDU8PUDepjVolOCue9ashlS4EB5IECdSR2TItnAIiIwimx839 'LdUdRudafMu5T5Xma182OC0/u/xRlEm+tvKGGmfFcN0piqVl8OrSPBgIlb+1IKJE 'm/XriWr/Cq4h/JfB7NTsezVslgkBaoU= '-----END CERTIFICATE----- pause 2000 print ca$ pause 2000 onmqtt mqtt_event print mqtt.setup("mqtts://mqtt.thingstream.io:8883",1) print mqtt.Certif(ca$) ' set the certificates print mqtt.connect("XXXXXHZWCKHZASRDIOME9", "XXXXIOtke4yXeF1lY9mXbbCxTovHAAgE3CViJ/4", "device:XXXXc9a7-3211-4e46-8a9a-a390f2e4ca86") ca$ = "" ' free these variables wait mqtt_event: print "event mqtt", MQTT.Topic$, MQTT.Message$ if (MQTT.Topic$ = "_CONNECTED_") then print mqtt.subscribe("esp32-sniffer/a4cf127531c8/ble") ' subscribe to the topic timer0 2000, publisher end if return publisher: r$ = str$(rnd(10000)) print mqtt.publish("esp32-sniffer/a4cf127531c8/ble", "Annex "+str$(RND(100))) return




Execução

Credenciais devem ser obtidas no ThingStream.IO

Pegue aqui as credenciais
Servidor

Tráfego no Broker MQTT da u-BLOX


Servidor MQTT ThingStream recebendo dados (RANDOM) do Tópico do u-BLOX NINA W106
(estão em HEXADECIMAL)

Sucesso ao acessar porta SSL 8883

Flow

No exemplo, FLOW está inscrito no Tópico o qual u-BLOX NINA W106 publica dados.

Sendo os dados publicados, o FLOW encaminha para o debug para visualização.

Basicamente o Flow se inscreve no mesmo tópico, transforma os dados recebidos para String e
mostra no debug do Flow.


Sobre o thingsteam subcribe no FLOW, é o campo que fez subscribe para receber os dados enviados pelo u-BLOX NINA W106 (publish)

DÚVIDAS

suporte@smartcore.com.br

REFERÊNCIAS

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