IoT:Windows Remote Arduino e aplicativos universais
Componentes e suprimentos
| × | 1 | ||||
| × | 1 |
Sobre este projeto
Nota:Veja as atualizações nos comentários na parte inferior.
Um aplicativo UWP do Windows 10 pode ser criado com base no cabeamento remoto biblioteca de modo que o aplicativo possa interagir com um dispositivo Arduino executando Firmata. Um aplicativo, semelhante ao exemplo do Windows Remote Arduino “Blinky”, mas com acréscimos de recursos, é desenvolvido. Ele executa GPIO (saída E entrada), bem como algum IO analógico. Este aplicativo é funcionalmente igual à versão do Windows 8.1 no blog anterior desta série. Este blog funciona com o mesmo material (ou seja, repete muito dele) que o blog anterior, mas a partir do contexto da Plataforma Universal do Windows (UWP), em vez do contexto do Windows 8.1 Universal App. O destino do aplicativo é o desktop Win 10, o telefone Win 10 e o Raspberry PI2 (executando o Win 10 IoT). O último alvo é um "trabalho em andamento". Este blog pode ser lido sem referência ao blog anterior.
Este projeto está detalhado em meu blog em http://embedded101.com/Blogs/David-Jones/entryid/636/Windows-10-IoT-Windows-Remote-Arduino-and-Universal-Windows-Platform-Apps
O exemplo do Windows Remote Arduino “Blinky” está em ms-iot.github.io.
Aplicativos universais e aplicativos universais da plataforma Windows
Os aplicativos universais (UA) alcançaram seu apogeu no Windows 8.1. Você pode implementar aplicativos direcionados ao desktop do Windows Intel, ARM RT Surface e Windows Phone (ARM), todos na mesma solução. Eles podem compartilhar código comum, como manipuladores de eventos, computação geral e dados. O código XAML deve ser específico para o destino. Você acabou de compilar os subprojetos separados para cada destino. Durante as compilações, o código comum foi incluído.
Com a mudança de paradigma “One Windows” no Windows 10, o mesmo código para todos os destinos, incluindo o código XAML, pode ser usado para todos os destinos. O mesmo projeto só precisa ser recompilado para destinos diferentes. Com o nome UA aplicado aos aplicativos do Windows 8, um novo nome foi necessário para os aplicativos verdadeiramente universais. Por isso, o nome de aplicativos da Plataforma Universal do Windows foi cunhado para o Windows 10.
Todas as plataformas do Windows 10 oferecem suporte a aplicativos UWP. Mas existem extensões específicas para cada plataforma. Por exemplo, as extensões IoT do Windows 10 oferecem suporte a GPIO, I2C, SPIO, etc. As extensões móveis oferecem suporte a funções de telefone. Etc. UWP fornece uma camada API central garantida em todos os dispositivos.
Os SDKs de extensão do Windows 10. As extensões Desktop, Mobile e IoT são verificadas.
Para este blog, usamos o modelo UWP em vez do UA como no blog anterior. Não precisamos de nenhum SDK de extensão.
[1] Configure a comunicação Bluetooth com o dispositivo Arduino.
Você pode pular esta seção se já tiver feito a atividade do Win 8.1.
USB ou Bluetooth podem ser usados para as comunicações Firmata entre o dispositivo Arduino e o dispositivo Windows. Para Windows 10, ambos podem ser usados, enquanto para Windows 8.1 apenas o Bluetooth pode ser usado. Para esta versão do aplicativo, o Bluetooth será usado. Eu usei um Sparkfun Bluetooth Mate Gold enquanto o Sparkfun Bluetooth Mate Silver foi usado com o exemplo “Blinky” mencionado acima. A principal diferença é que o alcance do Gold é de até 100m enquanto que o do Silver é de 10m. As configurações de handshaking padrão também são diferentes. Ambos têm uma interface UART de nível TTL que pode ser usada tanto para configurar o modo de operação do dispositivo Bluetooth quanto para interagir com a porta serial do Arduino.
Se você precisar configurar o dispositivo Bluetooth, um dispositivo Sparkfun ou Freetronics USB-Serial ou Free pode ser usado para configurar o dispositivo por meio de um terminal serial de desktop. Você também pode redefinir o dispositivo para as configurações padrão, conectando o pino PIO6 (na verdade, é PIO4) em alto e alternando três vezes.
O Bluetooth Mate tem o mesmo pino do Sparkfun FTDI Basic e, portanto, podem ser usados de forma intercambiável. você não pode conectar o Bluetooth Mate diretamente a uma placa FTDI Basic (você terá que trocar TX e RX). Essa configuração pode ser usada com um terminal serial de área de trabalho, com o dispositivo FTDI USB conectado à área de trabalho, para configurar o dispositivo Bluetooth (ou para usar o dispositivo Bluetooth para comunicações seriais a partir da área de trabalho.
As configurações seriais TTL UART padrão são:
- · Taxa Baud 115.200
- · 8 bits
- · Sem paridade
- · 1 ponto de parada
- · Controle de fluxo de hardware habilitado (no Mate Silver é nenhum)
- · Perfil de porta serial (SPP): FireFly-WXYZ
onde WXYZ são os últimos 4 dígitos do endereço BT MAC do dispositivo. - · Senha 1234
Observe que o dispositivo pode armazenar até 8 pares de dispositivos.
A documentação do dispositivo Bluetooth está em:
http://www.sparkfun.com/datasheets/Wireless/Bluetooth/rn-bluetooth-um.pdf
A configuração do Firmata é para uma taxa Baud de 57600 que precisa ser alterada ou o dispositivo Bluetooth configurado para isso. Para este exercício, vamos modificar a configuração do Firmata, que é a abordagem mais fácil. O fluxo de controle do hardware também pode ser gerenciado configurando o dispositivo Bluetooth, mas para este exercício é gerenciado conectando RTS ao CTS.
Enquanto o dispositivo Bluetooth pode ser montado em uma placa de ensaio e conectado ao dispositivo Arduino a partir daí, optei por montar um soquete para ele em um escudo de prototipagem.
Um Arduino Shield Header de 6 pinos foi soldado ao dispositivo Bluetooth nos pinos TTL UART com o soquete voltado para fora. Os pinos foram dobrados 900 para baixo para que o dispositivo possa ser conectado verticalmente em outro conector de proteção. O soquete BT pode então ser usado para conectá-lo diretamente ao módulo FTDI Basic montado de forma semelhante, se a configuração for necessária. Um fio foi posteriormente soldado ao PIO6 (PIO4) no módulo Bluetooth, para redefinição de fábrica.
Figura 3 Módulo Bluetooth com cabeçalho de proteção nos pinos UART e cabeçalhos de proteção
Um cabeçalho de 8 blindagem foi montado no meio da blindagem do protótipo na parte inferior. Adicione também cabeçalhos na parte externa da blindagem para que ele possa se conectar diretamente ao Uno.
Figura 4 Arduino Prototype Shield para montagem do módulo Bluetooth
O módulo Bluetooth é então inserido voltado para os pinos GPIO, em direção aos pinos 0 e 1 (Rx / Tx), deixando o local amarelo claro. Um deles pode ser usado como um local temporário para o fio de redefinição de fábrica.
Figura 6 Módulo Bluetooth montado no dispositivo Arduino
[2] Configurar Firmata
Você pode pular esta seção se já tiver feito a atividade do Win 8.1.
Nota: Os pinos 0 e 1 do UART do Arduino Uno não estão disponíveis quando estão sendo programados via USB a partir do IDE do Arduino. Esses mesmos pinos são os que são conectados à interface TTL UART do módulo Bluetooth quando ele faz interface para comunicações Firmata. Portanto, quando o dispositivo Arduino for programado nesta seção, o dispositivo Bluetooth não deve ser conectado.
2.1 Supondo que você tenha desenvolvido anteriormente para um dispositivo Arduino (Uno), crie um novo escudo Firmata padrão:
2.2 Há uma alteração a ser feita, a taxa Baud. No IDE, faça uma busca por 57600. Substitua 115200. Salve o Sketch, chamei-o de Firmata_115200. Programe o Uno e esta parte está feita.
[3] Configure a pilha de software Universal App Firmata
Esta seção é apenas um pouco diferente daquela já realizada na atividade do Win 8.1.
A pilha de software consiste em três camadas:
A API Remote-Wiring implementa propriedades (configuração), métodos e eventos em um nível conceitualmente alto para interação de hardware do Arduino. Por exemplo, GPIO (por exemplo, Get e Set Pin, On Pin alterado etc). Ele se comunica com a camada Firmata usando o protocolo Firmata. Firmata se comunica pela pilha por meio do protocolo serial que é implementado como camadas de transporte Bluetooth e USB-Serial na camada Serial. A opção USB não está disponível para Windows 8.1.
Esta pilha de software chamada está disponível para duas fontes:
- https://github.com/ms-iot/windows-remote-arduino-samples
- https://github.com/ms-iot/remote-wiring/
Ambos contêm versões do Windows 8.1 e Windows 10. Embora as versões do Windows 10 de ambas as versões sejam compiladas, descobri que o Windows 8.1 da segunda não será compilado. Usei a versão RC do Visual Studio 2015:
- Microsoft Visual Studio Community 2015 RC
- Versão 14.0.22823.1 D14REL
- Microsoft .NET Framework
- Versão 4.6.00076
3.1 Baixe a primeira versão. Para fazer isso corretamente, você precisa clonar o repositório (não baixe o zip):
- Instale git ou GitHub
- No shell git ou GitHub Desktop Shell (é o Powershell), digite o seguinte em um diretório adequado:
git clone --recursive https://github.com/ms-iot/windows-remote-arduino-samples.git
A estrutura do diretório que você obtém é:
windows-remote-arduino-samples
o cabeamento remoto
Microsoft.Maker.win8_1
Microsoft.Maker.win10
fonte
o win8_1
o win10
As duas últimas pastas (win8_1 e win10) são apenas aplicativos de exemplo (incluindo o exemplo “blinky”) que iremos ignorar por enquanto. Ambas as versões do Maker usam a mesma pasta de fontes, portanto, para o Windows 10, precisamos apenas:
windows-remote-arduino-samples
o cabeamento remoto
Microsoft.Maker.win10
fonte
para uma pasta adequada. Eu sugiro um na raiz da unidade, digamos, c:\ wras10, pois descobri que você pode obter alguns erros com uma compilação de ARM devido a nomes de caminho serem muito longos. Você também pode copiar os arquivos .md para referência. Eles podem ser abertos no VS.
3.2 Abra o arquivo de solução em Microsoft.Maker.win10
3.3 Defina o destino como Win32 para construir a solução.
Três compilações estão concluídas. Um para cada uma das três camadas da pilha de software.
3.4 Faça o mesmo para a configuração ARM. Se você tem uma máquina x64, também pode tentar essa versão.
[4] Crie o aplicativo HW LED UWP
Há um "curto-circuito" nesta seção para aqueles que fizeram a atividade anterior do Win 8.1.
Para esta versão inicial do (s) aplicativo (s), um botão de software acenderá um LED de hardware e outro o apagará. O LED será conectado ao pino 5 do GPIO.
A documentação do “Blinky” diz que existem várias maneiras de obter e usar essas bibliotecas. Em última análise, o Nuget será o caminho, mas ainda não está disponível. Você pode fazer referência a essas versões construídas de uma maneira geral em seu sistema de desenvolvimento. A maneira mais fácil é apenas adicionar o aplicativo Universal necessário à solução e fazer referência a eles. Usaremos esse método.
4.1 Adicionar um novo aplicativo C # Windows Blank Universal à solução . (Observe, não o Windows 8.1 desta vez):
Dê a ele um nome adequado. Chamei o meu de wrauwp:aplicativo Windows Remote Arduino Universal UWP.
Observe que, desta vez, há apenas UM projeto criado (UWP). O código XAML e CSharp é o mesmo para as versões desktop e móvel do aplicativo. A diferença está em como ele é compilado.
Os recursos serial e Bluetooth são necessários no manifesto pacakage:
4.2 Abra o package.appmanifest no editor de texto (não em sua GUI) por View Code. O recurso Cliente da Internet está incluído na parte inferior. Modifique esta seção para:
Em packkage.appmanifest
Além disso, se estivéssemos usando USB-Serial em vez de Bluetooth-Serial no desktop, adicionaríamos um recurso para isso.
É necessária uma referência a cada uma das camadas de software relevantes:
4.3 Adicionar referências Firmata, RemoteWiring e Serial para o desktop UA (novamente só precisa fazer isso para um projeto):
DICA: Para aqueles que já fizeram o Windows 8.1 anterior, você pode agora dar um curto-circuito no que se segue :
- Copie o código xml da grade desse projeto para MainPage.xaml neste novo projeto.
- Agora você pode pular para o teste do aplicativo no (s) destino (s)
Para aqueles que continuam aqui…
4.4 Modificar o Grid XAML do UA para:
MainPage.xaml:UI
Comentário Desta vez, temos apenas um MainPage.cs, pois há apenas um projeto de aplicativo ... Um Windows.
Anteriormente, havia um para a área de trabalho e outro para o telefone, o que tornamos comum colocando uma versão no subprojeto de compartilhamento.
Todo o código cs se referirá a MainPage.cs
4.7 Na classe MainPage, adicione as seguintes declarações no início da classe:
MainPage.cs Declarations
// Usb não é compatível com Win8.1. Para ver as etapas de conexão USB, consulte a solução win10.
BluetoothSerial bluetooth;
RemoteDevice arduino;
// Os pinos usados. Nota:Números PIN reais.
private const int LED_PIN =5;
4.8 no construtor MainPage, após InitializeComponent () adicione:
Em MainPage () o construtor
bluetooth =new BluetoothSerial ("FireFly-748B");
arduino =novo RemoteDevice (bluetooth);
bluetooth.ConnectionEstablished + =OnConnectionEstablished;
Substitua FireFly-748B pelo seu SPP.
4.9 Implemente OnConnectionEstablished adicionando o seguinte método à classe:
Adicionar OnConnectionEstablished ()
private void OnConnectionEstablished ()
{
// habilite os botões na linha de execução da IU!
var action =Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler (() => {
this.OnButton.IsEnabled =true;
isso. OffButton.IsEnabled =true;
arduino.pinMode (LED_PIN, PinMode.OUTPUT);
}));
}
4.10 E, finalmente, adicione os manipuladores de eventos para os botões à classe:
Adicionar manipuladores de eventos de botão
private void OnButton_Click (object sender, RoutedEventArgs e)
{
// LIGUE o LED conectado ao pino 5
arduino.digitalWrite (5, PinState.HIGH);
}
private void OffButton_Click (objeto remetente, RoutedEventArgs e)
{
// DESLIGUE o LED conectado ao pino 5
arduino.digitalWrite (5, PinState.LOW);
}
4.11 Teste a compilação do aplicativo UWP em configurações x86, x64 e ARM
[5] Implementação e teste de aplicativos universais.
Nesta seção, conectaremos o LED de hardware ao dispositivo Arduino e executaremos o aplicativo na área de trabalho e um Windows 10 Phone *
Teste em seu desktop
5.1 Definir o aplicativo Desktop como o projeto de inicialização
5.2 Defina o destino como x86 e Máquina Local. Reconstrua o aplicativo UWP da área de trabalho
5.3 Conecte o Pin 5 do Arduino a um LED de hardware. Fornece GND, VCC e um resistor adequado em série.
Conforme mencionado em um blog anterior a respeito de Windows 10 IoT Raspberry PI 2 GPIO Eu uso uma placa de desenvolvimento para implementar meu IO de teste, como LEDs, interruptores etc. Se você não tiver uma placa semelhante, você pode querer usar o Configuração de hardware “Blinky” mas você precisará inverter a polaridade da configuração do pino nos manipuladores de botão.
5.4 Ligue o dispositivo Arduino e emparelhe o módulo Bluetooth com seu desktop (Passkey =1234). .. Presumo que você saiba como fazer isso.
5.5. Execute o aplicativo.
5.6 Provavelmente, ele irá perguntar a você se está tudo bem para o aplicativo se conectar ao dispositivo Bluetooth. OK
5.7 Teste a funcionalidade do aplicativo. Defina um ponto de interrupção no (s) manipulador (es) de botão e verifique se você pode depurar.
5.8 Repita 4.1 a 4.6 para x64 se você tiver uma área de trabalho de 64 bits.
5.9 Desligue o Bluetooth em seu desktop
Agora, para testar seu Windows 10 Phone, presumindo que o telefone esteja configurado para desenvolvimento.
5.10 Ligue o telefone, vá para Configurações / Bluetooth e ligue-o. Emparelhe com o módulo Bluetooth (senha =1234).
5.11 Continuando com o aplicativo Windows Universal como o projeto de inicialização ..
5.12 Defina o alvo para ARM ,, dispositivo e reconstrua
5.11 Conecte o telefone via USB Serial à área de trabalho e implante o aplicativo.
Agora, para testar o Raspberry PI 2
ESTE É UM TRABALHO EM ANDAMENTO. VEJA A NOTA NO FINAL DESTA SEÇÃO
5.13 O depurador remoto já está instalado e ativo no RPI2 configurado para Win 10 IoT.
5.14 Determine o endereço IP do RPI2, por exemplo, com o Windows IoT Core Watcher
5.15 Em Propriedades do Projeto-Depurar defina o destino como Máquina Remota, Sem autenticação e insira o endereço IP
5.16 Reconstrua o aplicativo UWP
5.17 Implante e teste o aplicativo no RPI2.
Ainda não tenho a versão RPI2 para conectar via Bluetooth:
- Bluetooth em geral ainda não é compatível
- Deixe comentários se tiver alguma ideia ou sucesso com isso.
- Vou atualizar aqui quando eu fizer progresso
[6] "embelezar" a interface do usuário
O seguinte irá embelezar a IU e adicionar botões Bluetooth Connect e Disconnect.
6.1 Modifique o código UI GRID XAML para ( PS:observe a alteração nas linhas da grade dos botões anteriores ):
Adicione dois botões & amp; amp;
A IU tem botões maiores e mais coloridos, proporcionando melhor usabilidade. Cheguei a isso depois de um teste de usuário com minha neta de 4 anos !.
O ProgressRing fica visível e circula enquanto o aplicativo está se conectando.
6.2 Insira na parte inferior de OnConnectionEstablished ():
Em OnConnectionEstablished ()
// BT está conectado, então desligue o anel de progresso
this.progress1.IsActive =false;
this.progress1.Visibility =Visibility.Collapsed;
6.3 Adicione os seguintes manipuladores para os botões Conectar e Desconectar:
Adicionar novos manipuladores de eventos do botão
private void ConnectButton_Click (objeto remetente, RoutedEventArgs e)
{
// esses parâmetros não importam para bluetooth- Arduino Firmata, exceto SerialConfig.SERIAL_8N1
bluetooth.begin (115200, SerialConfig.SERIAL_8N1);
this.ConnectButton.IsEnabled =false;
// Conectando BT para mostrar anel de progresso
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;
}
6.4 Comente ou remova a seguinte linha de MainPageConstructor como agora no manipulador do botão Connect:
bluetooth.begin (115200, SerialConfig.SERIAL_8N1);
6.5 Adicionar o seguinte gerenciamento de estado ao manipulador OnButton
Em OnButton_Cllick ()
this.OffButton.IsEnabled =true;
this.OnButton.IsEnabled =false;
6.6 E o seguinte para o manipulador OffButton:
Em OffButton_Click
this.OffButton.IsEnabled =false;
this.OnButton.IsEnabled =true;
6.7 Implante e teste o aplicativo em todos os três (4) destinos, como na seção 5
[7] Adicionar uma entrada de botão de pressão
Nesta extensão para os aplicativos universais do Windows 8.1, um botão de entrada GPIO, no Arduino Pin 5, é facilitado e seu estado é exibido na IU. A entrada será inicialmente detectada pela leitura periódica do valor.
A funcionalidade será então melhorada com a implementação de um manipulador para o evento DigitalPinChanged
7.1 Modifique o controle de grade no código XAML da interface do usuário para ambos UA da seguinte maneira:
Adicionar uma caixa de texto à IU
7.2 Na classe MainPage, especifique o pino de entrada:
- Em declarações no topo da classe, adicione o pino de entrada:
Em declarações MainPage
private const int PB_PIN =6;
- No manipulador OnConnectionEstablished, defina-o como input ::
Em OnConnectionEstablished
arduino.pinMode (PB_PIN, PinMode.INPUT);
7.3, Adicione um temporizador para pesquisar a entrada da seguinte forma:
- Em declarações no topo da classe:
Em declarações MainPage
// No modo de sondagem, os tiques do temporizador fornecem uma amostra das entradas
private DispatcherTimer pbPolltimer;
- No construtor, defina o cronômetro:
Na página principal ()
this.pbPolltimer =new DispatcherTimer ();
this.pbPolltimer.Interval =TimeSpan.FromMilliseconds (250);
this.pbPolltimer.Tick + =PBTimer_Tick;
this.pbPolltimer.Stop ();
- Adicione seu manipulador de eventos de tique de cronômetro
Adicionar manipulador de tíquetes de cronômetro de sondagem
PinState pbPinValue =PinState.LOW;
private void PBTimer_Tick (objeto remetente, objeto e)
{
PinState pbPinValueTemp =arduino.digitalRead (6);
Pushbutton_Pressed (pbPinValueTemp);
}
- Implementar PushButton_Pressed ():
Adicionar PushButton_Pressed ()
private void Pushbutton_Pressed (PinState pbPinValueTemp)
{
if (pbPinValue! =pbPinValueTemp)
{
// Grava o valor se alterado
TxtPin6.Text ="Pushbutton:" + pbPinValueTemp.ToString ();
pbPinValue =pbPinValueTemp;
}
}
7.4 Precisamos de um interruptor de botão. Felizmente, minha placa de desenvolvimento fornece isso, então eu apenas uso isso. Se você não tem tal besta, implemente o circuito oposto.
Nesta extensão para os aplicativos universais do Windows 8.1, um botão de entrada GPIO, no Arduino Pin 5, é facilitado e seu estado é exibido na IU. A entrada será inicialmente detectada pela leitura periódica do valor. Com o Win 10 IoT Raspberry PI 2 (RPI2), foi relatado que existem alguns bugs na frequência com que as entradas digitais são registradas, que serão corrigidos no RTM para Win 10 IoT.
A funcionalidade será então aprimorada com a implementação de um manipulador para o evento DigitalPinChanged
O debouncing pode ser melhorado para esta situação no hardware:
- Coloque um pequeno capacitor na chave para adicionar algum debouncing do hardware como um atraso RC.
- Adicione também um gatilho Schmidt a este circuito.
Com o RPI2 há uma opção para adicionar debouncing através da configuração do software.
Com o RPI2, há uma opção de adicionar debouncing por meio da configuração do software.
7.5 Construir, implantar e testar o aplicativo nos destinos como anterior
Vamos adicionar um LED simulado por software à IU para exibir o estado do switch.
7.6 Adicione o seguinte à IU no código XAML da grade em ambos os aplicativos universais:
- Adicione outra definição de linha (na parte inferior):
- Adicione o seguinte controle de elipse a essa linha:
Adicione uma elipse à IU
7.7 Adicione duas definições de pincel de cor às declarações de classe MainPage no topo:
Adicione cores nas declarações
// Cores para elipse quando o botão de hardware é pressionado / não pressionado
private SolidColorBrush redBrush =novo SolidColorBrush (Windows.UI.Colors.Red);
private SolidColorBrush grayBrush =novo SolidColorBrush (Windows.UI.Colors.LightGray);
7.8 Implemente a manipulação do LED com essas cores da seguinte forma:
- No construtor da classe, defina sua cor inicial:
No construtor
// Comece com uma cor diferente para a elipse
this.PBStatusLED.Fill =grayBrush;
- Em PushButtonPressed (), defina sua cor de acordo com o estado do botão:
Adicionar a Pushbutton_Pressed ()
switch (pbPinValue)
{
case PinState.HIGH:
this.PBStatusLED.Fill =redBrush;
break;
case PinState.LOW:
this.PBStatusLED.Fill =grayBrush;
break;
}
7.9 Construir, implantar e testar os aplicativos nos destinos ..Wala!
Agora, para melhorar este código usando o evento digital.
7.10 Comente todo o código relacionado ao cronômetro, mas deixe a função PushButtonPressed (); daí a razão para separar para o manipulador de eventos do timer tick.
7.11 Adicionar a especificação de delegado de evento ao manipulador de eventos OnConnectionEstablished () dentro da ação
Adicionar a OnConnectionEstablished
arduino.AnalogPinUpdatedEvent + =Arduino_AnalogPinUpdated;
Podemos tentar implementar o manipulador de eventos da seguinte maneira:
DigitalPinUpdated inválido
private async void Arduino_DigitalPinUpdated (byte pin, PinState pinValue)
{
if (pin ==PB_PIN)
{
Pushbutton_Pressed (pinValue);
}
}
Mas isso falha porque o evento é executado em um encadeamento separado do encadeamento principal da IU. This is the same issue as in .NET Windows Forms if (InvokeRequired) scenario.
7.12 Implement the event handler as follows
Add DigitalPinUpdated
private async void Arduino_DigitalPinUpdated(byte pin, PinState pinValue)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
if (pin ==PB_PIN)
{
Pushbutton_Pressed(pinValue);
}
});
}
7.13 Build, deploy and test the apps on the targets. Wala
[8] Add an Analog Input
This extension to the app functionality adds a progress bar to the UA UI to display the level of a potentiometer in the hardware.
The analog input is via A0, pin 14.
Again my development board provides a potentiometer for this purpose but if you don’t have such you need to implement this circuit:
The analog input pins are pins 14 (A0) to pin 19 (A5).
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
The comment above is quite pertinent. The event handler signature provides the analog pin index (0 to 5) not the pin number.
Analog values range from 0 to 1024. (10 bit)
// Note:Need actual pin number, not analog index:
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
8.0 Re-enable the Poll timer and disable the Pushbutton event in the MainPage class
8.1 In the grid control in the UI XAML code add another row to the grid as previous and add a ProgressBar:
Add a ProgressBar to the UI
8.2 Add the Analog pin code as follows.
- Declare the pin at the top of MainPage class:
Add the Analog Pin
private const int ANALOG_PIN =14;
- Set its mode to analog in OnConnectionEstablished() as above
- Add the following to the timer tick event:
Add to Timer Tick Handler
//Note:Analog Read Pin number is the analog index
int PinValue =arduino.analogRead(ANALOG_PIN-14);
this.analogBar.Value =PinValue;
8.3 Build, deploy and test the app on the targets. Vary the potentiometer position and observe the ProgressBar changes.
Now for the event driven version
8.4 Again comment out the Poll Timer code.
8.5 Add the analog event handler delegate specification to OnConnectionEstablished():
Set Analog Pin Mode
// Note:Need actual pin number, not analog ibndex:
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
8.6 Add the Arduino_DigitalPinUpdated event handler method:
Add AnalogPinUpdated
private async void Arduino_AnalogPinUpdated(byte pin, ushort PinValue)
{
//Note:Pin number is the analog index
if (pin ==ANALOG_PIN -14)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
this.analogBar.Value =PinValue;
});
}
}
Note that the UI update has again to be done asynchronously.
8.7 Build, deploy and test the app on the targets.
[9] Add a PWM output
It is left to reader to implement analog output as PWM, to drive a LED (dimmed via a slider).
- PWM pins:
3, 5, 6, 9, 10, and 11> - To set a pin as PWM:
arduino.pinMode(PWM_PIN,PinMode.PWM)> - To set a PWM level
arduino.analogWrite(byte, ushort)> - analogWrite values are from 0 to 255 (the ushort parameter)
I might provide a solution to this at a later stage.
[1] I actually used a retired earlier version of the Bluetooth module, but functionality seems to be the same.
Código
- WindowsRemoteArduino_Win10.zip
WindowsRemoteArduino_Win10.zipC#
An extended version of "Blinky"Input, Output, Analog Input
Fancier UI
No preview (download only).
Esquemas
Processo de manufatura
- Controle remoto universal Raspberry Pi
- Windows IoT:Porta de reconhecimento facial
- Windows 10 IoT Core e SHT15
- Windows 10 IoT Core para Raspberry Pi 3 Modelo B +
- GoPiGo v2 com Windows IoT
- Os aplicativos e dispositivos que dão suporte a equipes de cadeia de suprimentos remotas
- Controle remoto universal usando Arduino, 1Sheeld e Android
- Animação de LCD e jogos
- Guia para PCBs e IoT
- Cisco apresenta soluções de monitoramento remoto de IoT para TI e OT