u-BLOX NINA W106 SENDO PROGRAMADO EM BASIC ANNEX RDS - MANDANDO TEMPERATURA PARA O SERVIDOR u-BLOX THINGSTREAM.IO COM BRIDGE PARA IBM WATSON VIA DATAFLOW MANAGER
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 Beta) etransmitir os dados coletados (temperatura - Random) para um servidor MQTT da u-BLOX (mqtt.thingstream.io) via WIFI, pela porta 1883 (não SSL). Os dados são tratados por uma poderosa ferramenta da u-BLOX chamada DATAFLOW MANAGER e encaminhados para o servidor AZURE IoT HUB da Microsoft.
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
IBM WATSON
O Watson é uma plataforma de serviços de Inteligência Artificial da IBM, ou seja, recursos de serviços cognitivos que a IBM disponibiliza para negócios. E de acordo com a descrição encontrada no site da própria empresa, “é a melhor Inteligência Artificial para você trabalhar”. Os cenários para a aplicação do IBM Watson são bem diversificados, como, atendimento ao cliente, aumento de produtividade, ChatBot, O Watson tem aplicabilidade até mesmo em Governança de contratos.
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.
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.
O anexo implementa o protocolo com as seguintes limitações:
- Ele só pode publicar mensagens QoS 0.
- Pode se inscrever em QoS 0 ou QoS 1.
- O tamanho máximo da mensagem é de 256 caracteres
- O intervalo de manutenção é definido para 15 segundos
o custo do Thingstream como um MQTT Broker é muito menor do que o custo daqueles associados ao Azure e AWS;
o gerenciador de fluxo de dados é uma excelente vantagem, dados podem ser tratados no servidor e então encaminhados;
permite programação Node.js;
a segurança é diferente e muito mais simplificada do que tentar fazer uma troca de certificados com a AWS etc;
tem uma conexão segura em vez do dispositivo. Isso realmente simplifica a integração;
capacidade de se inscrever em vários tópicos diferentes;
nós para acessos para vários serviços da AWS Amazon, Azure IoT, IBM Watson, IFTTT (DashBoard e uma infinidade de outras opções)
criação de Coisas (Thing);
monitoração de eventos MQTT;
alertas quando algo não vai bem.
No modo tradicional, se você quer acessar AWS, AZURE, etc:
você deve fazer registro
gerar Certificados
manter, guardar e proteger seus Certificados
despachar cada Certificado um por um para os Devices na produção
você precisa manter identidades diferentes por cada um dispositivo e entregá-los com segurança
fortes impactos na complexidade na logística, produção tempo, configuração do sistema e custos de manutenção
Com ThingStream, se você quer acessar AWS, AZURE, etc:
você deve fazer um registro de CA (certificate authority) (Access ID e Secret Key), exemplo, IAM na AMAZON.
quando você cria um Device (Things) no ThingStream, você deve pegar as credenciais (Username, Password, Client ID) (Device Certificate), basicamente muda Client Id e Password para cada Device
utilize estas credenciais (Things) (Username, Password e Client ID) no Device (U-BLOX NINA W106) para acessar o ThingStream via MQTT
crie Tópicos (Topics) que devem acessados pelos Devices (U-BLOX NINA W106), ou seja, para fazer Publish ou Subscribe
no DATAFLOW manager (Flows), o Nó ThingStream Subscribe deve estar conectado à um Tópico previamente criado para o seu Device (U-BLOX NINA W106), é por ele que começa o disparo para o DATAFLOW manager
Dentro do DATAFLOW pode de ter vários NósThingStream Subscribe
no DATAFLOW manager tenha fácil acesso à AWS, AZURE, etc utilizando Access ID e Secret Key e então solicite os serviços disponíveis (S3, LAMBDA, etc) (No caso da AMAZON)
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
FUNÇÕES/COMANDOS
DESCRIPTION
Ret =MQTT.Setup(server$ [,port])
Configure as comunicações MQTT.
Server$ é o endereço do servidor MQTT
Port é a porta MQTT; se não definidos padrões para 1883
Ret =MQTT.Connect(login$, pass$ [id$])
Conecte-se ao servidor usando o login e senha fornecidos.
Opcionalmente, id$ permitem definir um ID arbitrário
Ret =MQTT.Connect("", "", [id$])
Conecte-se ao servidor sem identificação
Opcionalmente, id$ permitem definir um ID arbitrário
Ret =MQTT.Disconnect()
Desconecta-se do servidor MQTT
Ret =MQTT.Publish(topic$, message$)
Publique uma mensagem de sequência no tópico especificado
Ret =MQTT.Subscribe(topic$ [,Qos])
Assina mensagens publicadas no tópico especificado.
Qos podem ser 0 ou 1; se não definidos padrões para 0
Ret =MQTT.UnSubscribe(topic$)
Cancelar assinaturas do tópico especificado
Ret =MQTT.Connected()
Retorna o status de conexão atual.
Retorna 1 se conectado ou 0 se desconectado
OnMQTT label
Defina um rótulo onde o programa saltará quando uma mensagem MQTT for recebida
Ret$=MQTT.Message$
Retorna a mensagem MQTT recebida
Ret$=MQTT.Topic$
Retorna o tópico MQTT recebido
Assina: Subscribe Publica: Publish
Obtendo MAC ADDRESS
Print MAC$
Instale o Azure IoT explorer e monitore o Azure Iot HUB criado.
u-BLOX NINA W106 SENDO PROGRAMADO EM BASIC ANNEX RDS - MANDANDO TEMPERATURA PARA O SERVIDOR u-BLOX THINGSTREAM.IO COM BRIDGE PARA AZURE IoT HUB VIA DATAFLOW MANAGER
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 Beta) etransmitir os dados coletados (temperatura - Random) para um servidor MQTT da u-BLOX (mqtt.thingstream.io) via WIFI, pela porta 1883 (não SSL). Os dados são tratados por uma poderosa ferramenta da u-BLOX chamada DATAFLOW MANAGER e encaminhados para o servidor AZURE IoT HUB da Microsoft.
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
Microsoft Azure
OAzureIoT (Internet das Coisas) é uma coleção de serviços de nuvem gerenciados pela Microsoft que conectam, monitoram e controlam bilhões de ativos de IoT. Simplificando, uma solução de IoT é composta por um ou mais dispositivos IoT que se comunicam com um ou mais serviços de back-end hospedados na nuvem.
O Hub IoT do Azure oferece uma solução de back-end hospedada na nuvem para conectar-se virtualmente a qualquer dispositivo. Amplie sua solução da nuvem para a borda com autenticação por dispositivo, gerenciamento de dispositivo interno e provisionamento escalonado.
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.
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 limitações:
- Ele só pode publicar mensagens QoS 0.
- Pode se inscrever em QoS 0 ou QoS 1.
- O tamanho máximo da mensagem é de 256 caracteres
- O intervalo de manutenção é definido para 15 segundos
o custo do Thingstream como um MQTT Broker é muito menor do que o custo daqueles associados ao Azure e AWS;
o gerenciador de fluxo de dados é uma excelente vantagem, dados podem ser tratados no servidor e então encaminhados;
permite programação Node.js;
a segurança é diferente e muito mais simplificada do que tentar fazer uma troca de certificados com a AWS etc;
tem uma conexão segura em vez do dispositivo. Isso realmente simplifica a integração;
capacidade de se inscrever em vários tópicos diferentes;
nós para acessos para vários serviços da AWS Amazon, Azure IoT, IBM Watson, IFTTT (DashBoard e uma infinidade de outras opções)
criação de Coisas (Thing);
monitoração de eventos MQTT;
alertas quando algo não vai bem.
No modo tradicional, se você quer acessar AWS, AZURE, etc:
você deve fazer registro
gerar Certificados
manter, guardar e proteger seus Certificados
despachar cada Certificado um por um para os Devices na produção
você precisa manter identidades diferentes por cada um dispositivo e entregá-los com segurança
fortes impactos na complexidade na logística, produção tempo, configuração do sistema e custos de manutenção
Com ThingStream, se você quer acessar AWS, AZURE, etc:
você deve fazer um registro de CA (certificate authority) (Access ID e Secret Key), exemplo, IAM na AMAZON.
quando você cria um Device (Things) no ThingStream, você deve pegar as credenciais (Username, Password, Client ID) (Device Certificate), basicamente muda Client Id e Password para cada Device
utilize estas credenciais (Things) (Username, Password e Client ID) no Device (U-BLOX NINA W106) para acessar o ThingStream via MQTT
crie Tópicos (Topics) que devem acessados pelos Devices (U-BLOX NINA W106), ou seja, para fazer Publish ou Subscribe
no DATAFLOW manager (Flows), o Nó ThingStream Subscribe deve estar conectado à um Tópico previamente criado para o seu Device (U-BLOX NINA W106), é por ele que começa o disparo para o DATAFLOW manager
Dentro do DATAFLOW pode de ter vários NósThingStream Subscribe
no DATAFLOW manager tenha fácil acesso à AWS, AZURE, etc utilizando Access ID e Secret Key e então solicite os serviços disponíveis (S3, LAMBDA, etc) (No caso da AMAZON)
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
FUNÇÕES/COMANDOS
DESCRIPTION
Ret =MQTT.Setup(server$ [,port])
Configure as comunicações MQTT.
Server$ é o endereço do servidor MQTT
Port é a porta MQTT; se não definidos padrões para 1883
Ret =MQTT.Connect(login$, pass$ [id$])
Conecte-se ao servidor usando o login e senha fornecidos.
Opcionalmente, id$ permitem definir um ID arbitrário
Ret =MQTT.Connect("", "", [id$])
Conecte-se ao servidor sem identificação
Opcionalmente, id$ permitem definir um ID arbitrário
Ret =MQTT.Disconnect()
Desconecta-se do servidor MQTT
Ret =MQTT.Publish(topic$, message$)
Publique uma mensagem de sequência no tópico especificado
Ret =MQTT.Subscribe(topic$ [,Qos])
Assina mensagens publicadas no tópico especificado.
Qos podem ser 0 ou 1; se não definidos padrões para 0
Ret =MQTT.UnSubscribe(topic$)
Cancelar assinaturas do tópico especificado
Ret =MQTT.Connected()
Retorna o status de conexão atual.
Retorna 1 se conectado ou 0 se desconectado
OnMQTT label
Defina um rótulo onde o programa saltará quando uma mensagem MQTT for recebida
Ret$=MQTT.Message$
Retorna a mensagem MQTT recebida
Ret$=MQTT.Topic$
Retorna o tópico MQTT recebido
Assina: Subscribe Publica: Publish
Obtendo MAC ADDRESS
Print MAC$
Instale o Azure IoT explorer e monitore o Azure Iot HUB criado.