segunda-feira, 23 de agosto de 2021

U-BLOX NINA W106 PROGRAMADO EM ANNEX BASIC E COMANDADO VIA ASSISTENTE DE VOZ ALEXA NA LINGUA PORTUGUÊSA COM AMAZON ECHO

  U-BLOX NINA W106 PROGRAMADO EM  ANNEX BASIC  E COMANDADO VIA ASSISTENTE DE VOZ ALEXA NA LINGUA PORTUGUÊSA COM AMAZON ECHO


O objetivo deste BLOG é demonstrar como é possível utilizar programar o módulo U-BLOX NINA W106 com a linguagem de ANNEX BASIC 1.43.5 e comandá-lo via Assistente Alexa em Português.

"Alexa, em casa, ligue/desligue a lâmpada"
"Alexa, em casa, temperatura sala/quarto"

Por Miguel ALEXAndre Wisintainer


UBLOX 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

SMARTCORE

A SmartCore fornece módulos para comuniçã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

ASSISTENTE ALEXA

A Amazon Alexa, por exemplo, é um serviço de assistente pessoal inteligente na nuvem onde pode ser solicitadas tarefas como realizar pesquisas, mandar executar uma lista de músicas ou questionar o horário atual. Segundo o site da Amazon Alexa, o serviço permite se conectar com dispositivos (AWS IoT Cor) e por meio da Web Service da Amazon, efetuar comandos de voz, interpretá-los e tomar uma ação correspondente.

AMAZON ECHO
A 3ª geração do popular Amazon Echo Dot controlado por voz vem com um novo design impressionante, um alto-falante mais potente e muitas funções inteligentes. Alexa responde a perguntas, lê notícias, fornece boletins meteorológicos, ajusta o alarme e controla dispositivos domésticos inteligentes compatíveis. E, claro, você também pode ouvir música. Transmita músicas da Amazon Music, Spotify, Tuneln ou outros serviços - e desfrute do som rico e alto. Tudo que você precisa fazer é dizer "Alexa" para despertar o dispositivo, e então este pequeno milagre tecnológico fará o que você quiser.

BASIC ANNEX RDS

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

Veja o HELP  do BASIC ANNEX RDS

Veja também FAQ

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. 

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$

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
MONTAGEM



FAZENDO INTERFACE COM ASSISTENTE  DE VOZ ALEXA

AWS IoT Core

O AWS IoT Core é uma plataforma que permite que você conecte dispositivos a serviços da AWS e outros dispositivos, proteja dados e interações, processe e haja de acordo com os dados do dispositivo e permita que os aplicativos interajam com dispositivos mesmo quando estiverem off-line.

Os dados são armazenados em um local que recebe o nome de Thing Shadow, use tópicos para habilitar aplicativos e coisas para obter, atualizar ou excluir as informações do estado para uma Coisa.

Utiliza MQTT.

Amazon Alexa

O Amazon Alexa é um serviço de voz na nuvem da Amazon que permite que os desenvolvedores controlem por voz os serviços da Amazon conectados. Um aplicativo exemplo é o Amazon Echo, que é um assistente de controle de voz. Quando os usuários falam com o Amazon Echo, ele analisa a voz recebida e faz uma resposta apropriada. Neste exemplo, apresenta-se como conectar os serviços da Amazon (incluindo o Amazon Alexa, o AWS Lambda, o AWS IoT Core, o AWS IAM) e utilizar o Amazon Alexa para controlar a Lâmpada no U-BLOX NINA W106.

Skill

O Amazon Alexa Skills Kit (ASK) é um serviço de voz. Ele pode ser conectado a serviços da nuvem e o usuário pode controlar por voz os serviços conectados e receber resposta de voz. O recurso de análise de voz fornecido pelo Amazon Alexa está pronto para uso, faz com que os desenvolvedores possam se concentrar no design do serviço em nuvem e no modelo de interação do usuário.

Amazon AWS Lambda

O Amazon AWS Lambda é um serviço de computação. As linguagens de programação suportadas inclui o Node.js, o Python e o java. O Lambda permite que os usuários configurem os recursos requeridos pelo cálculo (como memória, tempo de computação).

Os três juntos (AMAZON ALEXA, LAMBDA, AWS IoT Core)

Os três elementos basicamente trabalham em conjunto: 

(1) Quando um usuário diz "Lâmpada ligue" para o dispositivo de teste (que suporta Amazon Alexa), Amazon Alexa analisa o comando de voz de acordo com o esquema e o arquivo das declarações de amostra (fornecido pelo usuário antes) e gera intenção JSON.

(2) Amazon Alexa envia a intenção JSON para o AWS Lambda. De acordo com a intenção, o serviço Lambda envia uma mensagem de atualização para o serviço AWS IoT Core Shadow.

(3) O serviço AWS IoT Core Shadow atualiza o estado de sombra de acordo com a mensagem de atualização do serviço Lambda.

(3.1) Se o U-BLOX NINA W106 estiver on-line e tiver assinado o serviço de sombra, o U-BLOX NINA W106 ativa o LED.

(3.2) Em seguida, o Lambda gera a mensagem de resposta de texto e voz e envia para o Amazon Alexa.

(4) Finalmente, o usuário pode ouvir a mensagem de voz para indicar que o LED foi acionado com sucesso.

MONTANDO AS REGRAS NO ASSISTENTE DE VOZ ALEXA (Resumo)

Primeiramente cria-se uma skill na Amazon Alexa. Para isso, primeiro cadastra-se o nome de invocação. Esse nome de invocação é o nome que o Amazon Alexa irá identificar que se trata da skill criada. Em seguida, são criadas as ações ou intents, que o Amazon Alexa irá solicitar ao Amazon Lambda que seja executado cada comando.

Os comandos são criados na tela de intents. Para ativar a execução de um intent, podem ser criados diversos comandos. Ou seja, quando se quer que através de diversas maneiras de falar apenas uma específica ação seja executada, cria-se uma lista de comando para apenas um intent. Pode-se observar que o comando contém uma palavra entre chaves. Esta palavra chama-se slot. Um slot é uma espécie de variável, onde os seus valores podem ser previamente definidos. 

Cada intent é uma ação. Cada ação pode ter um ou mais comandos. Cada comando pode ou não ter um slot. No comando de acender ou apagar o quarto verde vê-se que tem apenas um comando com um slot. Já na ação (intent) de acender ou apagar todas as luzes vê-se três comandos, ou três formas de chamar esta ação.




SERVIDOR LAMBDA

O AWS Lambda da Amazon é uma plataforma que permite que o usuário, ou cliente, pague apenas o que consumir. Disponibiliza processamento sempre que preciso, ou até quando agendado que seja executado automaticamente. 

Com a alta disponibilidade, o usuário apenas fornece seu código, ou cria a sua Função do Lambda, como é chamado. Cada função é gerenciada pela Amazon, desde a disponibilidade de execução e segurança. Com o AWS Lambda pode-se conectar com outros serviços da Amazon, como o AWS IoT Core e a Amazon Alexa.


Principais pontos do programa

OBS: ASSISTENTE ALEXA CONVERSA COM LAMBDA QUE ENTÃO CONVERSA COM AWS IoT CORE E FINALMENTE O MÓDULO U-BLOX NINA W106.

AWS IoT Core

A função da Amazon voltada para a Internet das Coisas (AWS IoT Core) permite conectar dispositivos à Internet para que se possam ser transmitidos dados, armazenados e analisados. Muitos tipos de objetos são usados nas aplicações para Internet das Coisas, desde câmeras de segurança a refrigeradores. Seja qual for o dispositivo desde que possa ser ligado, pode fazer parte do IoT. Essas aplicações tornaram dados antigamente inúteis em dados importantes para os usuários.

A Amazon oferece uma plataforma de Internet of Things (Internet das Coisas) onde se gerenciam dispositivos na nuvem facilmente. Podem-se criar aplicações que processam ou analisam informações de dispositivos conectados sem necessitar que o cliente tenha uma infraestrutura. O AWS IoT Core permite suporte ao protocolo HTTP e MQTT, que visa reduzir consumo de dados na rede. Estes protocolos utilizam suas respectivas portas para acesso aos serviços.



Certificados

    KEY_PATH = "/aws-iot-private.pem.key"
    CERT_PATH = "/aws-iot-certificate.pem.crt"
    CACERT_PATH = "/AmazonRootCA1.pem" 

CÓDIGO
O exemplo abaixo:
  • Define as credenciais para acessar o servidor AWS IoT
  • Conecta no servidor AWS IoT
  • Inscreve em um tópico
  • Aguarda que o LAMBDA publique algo neste Tópico
  • Verifica o que foi publicado para então acionar ou não uma Lâmpada
  • A cada 1 minuto é publicado Temperatura e Umidade (Random)

print "Start..." ca$ = file.read$("/AmazonRootCA1.pem") ' reads the certificate from file cert$ = file.read$("/aws-iot-certificate.pem.crt") ' read the client certificate from file key$ = file.read$("/aws-iot-private.pem.key") ' reads the key from file 'print ca$ 'print cert$ 'print key$ onmqtt mqtt_event print mqtt.setup("mqtts://xxxxxxfmj981lr-ats.iot.us-east-1.amazonaws.com:8883",1) print mqtt.Certif(ca$,cert$,key$) ' set the certificates print mqtt.connect("","") ca$ = "" ' free these variables cert$="" ' free these variables key$="" ' free these variables 'LED CONTROL PIN.MODE 2, OUTPUT PIN(2) = 0 'lamp lamp$="" gosub publisher wait mqtt_event: print "event mqtt", MQTT.Topic$, MQTT.Message$ if (MQTT.Topic$ = "_CONNECTED_") then print mqtt.subscribe("$aws/things/lamp/shadow/update/accepted") ' subscribe to the topic timer0 60000, publisher 'Atualiza Temperatura e Umidade a cada 1 minuto (valores Random) end if if (MQTT.Topic$ = "$aws/things/lamp/shadow/update/accepted") then lamp$="|"+MQTT.Message$+"|" if (json$(lamp$, "lampada") = "0") then PIN(2) = 0 endif if (json$(lamp$, "lampada") = "1") then PIN(2) = 1 endif endif return publisher: pub$ = "{""state"": {""reported"":{""temp"":""" + str$(RND(100)) + """,""umidade"":""" + str$(RND(100)) + """}}}" wlog pub$ print mqtt.publish("$aws/things/lamp/shadow/update",pub$) return

Execução (falando com AMAZON ECHO)

Eventos no ANNEX BASIC ESP32 (subscribe no AWS-Iot)

LAMBDA



A coisa Lamp (Ligue Desligue), também utilizada para guardar Temperature e Umidade



Vídeo
Lâmpada Ligue/Desligue

Temperatura sala/quarto

Questões: suporte@smartcore.com.br

FONTES: 

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