terça-feira, 25 de janeiro de 2022

U-BLOX NINA W106 (ESP32 core) SENDO PROGRAMADO .NET nanoFramework - MQTT CLIENT THINGSTREAM

  U-BLOX NINA W106 (ESP32 core) SENDO PROGRAMADO .NET nanoFramework - MQTT CLIENT THINGSTREAM

Testado no VISUAL STUDIO 2019


O objetivo deste BLOG é demonstrar como é possível utilizar o .NET nanoFramework para programar o módulo U-BLOX NINA W106. Foi utilizado o EVK-NINA-W1 para o teste e exemplo consiste em acessar um servidor MQTT (mqtt.thingstream.io)inscrever em um tópico e então fazer um publish, a inscrição será no mesmo tópico. Mensagens enviadas ao tópico serão exibidas, bem como recebidas.


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.


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.

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

Ambiente thingstream

Características:
  • 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ós ThingStream 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)






Planos acessíveis

"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. Uma 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

nanoff --update --target ESP32_BLE_REV0 --serialport COM5 --preview

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

Baixe e instale o Visual Studio Community
Habilite o Workload do Desktop com .NET

Workload .NET
Instalando Visual Studio

Habilite a Extension do .NET nanoFramework e instale

Microsoft Visual Studio

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

  Abrindo o exemplo MQTT

Altere o código para

using System; using System.Diagnostics; using System.Threading; using System.Text; using nanoFramework.M2Mqtt; using nanoFramework.M2Mqtt.Messages; using nanoFramework.Networking; namespace TestMqtt { public class Program { public static void Main() { Debug.WriteLine("Acessing MQTT ThingStream"); Thread.Sleep(1); // STEP 1: setup network // You need to set WiFi connection credentials in the configuration first! // Go to Device Explorer -> Edit network configuration -> WiFi proiles and set SSID and password there. WifiConnect(); // STEP 2: connect to MQTT broker // Warning: test.mosquitto.org is very slow and congested, and is only suitable for very basic validation testing. // Change it to your local broker as soon as possible. var client = new MqttClient("mqtt.thingstream.io"); client.Connect("device:352fc9a7-xxxx-4e46-8a9a-a390f2xxxx86", "I7UPHZWCKHZASRXXXXXX", "n6omeX6qvfBpKXYXQ8AgYn1DqpZJa0lpBCI8yhzw"); // STEP 3: subscribe to topics you want client.Subscribe(new[] { "ublox-sniffer/a4cf127531c8/ble" }, new[] { MqttQoSLevel.AtLeastOnce }); client.MqttMsgPublishReceived += HandleIncomingMessage; // STEP 4: publish something and watch it coming back for (int i = 0; i < 5; i++) { client.Publish("esp32-sniffer/a4cf127531c8/ble", Encoding.UTF8.GetBytes("===== Hello MQTT! ====="), MqttQoSLevel.AtLeastOnce, false); Thread.Sleep(10000); } // STEP 5: disconnecting client.Disconnect(); // App must not return. Thread.Sleep(Timeout.Infinite); } private static void HandleIncomingMessage(object sender, MqttMsgPublishEventArgs e) { Debug.WriteLine($"Message received: {Encoding.UTF8.GetString(e.Message, 0, e.Message.Length)}"); } private static void Client_MqttMsgSubscribed(object sender, MqttMsgSubscribedEventArgs e) { Debug.WriteLine("Client_MqttMsgSubscribed "); } private static void Client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { string topic = e.Topic; string message = Encoding.UTF8.GetString(e.Message, 0, e.Message.Length); Debug.WriteLine("Publish Received Topic:" + topic + " Message:" + message); Thread.Sleep(1); } 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("TP-Link_A358", "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) (Implantar)




ThingStream (MQTT CLIENT)



ThingStream (MQTT SERVER)

===== Hello MQTT! =====

THINGSTREAM FLOW

Pacotes .NET nanoFramework

LINKS

API docs: https://docs.nanoframework.net/api/Windows.Devices.Adc.html
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
Report issues: https://github.com/nanoframework/Home/issues
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

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

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