U-BLOX NINA W106 SENDO PROGRAMADO EM .NET nanoFramework - agora com BLE
Testado no VISUAL STUDIO 2022
O objetivo deste BLOG é demonstrar como é possível utilizar o .NET nanoFramework para programar o módulo U-BLOX NINA W106. Foi utilizado o BREAKOUT módulo para o teste e exemplo consiste se comunicar com o celular via BLE (SPP), enviando um menu de mensagens abaixo, solicitando via APP que seja digitado uma opção do menu e obtendo o resultado.
A implementação atual só suporta as chamadas do Servidor Gatt.
Também faz parte a classe NordicSPP que implementa um Perfil de Protocolo Serial baseado na especificação da NORDIC. Isso permite que os clientes se conectem facilmente via Bluetooth LE para enviar e receber mensagens através de um aplicativo Bluetooth Serial Terminal. Um caso de uso comum para dispositivos de provisionamento.
Help
-------------------------------------------
'mem' - Show native free memory
'reboot' - Reboot device
-------------------------------------------
BLE tem recentemente sido portado para nanoFramework, baseado no ESP-IDF 4.X.
U-BLOX NINA W106
BLE
O BLE ou Bluetooth Smart é uma tecnologia de rede de área pessoal sem fios concebida e comercializada pela Bluetooth Special Interest Group. Em comparação com Bluetooth Clássico, o Bluetooth Smart destina-se a fornecer consumo de energia e custos consideravelmente reduzidos, procurando manter um alcance de comunicação similar. O BLE poderia ser superior a outras tecnologias baseadas em localização para smartphones porque ele é mais direcionado. Por exemplo, com BLE uma loja pode detectar em qual departamento você está parado e enviar uma oferta relevante. Algumas empresas estão utilizando beacons para fazer sistemas de localização indoor em eventos ou shoppings.
"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.
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) ou superior e Download .NET Core 3.1 Runtime ou superior.
nanoff --update --target ESP32_BLE_REV0 --serialport COM3 --preview
Gravação do Bootloader
Baixe e instale o Visual Studio Community e habilite o Workload do Desktop com .NET
Crie um Projeto Blank com .NET nanoFramework (Blank Application nanoFramework)
Abrindo o exemplo Ble
Exemplo com BLE
Cole o código abaixo (versão sem WiFi) no Projeto Blank
using System;
using System.Diagnostics;
using System.Threading;
using nanoFramework.Hardware.Esp32;
using nanoFramework.Runtime.Native;
using nanoFramework.Device.Bluetooth.Spp;
namespace BluetoothLESerial
{
public static class Program
{
static NordicSpp spp;
public static void Main()
{
Debug.WriteLine("\nSerial Terminal over Bluetooth LE Sample");
// Create Instance of Bluetooth Serial profile
spp = new NordicSpp();
// Add event handles for received data and Connections
spp.ReceivedData += Spp_ReceivedData;
spp.ConnectedEvent += Spp_ConnectedEvent;
// Start Advertising SPP service
spp.Start("nanoFrameworkSerial");
while (true)
{
Thread.Sleep(10000);
if (spp.IsConnected && !spp.SendString($"Current device time:{DateTime.UtcNow}\n"))
{
Debug.WriteLine($"Send failed!");
}
}
}
private static void Spp_ConnectedEvent(IBluetoothSpp sender, EventArgs e)
{
if (spp.IsConnected)
{
spp.SendString($"Welcome to Bluetooth Serial sample\n");
spp.SendString($"Send 'help' for options\n");
}
Debug.WriteLine($"Client connected:{sender.IsConnected}");
}
private static void Spp_ReceivedData(IBluetoothSpp sender, SppReceivedDataEventArgs ReadRequestEventArgs)
{
string message = ReadRequestEventArgs.DataString;
Debug.WriteLine($"Received=>{message}");
string[] args = message.Trim().Split(' ');
if (args.Length != 0)
{
switch (args[0].ToLower())
{
case "mem":
uint totalSize, totalFreeSize, largestBlock;
NativeMemory.GetMemoryInfo(NativeMemory.MemoryType.All, out totalSize, out totalFreeSize, out largestBlock);
sender.SendString($"Native memory - total:{totalSize} Free:{totalFreeSize} largest:{largestBlock}\n");
break;
// Reboot device
case "reboot":
sender.SendString("Rebooting now\n");
Thread.Sleep(100);
Power.RebootDevice();
break;
// Some help
case "help":
sender.SendString("Help\n");
sender.SendString("-------------------------------------------\n");
sender.SendString("'mem' - Show native free memory\n");
sender.SendString("'reboot' - Reboot device\n");
sender.SendString("-------------------------------------------\n");
break;
}
}
}
}
}
Atualize versões dos pacotes (uma boa referência são os Using no código)
Compile o código
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
Nenhum comentário:
Postar um comentário