O uso das facilidades do framework .NET não é mais exclusividade de hardwares que rodem Windows. Graças ao .NET Micro Framework, é possível usá-lo em hardwares embarcados que usam microcontroladores, por exemplo os da família STM32Fxxx da empresa STMicroelectronics.
Atualmente dois projetos se destacam, usando o .NET Micro Framework:
- NetDuino da empresa Wilderness Labs;
- TinyCLR OS (FEZ boards) da empresa GHI Electronics.
Neste artigo trataremos da instalação e primeiros passos com a plataforma TinyCLR OS rodando sob as placas da GHI Electronics modelo FEZ T18. O microcontrolador utilizado é o STM32F401RET6, que tem as seguintes especificações básicas:
Tabela 1 – Especificações básicas do microcontrolador STM32F401RET6
Processador |
STMicroelectronics ST32F401RET6 |
Clock |
84 MHz |
Memória RAM |
96 KByte |
Memória Flash interna |
512 KByte |
E as especificações da placa FEZT18 são listadas na tabela 2, abaixo.
Tabela 2 – Especificações das placas FEZT18
GPIO (5V tolerante quando entrada) |
22 |
IRQ |
22 |
UART (Serial) |
1 |
I2C |
1 |
SPI |
1 |
PWM |
8 |
12 Bit ADC |
8 |
USB Client |
1 |
Wi-Fi |
Opcional (modelo FEZT18-W) |
Instalação do framework
Para programação e debug é utilizada a IDE Visual Studio. Há uma versão gratuita que pode ser utilizada, 2017 Community, e que pode ser baixada diretamente no site da Microsoft. Um paradigma aqui também quebrado é que o Visual Studio pode ser usado não só para desenvolver programas para Windows, mas também para Android e iOS através do Xaramin, servidores Web e, claro, a nossa plataforma .NET Micro Framework.
Após instalado o VS2017, é necessário o download e instalação da extensão TinyCLR, que é super simples.
Ferramentas: Extensões e Atualizações
Vá em “Menu” (para versão em português) e na janela aberta selecione no menu à esquerda Online. Em seguida, na parte de busca digitar TinyCLR, devendo aparecer o resultado da pesquisa como na figura 2.
Clique em “Instalar” e após ter sido concluída a instalação, reinicie o Visual Studio.
Criando o Projeto
A criação de projetos é bem similar a outros em C#: vá ao menu “Arquivo -> Novo Projeto/Solução” e deverá ser exibida a janela como na figura 3.
Mas aqui uma diferença muito importante: no item Visual C# (no menu à esquerda) escolha a opção TinyCLR e, após, TinyCLR Application nas opções no box central.
Assim o Visual Studio criará um projeto com as definições para nossa placa. Após concluída a operação, estaremos na tela de projeto, que deve ser parecida com a da figura 4.
A partir daí podemos criar nosso Hello World de sistema embarcado, ou seja, o famoso “Pisca LED”. Mas antes é preciso entender mais um detalhe sobre a plataforma TinyCLR. As Referências são adicionadas ao projeto via Pacotes NuGet e para usá-las também é simples. Basta ir no menu Projeto : Gerenciar Pacotes do NuGet como mostrado na figura 5.
A seguir será aberta a janela de gerenciamento (figura 6) propriamente dita. Nesta janela devemos selecionar a aba “Procurar” e, em seguida, deixar selecionada a opção “Incluir pré-lançamento” para então no campo de busca colocar TinyCLR ou outro texto que desejamos buscar.
Para esse nosso primeiro projeto usaremos 2 pacotes NuGet:
- GHIElectronics.TinyCLR.Devices.Gpio
- GHIElectronics.TinyCLR.Pins
Para instalar basta clicar no botão “Instalar” localizado no lado direto nessa mesma janela. Importante sempre notar se a versão do pacote que vamos instalar é compatível com o firmware atual da placa. Atualmente estamos na versão 1.0.0-preview2, e para upgrade de firmware refira-se a este link.
Dica: A versão tem de ser a compatível com a do firmware da sua placa. Para saber qual versão na placa, abra o arquivo packages.config, que fica nos arquivos de projeto.
Também é necessário certificar que a configuração de comunicação com a placa está correta. Com a placa conectada, vá no menu “Projeto -> Propriedades de [nome_do_projeto]” e deverá aparecer uma tela de configuração conforme a figura 7.
Nessa tela, selecione TinyCLR OS no menu esquerdo e, a seguir, configure caso necessário o item Transport como USB e o item Device como FEZCLR_FEZCLR.
Importante: A placa deve estar conectada para que as opções estejam disponíveis.
Agora sim, com tudo instalado e configurado, podemos escrever nosso código “Hello World”:
Código Hello World – Para baixar o código no GitHub, use este link.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
// adicionar o 'GHIElectronics.TinyCLR.Devices.Gpio' abaixo via Nuget: menu Projeto -> Gerenciar Pacotes do Nuget // IMPORTANTE: // 1. deixar tickado-selecionada a opção "Incluir pré lançamento" logo ao lado do texto de procura do pacote Nuget // 2. A versão tem de ser a compatível com a do firmware da sua placa, para saber qual versão na placa abra o arquivo "packages.config" fica nos arquivos de projeto // caso necessário atualizar, o que pode acontecer mesmo com placas novas: // https://docs.ghielectronics.com/software/tinyclr/tinyclr-config.html using System.Threading; using GHIElectronics.TinyCLR.Devices.Gpio; namespace Embarcados_TinyCLR { class Program { static void Main() { // Instância objeto nomeado 'OnBoardLed' como ~LED1 interno da placa como saída var OnBoardLed = GpioController.GetDefault().OpenPin(GHIElectronics.TinyCLR.Pins.FEZ.GpioPin.Led1); // coloca esse pino conectado ao led como saída OnBoardLed.SetDriveMode(GpioPinDriveMode.Output); // Escreve na janela Saída do Visual Studio (menu Exibir : Saída) System.Diagnostics.Debug.WriteLine("> Iniciado .NET MicroFramework OK !"); while (true) { // Pisca Led OnBoardLed.Write(GpioPinValue.High); Thread.Sleep(500); OnBoardLed.Write(GpioPinValue.Low); Thread.Sleep(500); } } } } |
Finalmente, para executar o código é o mesmo procedimento de uma aplicação Windows no Visual Studio. Basta clicar em F5 ou no botão “Play” na barra de ferramentas e aguardar pela compilação e carregamento na placa.
Correndo tudo Ok, nossa placa deverá devolver a mensagem de Debug que programamos, informando a inicialização Ok, e entrar em Loop piscando o Led1.
Com esta breve introdução espero ter contribuído na introdução e mostrado a simplicidade do uso dessa modalidade de programação para hardwares embarcados.
Saiba mais
Executando aplicações .NET no Linux Embarcado em processadores ARM com Mono
Comunicação Serial com C# e Arduino – Parte 1
Usar a linguagem Vala em Linux embarcado pode ser uma escolha esperta
Referências
Página do fabricante das placas FEZ
Especificações do microcontrolador utilizado na placa FEZT18
Download Visual Studio (recomendado VS2017 versão Community)
Código fonte do projeto no GitHub