segunda-feira, 18 de maio de 2020

W102 comandado via Assistente Alexa - Micropython

U-BLOX NINA W102 PROGRAMADO EM  MICROPYTHON
E COMANDADO VIA ASSISTENTE DE VOZ ALEXA

O objetivo deste BLOG é demonstrar como é possível utilizar programar o módulo U-BLOX NINA W102 com a linguagem de Scripts MicroPython e comandá-lo via Assistente Alexa.

Por Miguel ALEXAndre Wisintainer



UBLOX NINA W102

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.

MICROPYTHON

O MicroPython é uma implementação enxuta e eficiente da linguagem de programação Python 3 que inclui um pequeno subconjunto da biblioteca padrão do Python e é otimizada para ser executada em microcontroladores e em ambientes restritos.

O microPython pyboard é uma placa de circuito eletrônico compacta que executa o MicroPython no estado original, oferecendo a você um sistema operacional Python de baixo nível que pode ser usado para controlar todos os tipos de projetos eletrônicos.

O MicroPython é repleto de recursos avançados, como um prompt interativo, números inteiros de precisão arbitrária, fechamentos, compreensão de listas, geradores, tratamento de exceções e muito mais. No entanto, é compacto o suficiente para caber e executar com apenas 256k de espaço de código e 16k de RAM.

O MicroPython pretende ser o mais compatível possível com o Python normal, para permitir a transferência de código com facilidade da área de trabalho para um microcontrolador ou sistema incorporado.


COMPILAÇÃO MicroPython para NINA W102

Aqui está a VM (VIRTUAL BOX)


Para compilar foi seguido passo a passo o mix de roteiros abaixo:

e


Algumas dicas

-Use python3 (exige pyparsing)
-Altere partitions_2MiB.csv

# Name,     Type, SubType, Offset,   Size, Flags
#nvs,        data, nvs,     0x9000,   0x6000,
#phy_init,   data, phy,     0xf000,   0x1000,
#factory,    app,  factory, 0x10000,  0x110000,
#vfs,        data, fat,     0x120000, 0xA0000,
nvs,        data, nvs,     0x9000,   0x6000,
phy_init,   data, phy,     0xf000,   0x1000,
factory,    app,  factory, 0x10000,  0x170000,
vfs,        data, fat,     0x180000, 0x40000,

Ampliei APP e diminui FAT, ambos em 256K para o NINA W102

OBS: antes de executar o "make", altere board para GENERIC_D2WD.

export BOARD=GENERIC_D2WD

ou altere em Makefile

BOARD ?= GENERIC_D2WD
e
FLASH_SIZE ?= 2M


1.13

INTERFACE MicroPython para NINA W102

Para interagir com o MicroPython, recomendo Thonny



PREPARANDO MICROPYTHON PARA U-BLOX NINA W102

Grave o seguinte BIN que você compilou no NINA W102, você pode usar o ESP32 DOWNLOAD TOOLS.



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 W102.

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 "Lamp on" 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 W102 estiver on-line e tiver assinado o serviço de sombra, o U-BLOX NINA W102 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 W102.

AWS IoT Core (a coisa) (PyPortal)

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 = "/dc5478fc78-private.pem"
    CERT_PATH = "/dc5478fc78-certificate.pem"
    CACERT_PATH = "/ca.pem" 
(este não é utilizado, pois deve o mesmo estar embutido no engine do Micropython)

As coisas criadas

EXECUTANDO PROGRAMA

Para edição do programa foi utilizado a ide THONNY, um editor Python simples para programadores iniciantes. Abra a COM onde está o U-BLOX NINA W102.
Control-C para a execução e Control-D inicia. 


TESTES COM A ASSISTENTE ALEXA E CIRCUITPYTHON





CÓDIGO

import machine from network import WLAN import network import time from umqtt.robust import MQTTClient last_message = 0 message_interval = 5 counter = 0 DISCONNECTED = 0 CONNECTING = 1 CONNECTED = 2 MQTT_HOST = "XXXXXXXXX-ats.iot.us-east-1.amazonaws.com" TOPIC = "$aws/things/lamp/shadow/update/accepted" MQTT_CLIENT_ID = "lamp" MQTT_PORT = 8883 state = DISCONNECTED connection = None wlan = network.WLAN(network.STA_IF) wlan.active(True) def pub_msg(msg): global connection connection.publish(topic=TOPIC, msg=msg, qos=0) print('Sending: ' + msg) def run(): global state global connection global client KEY_PATH = "/dc5478fc78-private.pem" CERT_PATH = "/dc5478fc78-certificate.pem" CACERT_PATH = "/ca.pem" with open(KEY_PATH, 'r') as f: key1 = f.read() print(key1) print(" ") with open(CACERT_PATH, 'r') as f: key2 = f.read() print(key2) print(" ") with open(CERT_PATH, 'r') as f: cert1 = f.read() print(cert1) print(" ") client = MQTTClient(client_id=MQTT_CLIENT_ID, server=MQTT_HOST, port=MQTT_PORT, keepalive=10000, ssl=True, ssl_params={"cert":cert1, "key":key1, "server_side":False}) client.set_callback(sub_cb) client.connect() print('MQTT LIVE!') client.subscribe(TOPIC) print('Connected to %s MQTT broker, subscribed to %s topic' % (MQTT_HOST , TOPIC)) def sub_cb(topic, msg): print((topic, msg)) if topic == b'notification' and msg == b'received': print('ESP received hello message') while state == CONNECTED: msg = '{"device_id":"some_id", "data":"some_data"}' pub_msg(msg) time.sleep(2.0) while True: if 1==1: wlan.connect('Andreia Oi Miguel 2.4G', 'XXXXXXXXX') while not wlan.isconnected(): machine.idle() print('Connected...') run() while True: try: client.check_msg() if (time.time() - last_message) > message_interval: msg = b'Hello #%d' % counter client.publish(TOPIC, msg) last_message = time.time() counter += 1 except OSError as e: run() break

Salve o programa e execute!



O programa mandará a cada segundo um Hello #xxx para o tópico e também se inscreverá no mesmo para receber alguma mensagem, no caso, para mandar acender ou apagar uma lâmpada.
Video




Questões: suporte@smartcore.com.br

 

Sobre a 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

 

Nenhum comentário:

Postar um comentário