terça-feira, 1 de março de 2022

U-BLOX NINA W106 SENDO PROGRAMADO COM .NET nanoFramework - Amazon ALEXA - Mandando Temperatura e Umidade

U-BLOX NINA W106 SENDO PROGRAMADO COM .NET nanoFramework - Amazon ALEXA 

Mandando Temperatura e Umidade para Assistente Alexa falar

Testado no VISUAL STUDIO 2019


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

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

A temperatura e umidade serão dados RANDOM gerados pela aplicação .NET C# e publicados a cada 30 segundos, você pode colocar seu próprio sensor, como DHT11, DTH22, BME280, etc.

Por Miguel ALEXAndre Wisintainer

See the BOOK about ALEXA

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
4Mb FLASH

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

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.

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.

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

(5) Quando um usuário diz "lampada 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 também e o procedimento é o mesmo para os itens anteriores.

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 obtidos na Amazon

aws-iot-private.pem.key 
aws-iot-certificate.pem.crt
AmazonRootCA1.pem
"Ao contrário do Arduino (por exemplo) você pode fazer debug a sério do código que está executando. Sem necessitar de ligações ou hardware complexo com o JTAG no caso de programação C pura."

.NET nanoFramework é uma plataforma livre e de código aberto que permite a escrita de aplicativos de código gerenciados para dispositivos incorporados restritos. É adequado para muitos tipos de projetos, incluindo sensores de IoT, wearables, prova acadêmica de conceito, robótica, criações de hobistas/fabricantes ou até mesmo equipamentos industriais complexos. Isso torna o desenvolvimento dessas plataformas mais fácil, rápido e menos caro, dando aos desenvolvedores incorporados acesso a tecnologias e ferramentas modernas usadas pelos desenvolvedores de aplicativos desktop.

Os desenvolvedores podem aproveitar o poderoso e familiar Microsoft Visual Studio IDE e seu conhecimento .NET C# para escrever rapidamente código sem ter que se preocupar com os meandros de hardware de baixo nível de um microcontrolador. Os desenvolvedores do Desktop .NET se sentirão "em casa" e poderão usar suas habilidades no desenvolvimento de sistemas embarcados, ampliando o pool de desenvolvedores embarcados qualificados.

Ele inclui uma versão reduzida do CLR (Common Language Runtime, tempo de execução da linguagem comum .NET) e possui um subconjunto das bibliotecas de classe base .NET, juntamente com as APIs mais comuns incluídas na Universal Windows Platform (UWP) permitindo o reaproveitamento de códigos de aplicativos de desktop, aplicativos IoT Core, milhares de exemplos de código e projetos de código aberto.
Usando o Microsoft Visual Studio, um desenvolvedor pode implantar e depurar o código diretamente em hardware real.

O projeto conta com o apoio da Fundação .NET. 

Roteiro baseado 

Instalando nanoFirmwareFlasher para copiar bootloader

GitHub - nanoframework/nanoFirmwareFlasher: 🛠 nano firmware flasher (nanoFramework toolbox)

É uma ferramenta global .NET Core CLI que permite atualizar um alvo nanoFramework com 
nanoBooter, nanoCLR, aplicativo gerenciado ou arquivos de backup. Faz parte da caixa de 
ferramentas nanoFramework, juntamente com outras várias ferramentas que são necessárias 
no desenvolvimento, uso ou gerenciamento de repositório do nanoFramework. Um vez instalado é 
necessário atualizar o UBLOX NINA W106.

Necessita .NET 5.0 Desktop Runtime (v5.0.3) e Download .NET Core 3.1 Runtime

C:\Users\Usuario>nanoff --update --target ESP32_REV3 --serialport COM8 --preview
.NET nanoFramework Firmware Flasher v2.0.9+947a088d7c
Copyright (C) 2019 .NET Foundation and nanoFramework project contributors

** There is a new version available, update is recommended **
** You should consider updating via the 'dotnet tool update -g nanoff' command **
** If you have it installed on a specific path please check the instructions here: https://git.io/JiU0C **

Using COM8 @ 1500000 baud to connect to ESP32.
Reading details from chip...
OK

Connected to:
ESP32 (ESP32-D0WD-V3 (revision 3))
Features WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Flash size 4MB unknown from PMC (manufacturer 0x157 device 0x28694)
PSRAM: unknown
Crystal 40MHz
MAC B8:F0:09:8F:7D:50

Trying to find ESP32_REV3 in development repository...OK
Extracting ESP32_REV3-1.7.4-preview.45.zip...OK

Updating to 1.7.4-preview.45

Erasing flash...


Gravação do Bootloader
Sinal que está Rodando!

Baixe e instale o Visual Studio Community 2017/2019
Habilite o Workload do Desktop com .NET
Workload .NET
Instalando Visual Studio 2017

Habilite a Extension do .NET nanoFramework e instale

Para o 2017 aparecerá VS2017

Crie um Projeto Blank com .NET nanoFramework
(Blank Application nanoFramework)


Abra um repositório GIT para exemplos .NET

https://github.com/nanoframework/Samples.git




Vários exemplos em .NET nanoFramework

Altere o código para
// // Copyright (c) .NET Foundation and Contributors // See LICENSE file in the project root for full license information. // using System; using System.Diagnostics; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Threading; using nanoFramework.M2Mqtt; using nanoFramework.M2Mqtt.Messages; using nanoFramework.Networking; using System.Device.Gpio; namespace AwsMQTT { public class Program { //////////////////////////////////////////////////////////////////////////////// // make sure to add your AWS endpoint and region!!! private static readonly string awsHost = "xxxxxxxxxxxxx-ats.iot.us-east-1.amazonaws.com"; //////////////////////////////////////////////////////////////////////////////// //This should really be persisted across reboots, but an auto generated GUID is fine for testing. private static readonly string clientId = Guid.NewGuid().ToString(); ////////////////////////////////////////////////////////////////////////////////// // make sure to respect the formating bellow to have a correct certificate & key // - NO identation // - start tag '-----BEGIN(...)' right after the string open double quote // - end tag '-----END(...)' immediately before the string closing double quote ////////////////////////////////////////////////////////////////////////////////// //Device Certificate copied from AWS (this is a non working example) private static readonly string clientRsaSha256Crt = @"-----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgIVAOqviqfRCWkOjPQ6f8KJE1MXQXUCMA0GCSqGSIb3DQEB CwUAME0xSzBJBgNVBAsMQkFtYXpvbiBXZWIgU2VydmljZXMgTz1BbWF6b24uY29t IEluYy4gTD1TZWF0dGxlIFNUPVdhc2hpbmd0b24gQz1VUzAeFw0yMTA3MzAxMTU1 MjNaFw00OTEyMzEyMzU5NTlaMB4xHDAaBgNVBAMME0FXUyBJb1QgQ2VydGlmaWNh dGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6PPAhJ/FByBdHFwls Wj458/HaIMwYsaafTuMJjUCo+GEQaIIYYKbwnuy5efD/zhvLoPmiRQM+eBV3OmxL Hm96NobTqtpMpSpin8fSfC6xZa65nsMkiSEIFhwY4ousglWDXpLXMvd5PanmuBj2 JM0aWL7lOK1UVCf+xcJfM14nKnAJMg6/kc5FyQe96NFrLu5YWUJp0YzyvJSs/n/X GOFYq0CD4EBjNZ8AJ7NrFtVzg5hgVFjUEZQf30nvFjKv94Wk6KNGLLgaPZGh3E5Y /g0vXPIObY7ry+i3ZFfsyLXD8uM21nHqCE8TO/0dKT2BHhmy/xleLLh577U12sQe 9UfJAgMBAAGjYDBeMB8GA1UdIwQYMBaAFIsf5so9vvcPyvZx9oMOuKpzusQeMB0G A1UdDgQWBBSwyOjirj8HlluOcxmocRBxeGUwEzAMBgNVHRMBAf8EAjAAMA4GA1Ud DwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAQlkyQ/AqAWDG1Cfal0ZZy6sZ aWJOrEZA5y6ehMEcSb8yZp4sugvWGWPLaxpjjcuzn32RszSY4qVgDYQubA37C0dn FWGJOsxf6wEtXeCvky02N8EzHl4/OAYsn12/zbWFo9Qdk0/MhFeaC2m4UMFEImBc SMJiZPI9UcQikRmCpyzwbBrXlDviYkY61KCVla2TaXGnfcR+yXUrcUjWvb+WZRyw oDCZnQEPln9fWkEtE6y2suBLRqE4DFdg62+ffE8yRsq2Iay4Ip/r0Eq2DC3P1GRm DoFH7GdNbMPFhzkxe1KFbr/v1AqKPnf0hzjw7sCmYnXGMCD3GQL0yuqc6RTygg== -----END CERTIFICATE-----"; //Device private key copied from AWS (this is a non working example) private static readonly string clientRsaKey = @"-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAujzwISfxQcgXRxcJbFo+OfPx2iDMGLGmn07jCY1AqPhhEGiC GGCm8J7suXnw/84by6D5okUDPngVdzpsSx5vejaG06raTKUqYp/H0nwusWWuuZ7D JIkhCBYcGOKLrIJVg16S1zL3eT2p5rgY9iTNGli+5TitVFQn/sXCXzNeJypwCTIO v5HORckHvejRay7uWFlCadGM8ryUrP5/1xjhWKtAg+BAYzWfACejaxbVc4OYYFRY 1BGUH99J7xYyr/eFpOijRiy4Gj2RodxOWP4NL1zyDm2O68vot2RX7Mi1w/LjNtZx 6ghPEzv9HSk9gR4Zsv8ZXiy4ee+1NdrEHvVHyQIDAQABAoIBABiAV98k0BqlZlqV 70lv/evF6jWWRwOgq5kd2cSx7qXMN4jfFu56GLxjTCWCo3Aj/4gkn3L3vVuElN5g s0qWsHfVoJtMSPf4asEa4EES0VnJVNlax7WQzOWxcvTbKSEC7Jkh4hOpwuESeb2+ zpnjcZBbyJGDiVok0DY2ckHwEhz4wNcaVueKV39BIoVyRct4MbDEBdzz1qm0KjlN VXR5OCIl/oIaf41D5Jh/R4J0Kdk5Yvj6DolC7rj7ZLQhB5I56bmtxk8plVQWJBoc k/Fbl63NX2YQ/92sR9X+8xiA1cjOIdV3Sj/miQtOYAKiwt4hYGqX1lVlCUqlCSHs HPyqibkCgYEA4GshHaMIjmez9hGknRsFJZqMNnx0mJRyKEfzqvgJcS4EMBzNTB/T VK1MBKvuJ3JXGWwTjpRDc4P/6D5nbd54VPE5rwKoYOz7PEdr/CXyIhTxOqVsCbn+ DJcHnicEg/jdFxz1o6UPp3RAwKYZ5UibHAXYLX/4oAL+t8hBt8TjKAMCgYEA1HJT RbxbrAQRknUTeTR9t5xRRhfzFg1Tv6pa+d9lhoNtJWvaq1kTQXbJzhU27DJdmYwB YivPE/Z80LDtmttPcqENUGX2V11gBPD0U+xlBXy6TcjWlqIXzmaWxRJQJtFxDMf0 pem8Wl5UoLuf1o+tuv19Wv8PnTHtuwJvGMyTRUMCgYEAlTCi40Du/zyRtpQkCw1b bpQ/gjlaidSlz4GFy7L5E/SzdAixslm19CUA1Fo4CKFKpevjVHXcIX8vMQXLXI75 D/8NifsKVOU2X+xbLVVMkru5YnN2T0EGUvhUaB8oMVPQJv1pj1C8B2aRZYEG1hZe h1KbVCQu9LEJBMRsa+7H1GECgYEAp+MdGZwL2flxJYtt8zffLc3TkI/2o3OuvmXS 9WpsoguUoqEEMqr3A6HrQvgS6j+3JlO0+C7ku8LrykQ30UwFEfJiQioBrfL1oZIF k5jaEKcL19KienHoXE1IUrAxJmwXaeFO3hrDpaqsOEVtwDLVOVN/z/yHC1Pcqg/3 WeK5c18CgYEAk1/fXHFMexgRhSD0qRwwVxWRSoygrcQ45YIxMwwBZZgNfLtgWzuo 2bG9uM7vIyeIoHXe4pd1SC/zcAFiA5qZ62l5SHdL2p7WFFzsz4pW9NmrCPlX2Dl9 kbMLKV3fuBvdm6FGgbfWpADEPQh+98UsndV5G7vFf8o72k8yoV7dUeE= -----END RSA PRIVATE KEY-----"; private static string CA_certificate = @"-----BEGIN CERTIFICATE----- MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM 9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L 93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm jgSubJrIqg0CAwaAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU 5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy rqXRfboQnoZsG4q5WTP468SQvvG5 -----END CERTIFICATE-----"; private static MqttClient client; private static GpioController s_GpioController; public static void Main() { s_GpioController = new GpioController(); Debug.WriteLine("Waiting for network up and IP address..."); WifiConnect(); Thread.Sleep(5000); SetupMqtt(); Thread.Sleep(Timeout.Infinite); } static void SetupMqtt() { DateTime start = DateTime.UtcNow; Debug.WriteLine($"Starting @ {start}."); // setup CA root certificate and... //var caCert = new X509Certificate(CA_certificate); X509Certificate caCert = new X509Certificate(Resources.GetBytes(Resources.BinaryResources.AwsCAroot)); // ... client certificate // make sure to add a correct pfx certificate, including the RSA key X509Certificate2 clientCert = new X509Certificate2(clientRsaSha256Crt, clientRsaKey, ""); // TLS 1.2 is mandatory for AWS client = new MqttClient(awsHost, 8883, true, caCert, clientCert, MqttSslProtocols.TLSv1_2); // connect MQTT client client.Connect(clientId); // subscribe to the topic with QoS 2 client.Subscribe(new string[] { "$aws/things/lamp/shadow/update/accepted" }, new MqttQoSLevel[] { MqttQoSLevel.AtMostOnce }); GpioPin led = s_GpioController.OpenPin(4, PinMode.Output); // subscribe handler for message received client.MqttMsgPublishReceived += (s, e) => Client_MqttMsgPublishReceived(s, e, led); TelemetryLoop(); // launch telemetry thread Thread telemetryThread = new Thread(new ThreadStart(TelemetryLoop)); telemetryThread.Start(); } //Coloque aqui a leitura de seu sensor de Temperatura e Umidade static void TelemetryLoop() { if (client.IsConnected) { Random rd = new Random(); string SampleData = "{\"state\": {\"reported\":{\"temp\":\"" + rd.Next(100) + "\",\"umidade\":\"" + rd.Next(100) + "\"}}}"; //Debug.WriteLine(SampleData); client.Publish("$aws/things/lamp/shadow/update", Encoding.UTF8.GetBytes(SampleData), MqttQoSLevel.AtMostOnce, false); } else Debug.WriteLine("Problemas com MQTT"); Thread.Sleep(30000); } static void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e, GpioPin led) { string Message = new string(Encoding.UTF8.GetChars(e.Message)); //Debug.WriteLine("Message received: " + Message); if (Message.IndexOf("\"lampada\":1") != -1) { led.Write(PinValue.High); } if (Message.IndexOf("\"lampada\":0") != -1) { led.Write(PinValue.Low); } } private static void WifiConnect() { // Give 60 seconds to the wifi join to happen CancellationTokenSource cs = new(60000); // Conectar usando o autoreconnect, DHCP e horário local var ret = WiFiNetworkHelper.ScanAndConnectDhcp("Andreia Oi Miguel 2.4G", "xxxxxxxx", requiresDateTime: true); // Caso conectar apenas sai do método if (ret) { Debug.WriteLine($"Connect to the network: {WiFiNetworkHelper.Status}"); return; } Debug.WriteLine($"Can't connect to the network, error: {WiFiNetworkHelper.Status}"); // Caso contrario, entra num loop com sleep de 500ms até conectar do { try { Debug.WriteLine("Tryng Reconnect"); WiFiNetworkHelper.Reconnect(); } catch { Thread.Sleep(500); } } while (!ret); } } }

Atualize versões dos pacotes

Compile o código
Encontrando o U-BLOX NINA W106 (Device Explorer)
Fazendo ping se está ativo
Transferindo o programa (Deploy)

Execução 

O projeto no .NET nanoframework:
  • 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.

Console

Waiting for network up and IP address...
YAY! Connected to Wifi
Time after network available: 2022-02-16T16:13:39.3756610Z
Message received: {"state":{"desired":{"lampada":1}},"metadata":{"desired":{"lampada":{"timestamp":1645028050}}},"version":9002,"timestamp":1645028050}
O programa "[1] .NET nanoFramework application: Gerenciado" foi fechado com o código 0 (0x0).
Execução (falando com AMAZON ECHO)


A qualquer momento uma mensagem da Amazon Alexa vem para solicitar que apague ou acenda uma lâmpada, é então realizada a comparação com o componente Compare.

LAMBDA




A coisa Lamp (Ligue/Desligue)



Vídeo
Lâmpada Ligue/Desligue
Alexa, em casa, temperatura quarto





Pacotes .NET nanoFramework

LINKS

Browse our samples repository: https://github.com/nanoframework/samples
Check our documentation online: https://docs.nanoframework.net/
Join our lively Discord community: https://discord.gg/gCyBu8T
Follow us on Twitter: https://twitter.com/nanoframework
Follow our YouTube channel: https://www.youtube.com/c/nanoFramework

Questões: suporte@smartcore.com.br

Agradecimentos:

JOSÉ SIMÕES
Husband, father, developer, maker, CEO at @Eclo, founder of @nanoframework. MVP. Developer: .NET C# , C/C++, IoT, Azure, Lego

Robin Jones (AKA networkfusion)

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  

U-BLOX NINA W106 SENDO PROGRAMADO COM .NET nanoFramework - Amazon ALEXA - Mandando Temperatura e Umidade

U-BLOX NINA W106 SENDO PROGRAMADO COM .NET nanoFramework - Amazon ALEXA  Mandando Temperatura e Umidade para Assistente Alexa falar Testado ...