Integração IoT: Controle Remoto de Arduino via Apps UWP Windows 10
Componentes e Materiais
| Arduino UNO | 1 |
| Modem Bluetooth SparkFun BlueSMiRF Silver (versão Gold usada) | 1 |
Sobre o Projeto
Nota: Veja atualizações nos comentários ao final.
Um app Windows 10 UWP pode ser construído sobre a biblioteca Remote-Wiring para interagir com um dispositivo Arduino rodando Firmata. Desenvolvi um app, similar ao exemplo "Blinky" do Windows Remote Arduino, mas com adições: realiza GPIO (entrada E saída) e algumas I/Os analógicas. Funcionalmente equivalente à versão Windows 8.1 do blog anterior, mas no contexto Universal Windows Platform (UWP). Alvos: Windows 10 desktop, Windows 10 phone e Raspberry Pi 2 (rodando Win 10 IoT) — este último ainda em progresso. Este blog pode ser lido sem referência ao anterior.
Detalhes no blog: embedded101.com
Exemplo "Blinky" original: ms-iot.github.io
Apps Universais e Apps Universal Windows Platform
Apps Universais (UA) atingiram ápice no Windows 8.1: podiam visar desktop Intel, ARM RT Surface e Windows Phone (ARM), tudo na mesma solution. Compartilhavam código comum (handlers, computação, dados). Código XAML era específico por alvo. Compilava-se subprojetos separados para cada alvo.
Com a mudança de paradigma "One Windows" no Windows 10, o mesmo código (incluindo XAML) serve para todos os alvos. O mesmo projeto recompila para diferentes alvos. Como o nome UA foi usado no Windows 8, novo nome foi necessário: Universal Windows Platform (UWP) apps para Windows 10.
Todas as plataformas Windows 10 suportam apps UWP. Mas há extensões específicas por plataforma: Windows 10 IoT extensions suportam GPIO, I2C, SPI etc. Mobile extensions suportam funções de telefone. UWP fornece camada de API central garantida em todos dispositivos.
SDKs de Extensão Windows 10. Extensões Desktop, Mobile e IoT marcadas.
Para este blog usamos template UWP (não UA como no blog anterior). Não precisamos de SDKs de extensão.
[1] Configurar Comunicação Bluetooth com Dispositivo Arduino
Pule se já fez a atividade Win 8.1.
USB ou Bluetooth podem ser usados para comunicações Firmata entre Arduino e dispositivo Windows. No Windows 10 ambos funcionam; no Windows 8.1 apenas Bluetooth. Usaremos Bluetooth. Usei SparkFun Bluetooth Mate Gold (o exemplo "Blinky" usou Silver). Diferença principal: alcance do Gold até 100m vs 10m do Silver. Configurações padrão de handshake também diferem. Ambos têm interface UART TTL para configurar modo operacional do Bluetooth e interagir com porta serial do Arduino.






Se precisar configurar o dispositivo Bluetooth, use adaptador USB-Serial SparkFun ou Freetronics para configurar via terminal serial desktop. Pode resetar para padrões de fábrica conectando pino PIO6 (na verdade PIO4) ao alto e alternando três vezes.
Bluetooth Mate tem mesmo pinout do SparkFun FTDI Basic, podendo ser usados intercambiavelmente. Não pode plugar diretamente o Bluetooth Mate em placa FTDI Basic (precisa trocar TX/RX). Essa configuração pode ser usada com terminal serial desktop, com FTDI USB conectado ao desktop, para configurar o Bluetooth (ou usar para comunicações seriais do desktop).
Configurações seriais TTL UART padrão:
- Baud rate 115.200
- 8 bits
- Sem Paridade
- 1 bit de parada
- Controle de fluxo por hardware habilitado (no Mate Silver é Nenhum)
- Perfil Porta Serial (SPP): FireFly-WXYZ (WXYZ = últimos 4 dígitos do MAC BT)
- Chave de acesso 1234
Dispositivo armazena até 8 pareamentos.
Documentação: rn-bluetooth-um.pdf
Configuração Firmata usa Baud 57600 — precisa alterar ou configurar Bluetooth para isso. Modificaremos a configuração Firmata (mais fácil). Controle de fluxo por hardware também pode ser configurado no Bluetooth, mas aqui tratamos conectando RTS a CTS.
Embora o Bluetooth possa ser montado em protoboard e conectado ao Arduino, optei por montar soquete em um Prototyping Shield.
Header de 6 pinos Arduino Shield foi soldado no Bluetooth nos pinos UART TTL com soquete voltado para fora. Pinos dobrados 90° para baixo para plugar verticalmente em outro header. Soquete BT pode conectar diretamente a módulo FTDI Basic similarmente montado se configuração necessária. Fio soldado depois no PIO6 (PIO4) para reset de fábrica.
Header de 8 pinos montado no meio do proto shield na parte inferior. Headers nas laterais para plugar diretamente no Uno.
Módulo Bluetooth inserido voltado para pinos GPIO, em direção aos pinos 0 e 1 (Rx/Tx), deixando posição amarela livre. Uma pode ser usada para fio de reset de fábrica.
[2] Configurar Firmata
Pule se já fez atividade Win 8.1.
Nota: Pinos UART 0 e 1 do Arduino Uno ficam indisponíveis quando programado via USB pela Arduino IDE. Esses mesmos pinos conectam à interface UART TTL do Bluetooth quando interfaceado para comunicações Firmata. Portanto, ao programar o Arduino nesta seção, o Bluetooth NÃO deve estar conectado.
- Assumindo desenvolvimento prévio para Arduino (Uno), crie novo sketch Standard Firmata.
- Uma alteração: Baud rate. Na IDE, busque por 57600. Substitua por 115200. Salve o sketch (chamei de
Firmata_115200). Programe o Uno e pronto.
[3] Configurar Pilha de Software Firmata Universal App
Ligeiramente diferente se já fez atividade Win 8.1.
A pilha de software tem três camadas:
- Remote-Wiring API: Implementa propriedades (configuração), métodos e eventos em nível conceitual alto para interação com hardware Arduino. Ex: GPIO (Get/Set Pin, On Pin Changed). Comunica com camada Firmata via protocolo Firmata.
- Firmata: Comunica via protocolo serial implementado como camadas de transporte Bluetooth e USB-Serial na camada Serial. Opção USB não disponível no Windows 8.1.
Disponível em duas fontes:
Ambas contêm versões Windows 8.1 e Windows 10. Ambas versões Windows 10 compilam, mas a segunda tem problemas no Windows 8.1. Usei Visual Studio 2015 RC.
- Baixe a primeira versão. Clone o repositório (não baixe zip):
git clone --recursive https://github.com/ms-iot/windows-remote-arduino-samples.git - Estrutura de diretórios:
Pastaswindows-remote-arduino-samples remote-wiring Microsoft.Maker.win8_1 Microsoft.Maker.win10 source win8_1 win10win8_1ewin10são apenas apps de exemplo (incluindo "blinky") — ignoraremos por enquanto. Ambas versões Maker usam mesma pastasource, então para Windows 10 precisamos apenas:
Copie para pasta adequada (sugiro raiz do drive, ex:windows-remote-arduino-samples remote-wiring Microsoft.Maker.win10 sourcec:\wras10para evitar erros de path longo em build ARM). Copie também arquivos .md para referência (abrem no VS). - Abra solution em
Microsoft.Maker.win10. - Defina target como Win32 e compile a solution. Três builds (uma por camada da pilha).
- Repita para configuração ARM. Se tem máquina x64, teste esse build também.
[4] Criar App UWP HW LED
Há "atalho" nesta seção para quem fez atividade Win 8.1 anterior.
Versão inicial: botão de software liga LED hardware e outro desliga. LED conectado ao GPIO pino 5.
Documentação "Blinky" diz que há várias formas de obter e usar essas bibliotecas. NuGet será o caminho futuro mas ainda não disponível. Referenciar versões compiladas no sistema de desenvolvimento é mais fácil: adicionar o app Universal à solution e referenciá-las.
- Adicione novo app C# Windows Blank Universal à solution. (Nota: não Windows 8.1 desta vez)

Nome adequado. Chamei de wrauwp: Windows Remote Arduino Universal app UWP. Desta vez há apenas UM projeto criado (UWP). O código XAML e C# é o mesmo para desktop e mobile. A diferença está na compilação.
Capacidades Serial e Bluetooth necessárias no manifest:
- Abra
package.appmanifestno editor de texto (não GUI) via View Code. Capability Internet Client já incluída no final. Modifique para:
<Capabilities>
<Capability Name="internetClient" />
<DeviceCapability Name="bluetooth.rfcomm">
<Device Id="any">
<Function Type="name:serialPort"/>
</Device>
</DeviceCapability>
</Capabilities>
</Package>
Se usássemos USB-Serial em vez de Bluetooth-Serial no desktop, adicionaríamos capability para isso.
- Adicione referências a Firmata, RemoteWiring e Serial para o desktop UA (só precisa fazer para um projeto):

DICA: Quem já fez Windows 8.1 anterior pode pular para testar o app nos alvos
- Copie código XML do grid daquele projeto para
MainPage.xamlneste novo projeto. - Pule para testar o app nos alvos.
Para quem continua aqui…
- Modifique Grid XAML de ambos UA para:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Name="OffButton" Click="OffButton_Click" Grid.Row="0" IsEnabled="False" HorizontalAlignment="Stretch" Foreground="White" Background="Green" FontSize="32">Off!</Button>
<Button Name="OnButton" Click="OnButton_Click" Grid.Row="1" IsEnabled="False" HorizontalAlignment="Stretch" Foreground="White" Background="Red" FontSize="32">On!</Button>
</Grid>
Comentário: Só temos um MainPage.cs desta vez, pois há apenas um projeto de app… One Windows. Antes havia um para desktop e um para phone, tornados comuns colocando uma versão no subprojeto shared.
Todo código cs referenciará MainPage.cs.
- Na classe
MainPageadicione declarações no topo:
// USB não suportado no Win8.1. Para passos USB, veja solução win10.
BluetoothSerial bluetooth;
RemoteDevice arduino;
// Pinos usados. Nota: números reais dos pinos.
private const int LED_PIN = 5;
- No construtor
MainPage, apósInitializeComponent()adicione:
bluetooth = new BluetoothSerial("FireFly-748B");
arduino = new RemoteDevice(bluetooth);
bluetooth.ConnectionEstablished += OnConnectionEstablished;
Substitua FireFly-748B pelo seu SPP.
- Implemente
OnConnectionEstablished:
private void OnConnectionEstablished() {
// Habilita botões na UI thread!
var action = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => {
this.OnButton.IsEnabled = true;
this.OffButton.IsEnabled = true;
arduino.pinMode(LED_PIN, PinMode.OUTPUT);
}));
}
- Adicione handlers de eventos dos botões:
private void OnButton_Click(object sender, RoutedEventArgs e) {
// Liga LED no pino 5
arduino.digitalWrite(5, PinState.HIGH);
}
private void OffButton_Click(object sender, RoutedEventArgs e) {
// Desliga LED no pino 5
arduino.digitalWrite(5, PinState.LOW);
}
- Teste build do app UWP em configurações x86, x64 e ARM.
[5] Deploy e Teste dos Apps Universais
Nesta seção ligaremos o LED hardware ao Arduino e rodaremos o app no desktop e Windows 10 Phone*.
Teste no Desktop
- Defina app Desktop como Startup Project.
- Target x86 e Local Machine. Rebuild do app UWP desktop.

- Conecte Arduino Pino 5 a LED hardware. Forneça GND, VCC e resistor adequado em série.
Como mencionado em blog anterior sobre Windows 10 IoT Raspberry PI 2 GPIO, uso placa de desenvolvimento para IOs de teste (LEDs, switches). Se não tiver, use configuração hardware "Blinky" mas inverta polaridade do pino nos handlers dos botões.
- Alimente o Arduino e pareie módulo Bluetooth com desktop (Passkey=1234). Assumo que sabe fazer isso.
- Execute o app.
- Provavelmente pedirá permissão para conectar ao dispositivo Bluetooth — OK.
- Teste funcionalidade. Defina breakpoint nos handlers e verifique debug.
- Repita 4.1 a 4.6 para x64 se tiver desktop 64-bit.
- Desligue Bluetooth no desktop.
Teste no Windows 10 Phone (assumindo phone configurado para desenvolvimento)
- Ligue phone, vá em Configurações/Bluetooth e ative. Pareie com módulo Bluetooth (Passkey=1234).
- Continuando com app Windows Universal como startup project…
- Target ARM, Device e rebuild.
- Conecte phone via USB Serial ao desktop e faça deploy do app.
Teste no Raspberry Pi 2
ESTE É WORK IN PROGRESS. VEJA NOTA AO FINAL DESTA SEÇÃO
- Remote debugger já instalado e ativo no RPI2 configurado para Win 10 IoT.
- Determine IP do RPI2, ex: com Windows IoT Core Watcher.

- Em Project Properties-Debug, target Remote Machine, No authentication, insira IP.

- Rebuild do app UWP.
- Deploy e teste no RPI2.
Não consegui conectar RPI2 via Bluetooth ainda:
- Bluetooth no geral ainda não suportado
- Deixe comentários se tiver ideias ou sucesso.
- Atualizarei quando houver progresso.

[6] "Embelezar" a UI
Adiciona botões Conectar/Desconectar e melhora usabilidade.
- Modifique UI GRID XAML (Nota: mudança nas linhas dos botões anteriores):
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="32"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Name="ConnectButton" Click="ConnectButton_Click" Grid.Row="0" IsEnabled="True" HorizontalAlignment="Stretch" BorderBrush="Lime" Foreground="Lime" FontSize="32">Connect</Button>
<Button Name="OffButton" Click="OffButton_Click" Grid.Row="1" IsEnabled="False" HorizontalAlignment="Stretch" Foreground="White" Background="Green" FontSize="32">Off!</Button>
<Button Name="OnButton" Click="OnButton_Click" Grid.Row="2" IsEnabled="False" HorizontalAlignment="Stretch" Foreground="White" Background="Red" FontSize="32">On!</Button>
<Button Name="DisconnectButton" Click="DisconnectButton_Click" Grid.Row="3" IsEnabled="False" HorizontalAlignment="Stretch" Foreground="Red" BorderBrush="Red" FontSize="32">Disconnect</Button>
<ProgressRing x:Name="progress1" Grid.Row="5" Height="50" Visibility="Visible"/>
</Grid>
UI tem botões maiores e mais coloridos, melhor usabilidade. Cheguei a isso após teste de usuário com minha neta de 4 anos!.
ProgressRing visível e girando enquanto app conecta.
- Insira ao final de
OnConnectionEstablished():
// BT conectado, desliga progress ring
this.progress1.IsActive = false;
this.progress1.Visibility = Visibility.Collapsed;
- Adicione handlers para botões Connect/Disconnect:
private void ConnectButton_Click(object sender, RoutedEventArgs e) {
bluetooth.begin(115200, SerialConfig.SERIAL_8N1);
this.ConnectButton.IsEnabled = false;
// Conectando BT, mostra progress ring
this.progress1.IsActive = true;
this.progress1.Visibility = Visibility.Visible;
}
private void DisconnectButton_Click(object sender, RoutedEventArgs e) {
bluetooth.end();
this.OnButton.IsEnabled = false;
this.OffButton.IsEnabled = false;
this.ConnectButton.IsEnabled = true;
this.DisconnectButton.IsEnabled = false;
}
- Comente ou remova linha do construtor
MainPage(agora no handler Connect):
bluetooth.begin(115200, SerialConfig.SERIAL_8N1);
- Adicione gerenciamento de estado ao handler OnButton:
this.OffButton.IsEnabled = true;
this.OnButton.IsEnabled = false;
- Adicione ao handler OffButton:
this.OffButton.IsEnabled = false;
this.OnButton.IsEnabled = true;
- Deploy e teste app em todos os alvos como na seção 5.
[7] Adicionar Entrada Pushbutton
Nesta extensão, entrada GPIO pushbutton no Arduino Pino 6 é facilitada e seu estado exibido na UI. Inicialmente detectado por leitura periódica. Depois melhorado com handler para evento DigitalPinChanged.
- Modifique controle Grid no XAML UI:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="32"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Name="ConnectButton" Click="ConnectButton_Click" Grid.Row="0" IsEnabled="True" HorizontalAlignment="Stretch" BorderBrush="Lime" Foreground="Lime" FontSize="32">Connect</Button>
<Button Name="OffButton" Click="OffButton_Click" Grid.Row="1" IsEnabled="False" HorizontalAlignment="Stretch" Foreground="White" Background="Green" FontSize="32">Off!</Button>
<Button Name="OnButton" Click="OnButton_Click" Grid.Row="2" IsEnabled="False" HorizontalAlignment="Stretch" Foreground="White" Background="Red" FontSize="32">On!</Button>
<Button Name="DisconnectButton" Click="DisconnectButton_Click" Grid.Row="3" IsEnabled="False" HorizontalAlignment="Stretch" Foreground="Red" BorderBrush="Red" FontSize="32">Disconnect</Button>
<ProgressRing x:Name="progress1" Grid.Row="5" Height="50" Visibility="Visible"/>
<TextBox Name="TxtPin6" Visibility="Visible" Grid.Row="6" Text="Pushbutton: HIGH"></TextBox>
</Grid>
- Na classe MainPage especifique pino de entrada:
private const int PB_PIN = 6;
No handler OnConnectionEstablished defina como entrada:
arduino.pinMode(PB_PIN, PinMode.INPUT);
- Adicione timer para polling da entrada:
// Timer para polling de entradas
private DispatcherTimer pbPolltimer;
// No construtor
this.pbPolltimer = new DispatcherTimer();
this.pbPolltimer.Interval = TimeSpan.FromMilliseconds(250);
this.pbPolltimer.Tick += PBTimer_Tick;
this.pbPolltimer.Stop();
Handler do tick:
PinState pbPinValue = PinState.LOW;
private void PBTimer_Tick(object sender, object e) {
PinState pbPinValueTemp = arduino.digitalRead(6);
Pushbutton_Pressed(pbPinValueTemp);
}
Implemente PushButton_Pressed():
private void Pushbutton_Pressed(PinState pbPinValueTemp) {
if (pbPinValue != pbPinValueTemp) {
TxtPin6.Text = "Pushbutton: " + pbPinValueTemp.ToString();
pbPinValue = pbPinValueTemp;
}
}
- Precisamos de um pushbutton. Minha placa de desenvolvimento fornece. Se não tiver, implemente circuito oposto.
Com Win 10 IoT Raspberry Pi 2 (RPI2), relatam bugs na frequência de registro de entradas digitais, corrigidos no RTM do Win 10 IoT.
Debounce por hardware:
- Pequeno capacitor nas chaves para delay RC.
- Schmitt trigger no circuito.
No RPI2 há opção de debounce via configuração de software.

- Build, deploy e teste nos alvos como antes.
Adicionar LED simulado na UI para mostrar estado do switch.
- Adicione ao XAML grid em ambos apps Universal:
<RowDefinition Height="Auto"/>
<Ellipse x:Name="PBStatusLED" Fill="#FF96969B" Grid.Row="7" Stroke="Black" Width="64" IsRightTapEnabled="False" IsTapEnabled="True" IsDoubleTapEnabled="False" Height="64" VerticalAlignment="Top" HorizontalAlignment="Center" />
- Adicione definições de pincéis de cor nas declarações da classe MainPage:
// Cores para elipse quando pushbutton pressionado/não pressionado
private SolidColorBrush redBrush = new SolidColorBrush(Windows.UI.Colors.Red);
private SolidColorBrush grayBrush = new SolidColorBrush(Windows.UI.Colors.LightGray);
- Implemente manipulação do LED com essas cores:
// No construtor - cor inicial
this.PBStatusLED.Fill = grayBrush;
// Em PushButtonPressed() - cor conforme estado
switch (pbPinValue) {
case PinState.HIGH:
this.PBStatusLED.Fill = redBrush;
break;
case PinState.LOW:
this.PBStatusLED.Fill = grayBrush;
break;
}
- Build, deploy e teste nos alvos. Voilà!
Agora melhorar usando evento digital.
- Comente todo código do timer, mas mantenha
PushButtonPressed()(por isso separada do handler do tick).
- Adicione delegado de evento ao
OnConnectionEstablished()dentro da action:
arduino.AnalogPinUpdatedEvent += Arduino_AnalogPinUpdated;
Tentativa de implementar handler (falha — roda em thread separada da UI thread, mesmo problema do if (InvokeRequired) no Windows Forms):
private async void Arduino_DigitalPinUpdated(byte pin, PinState pinValue) {
if (pin == PB_PIN) {
Pushbutton_Pressed(pinValue);
}
}
- Implemente corretamente:
private async void Arduino_DigitalPinUpdated(byte pin, PinState pinValue) {
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {
if (pin == PB_PIN) {
Pushbutton_Pressed(pinValue);
}
});
}
- Build, deploy e teste nos alvos. Voilà!
[8] Adicionar Entrada Analógica
Extensão adiciona barra de progresso na UI para exibir nível de potenciômetro no hardware. Entrada analógica via A0, pino 14.
Minha placa de desenvolvimento fornece potenciômetro. Se não tiver, implemente circuito:

Pinos analógicos são pino 14 (A0) a pino 19 (A5).
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
O handler do evento fornece índice analógico (0 a 5) não número do pino.
Valores analógicos variam 0 a 1024 (10 bits).
// Nota: Precisa número real do pino, não índice analógico:
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
- Reative timer de polling e desative evento pushbutton na classe MainPage.
- No grid XAML UI adicione linha e ProgressBar:
<ProgressBar x:Name="analogBar" Value="0" Margin="10" Maximum="255" Height="32" IsIndeterminate="False" Grid.Row="8" Foreground="Green"/>
- Adicione código do pino analógico:
private const int ANALOG_PIN = 14;
Defina modo analógico em OnConnectionEstablished() como acima.
Adicione ao timer tick:
// Nota: Analog Read pino número é índice analógico
int PinValue = arduino.analogRead(ANALOG_PIN - 14);
this.analogBar.Value = PinValue;
- Build, deploy e teste nos alvos. Varie potenciômetro e observe ProgressBar.
Versão orientada a eventos
- Comente código do Poll Timer novamente.
- Adicione handler de evento analógico a
OnConnectionEstablished():
// Nota: Precisa número real do pino, não índice analógico:
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
- Adicione método
Arduino_AnalogPinUpdated:
private async void Arduino_AnalogPinUpdated(byte pin, ushort PinValue) {
// Nota: Número do pino é índice analógico
if (pin == ANALOG_PIN - 14) {
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => {
this.analogBar.Value = PinValue;
});
}
}
Nota: atualização UI novamente feita assincronamente.
- Build, deploy e teste nos alvos.
[9] Adicionar Saída PWM
Deixado ao leitor implementar saída analógica como PWM para acionar LED (dimmer via slider).
- Pinos PWM: 3, 5, 6, 9, 10, 11
- Definir pino como PWM:
arduino.pinMode(PWM_PIN, PinMode.PWM) - Definir nível PWM:
arduino.analogWrite(byte, ushort) - Valores analogWrite: 0 a 255 (parâmetro ushort)
Posso fornecer solução futuramente.
[1] Usei versão anterior aposentada do módulo Bluetooth, mas funcionalidade parece mesma.
Código
- WindowsRemoteArduino_Win10.zip
WindowsRemoteArduino_Win10.zip (C#)
Versão estendida do "Blinky"
Entrada, Saída, Entrada Analógica
UI mais elaborada
Sem preview (download apenas).
Esquemáticos

Processo de manufatura
- Construa um Controle Remoto Universal Profissional para Raspberry Pi com LIRC
- Construa uma Porta com Reconhecimento Facial Seguro usando Windows IoT e Raspberry Pi
- Monitoramento Preciso de Temperatura e Umidade com SHT15 no Windows 10 IoT Core
- Instalando Windows 10 IoT Core no Raspberry Pi 3 Model B+: Guia Passo a Passo
- Estendendo GoPiGo v2 no Windows 10 IoT Core para Raspberry Pi 3
- Aplicativos e Dispositivos Essenciais para Equipes de Cadeia de Suprimentos Remotas
- Controle Remoto Universal Android com Arduino, 1Sheeld e IR
- Crie Animações e Jogos Envolventes em LCD com Arduino UNO
- Dominando o Design de PCB para a Internet das Coisas: Um Guia Abrangente
- Cisco Lança Monitoramento IoT Gerenciado na Nuvem para Ambientes TI e OT