IoT:Aplicaciones universales y Arduino remoto de Windows
Componentes y suministros
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Acerca de este proyecto
Nota:vea las actualizaciones en los comentarios en la parte inferior.
Se puede crear una aplicación de Windows 10 para UWP sobre Cableado remoto biblioteca de modo que la aplicación pueda interactuar con un dispositivo Arduino que ejecute Firmata. Se desarrolla una aplicación similar al ejemplo "Blinky" de Windows Remote Arduino, pero con funciones adicionales. Realiza GPIO (salida Y entrada) así como algunas E / S analógicas. Esta aplicación es funcionalmente igual a la versión de Windows 8.1 en el blog anterior de esta serie. Este blog funciona con el mismo material (es decir, lo repite en gran parte) que el blog anterior, pero desde el contexto de la Plataforma universal de Windows (UWP) en lugar del contexto de la aplicación universal de Windows 8.1. El objetivo de la aplicación es el escritorio Win 10, el teléfono Win 10 y Raspberry PI2 (con Win 10 IoT). El último objetivo es un "trabajo en progreso". Este blog se puede leer sin referencia al blog anterior.
Este proyecto se detalla en mi blog en http://embedded101.com/Blogs/David-Jones/entryid/636/Windows-10-IoT-Windows-Remote-Arduino-and-Universal-Windows-Platform-Apps
El ejemplo de Windows Remote Arduino "Blinky" está en ms-iot.github.io.
Aplicaciones universales y aplicaciones de la plataforma universal de Windows
Las aplicaciones universales (UA) alcanzaron su cenit en Windows 8.1. Podía implementar aplicaciones dirigidas al escritorio de Windows Intel, ARM RT Surface y Windows Phone (ARM), todo en la misma solución. Podrían compartir código común, como controladores de eventos, cálculo general y datos. El código XAML tenía que ser específico para el destino. Acaba de compilar los subproyectos separados para cada objetivo. Durante las compilaciones, se incluyó el código común.
Con el cambio de paradigma "One Windows" en Windows 10, se puede usar el mismo código para todos los destinos, incluido el código XAML, para todos los destinos. Solo es necesario volver a compilar el mismo proyecto para diferentes objetivos. Con el nombre de UA aplicado a las aplicaciones de Windows 8, se necesitaba un nuevo nombre para las aplicaciones verdaderamente universales. De ahí que se acuñó el nombre de aplicaciones de la Plataforma universal de Windows para Windows 10.
Todas las plataformas de Windows 10 admiten aplicaciones para UWP. Pero hay extensiones específicas para cada plataforma. Por ejemplo, las extensiones de Windows 10 IoT son compatibles con GPIO, I2C, SPIO, etc. Las extensiones móviles son compatibles con las funciones del teléfono. Etc. UWP proporciona una capa de API central garantizada en todos los dispositivos.
Los SDK de extensión de Windows 10. Las extensiones de Escritorio, Móvil e IoT están marcadas.
Para este blog usamos la plantilla UWP en lugar del UA como en el blog anterior. No necesitamos ninguno de los SDK de extensión.
[1] Configure la comunicación Bluetooth con el dispositivo Arduino.
Puede omitir esta sección si ya ha realizado la actividad de Win 8.1.
Se puede usar USB o Bluetooth para las comunicaciones Firmata entre el dispositivo Arduino y el dispositivo Windows. Para Windows 10 se pueden usar ambos, mientras que para Windows 8.1 solo se puede usar Bluetooth. Para esta versión de la aplicación, se utilizará Bluetooth. Usé un Sparkfun Bluetooth Mate Gold mientras que el Sparkfun Bluetooth Mate Silver se usó con el ejemplo "Blinky" mencionado anteriormente. La principal diferencia es que el alcance del Gold es de hasta 100 m, mientras que el del Silver es de 10 m. La configuración predeterminada del protocolo de enlace también es diferente. Ambos tienen una interfaz UART de nivel TTL que se puede utilizar tanto para configurar el modo de funcionamiento del dispositivo Bluetooth como para interactuar con el puerto serie Arduino.






Si necesita configurar el dispositivo Bluetooth, se puede usar un dispositivo Sparkfun o Freetronics USB-Serial o Free para configurar el dispositivo a través de un terminal serial de escritorio. También puede restablecer de fábrica el dispositivo a la configuración predeterminada conectando el pin PIO6 (en realidad, PIO4) a alto y alternar tres veces.
Bluetooth Mate tiene el mismo pin que el Sparkfun FTDI Basic, por lo que se pueden usar indistintamente. no puede conectar directamente el Bluetooth Mate a una placa FTDI Basic (tendrá que intercambiar TX y RX). Esa configuración se puede usar con un terminal serial de escritorio, con el dispositivo FTDI USB conectado al escritorio, para configurar el dispositivo Bluetooth (o para usar el dispositivo Bluetooth para comunicaciones seriales desde el escritorio.
La configuración de serie TTL UART predeterminada es:
- · Velocidad en baudios 115,200
- · 8 bits
- · Sin paridad
- · 1 bit de parada
- · Control de flujo de hardware habilitado (en Mate Silver esto es Ninguno)
- · Perfil de puerto serie (SPP): FireFly-WXYZ
donde WXYZ son los últimos 4 dígitos de la dirección BT MAC del dispositivo. - · Contraseña 1234
Tenga en cuenta que el dispositivo puede almacenar hasta 8 emparejamientos de dispositivos.
La documentación del dispositivo Bluetooth se encuentra en:
http://www.sparkfun.com/datasheets/Wireless/Bluetooth/rn-bluetooth-um.pdf
La configuración de Firmata es para una velocidad en baudios de 57600 que debe cambiarse o el dispositivo Bluetooth configurado para eso. Para este ejercicio, modificaremos la configuración de Firmata, que es el enfoque más sencillo. El flujo de control del hardware también puede manejarse configurando el dispositivo Bluetooth, pero para este ejercicio se maneja conectando RTS a CTS.
Si bien el dispositivo Bluetooth puede montarse en una placa de pruebas y conectarse al dispositivo Arduino desde allí, elegí montar un enchufe para él en un protector de prototipos.
Se soldó un encabezado Arduino Shield de 6 pines al dispositivo Bluetooth en los pines TTL UART con el zócalo hacia afuera. Los pines se doblaron 900 hacia abajo para que el dispositivo se pueda enchufar verticalmente en otro cabezal de protección. El enchufe BT se puede usar para conectarlo directamente al módulo básico FTDI montado de manera similar si se requiere configuración. Posteriormente, se soldó un cable a PIO6 (PIO4) en el módulo Bluetooth, para restablecer los valores de fábrica.
Figura 3 Módulo Bluetooth con encabezado de protección en los pines UART y encabezados de protección
Se montó un cabezal de 8 escudos en el medio del escudo prototipo en la parte inferior. También agregue encabezados en el exterior del escudo para que pueda conectarse directamente al Uno.
Figura 4 Arduino Prototype Shield para montar el módulo Bluetooth
Luego, el módulo Bluetooth se inserta mirando hacia los pines GPIO, hacia los pines 0 y 1 (Rx / Tx)., Dejando la ubicación amarilla clara. Uno de esos se puede utilizar como ubicación temporal para el cable de restablecimiento de fábrica.
Figura 6 Módulo Bluetooth montado en dispositivo Arduino
[2] Configurar Firmata
Puede omitir esta sección si ya ha realizado la actividad de Win 8.1.
Nota: Los pines 0 y 1 de UART de Arduino Uno no están disponibles cuando se está programando a través de USB desde el IDE de Arduino. Estos mismos pines son los que se conectan a la interfaz TTL UART del módulo Bluetooth cuando se interconecta para las comunicaciones Firmata. Por lo tanto, cuando se va a programar el dispositivo Arduino en esta sección, el dispositivo Bluetooth no debe estar conectado.
2.1 Suponiendo que ha desarrollado previamente para un dispositivo Arduino (Uno), cree un nuevo escudo Standard Firmata:
2.2 Se debe realizar un cambio, la velocidad en baudios. En el IDE, haga una búsqueda de 57600. Reemplácelo por 115200. Guarde el boceto, lo llamé Firmata_115200. Programe el Uno y esta parte está lista.
[3] Configurar la pila de software de Universal App Firmata
Esta sección solo es ligeramente diferente a la que ya realizó la actividad de Win 8.1.
La pila de software consta de tres capas:
La API de cableado remoto implementa propiedades (configuración), métodos y eventos a un nivel conceptualmente alto para la interacción del hardware Arduino. Por ejemplo, GPIO (p. Ej. Obtener y establecer pin, On Pin cambiado, etc.). Se comunica con la capa Firmata mediante el protocolo Firmata. Firmata se comunica con la pila a través del protocolo serial que se implementa como capas de transporte Bluetooth y USB-Serial en la capa serial. La opción USB no está disponible para Windows 8.1.
Esta pila de software llamada está disponible para dos fuentes:
- https://github.com/ms-iot/windows-remote-arduino-samples
- https://github.com/ms-iot/remote-wiring/
Ambos contienen versiones de Windows 8.1 y Windows 10. Si bien se compilarán las versiones de Windows 10 de ambas versiones, he descubierto que el Windows 8.1 de la segunda no se compilará. Usé la versión de Visual Studio 2015 RC:
- Microsoft Visual Studio Community 2015 RC
- Versión 14.0.22823.1 D14REL
- Microsoft .NET Framework
- Versión 4.6.00076
3.1 Descarga la primera versión. Para hacerlo correctamente, debe clonar el repositorio (no descargue el zip):
- Instale git o GitHub
- En git shell o GitHub Desktop Shell (es Powershell), ingrese lo siguiente desde un directorio adecuado:
git clone --recursive https://github.com/ms-iot/windows-remote-arduino-samples.git
La estructura de directorio de lo que obtiene es:
windows-remote-arduino-samples
o cableado remoto
Microsoft.Maker.win8_1
Microsoft.Maker.win10
fuente
o win8_1
o win10
Las dos últimas carpetas (win8_1 y win10) son solo aplicaciones de ejemplo (incluido el ejemplo "blinky") que ignoraremos por ahora. Ambas versiones de Maker utilizan la misma carpeta de fuentes, por lo que para Windows 10 solo necesitamos:
windows-remote-arduino-samples
o cableado remoto
Microsoft.Maker.win10
fuente
a una carpeta adecuada. Sugiero uno en la raíz de la unidad, por ejemplo, c:\ wras10, ya que descubrí que puede obtener algunos errores con una compilación ARM relacionados con nombres de ruta demasiado largos. Es posible que desee copiar también los archivos .md como referencia. Estos se pueden abrir en VS.
3.2 Abra el archivo de solución en Microsoft.Maker.win10
3.3 Establezca el destino en Win32 para construir la solución.
Se hacen tres construcciones. Uno para cada una de las tres capas de la pila de software.
3.4 Haga lo mismo para la configuración ARM. Si tiene una máquina x64, es posible que desee probar esa compilación también.
[4] Cree la aplicación HW LED UWP
Hay un "cortocircuito" en esta sección para aquellos que han realizado la actividad anterior de Win 8.1.
Para esta versión inicial de la aplicación, un botón de software encenderá un LED de hardware y otro lo apagará. El LED se conectará al pin 5 de GPIO.
La documentación de "Blinky" dice que hay varias formas de obtener y utilizar estas bibliotecas. En última instancia, Nuget será el camino, pero aún no está disponible. Puede hacer referencia a estas versiones compiladas de manera general en su sistema de desarrollo. La forma más fácil es simplemente agregar la aplicación Universal requerida a la solución y hacer referencia a ellas. Usaremos ese método.
4.1 Agregue una nueva aplicación C # Windows Blank Universal a la solución . (Tenga en cuenta que esta vez no Windows 8.1):

Dale un nombre adecuado. Llamé al mío wrauwp:Windows Remote Arduino Universal app UWP.
Tenga en cuenta que esta vez solo se creó UN proyecto (UWP). El código XAML y CSharp es el mismo para las versiones de escritorio y móviles de la aplicación. La diferencia está en cómo se compila.
Las capacidades serie y Bluetooth son necesarias en el manifiesto de pacakage:
4.2 Abra el package.appmanifest en el editor de texto (no su GUI) por Ver código. La capacidad del Cliente de Internet se incluye en la parte inferior. Modifique esta sección para:
En packkage.appmanifest
Además, si estuviéramos usando USB-Serial en lugar de Bluetooth-Serial en el escritorio, agregaríamos una capacidad para eso.
Se requiere una referencia a cada una de las capas de software relevantes:
4.3 Agregue referencias Firmata, RemoteWiring y Serial para el escritorio UA (nuevamente solo es necesario hacer esto para un proyecto):

SUGERENCIA: Para aquellos que ya han hecho la versión anterior de Windows 8.1, ahora pueden cortocircuitar lo que sigue :
- Copie el código xml de la cuadrícula de ese proyecto a MainPage.xaml en este nuevo proyecto.
- Ahora puede pasar a probar la aplicación en los objetivos
Para aquellos que continúan aquí ...
4.4 Modifique el XAML de cuadrícula de UA para:
MainPage.xaml:UI
Comentar Solo tenemos un MainPage.cs esta vez, ya que solo hay un proyecto de aplicación… Una Windows.
Anteriormente había uno para el escritorio y otro para el teléfono, que hicimos común al colocar una versión en el subproyecto compartido.
Todo el código cs se referirá a MainPage.cs
4.7 En la clase MainPage agregue las siguientes declaraciones en la parte superior de la clase:
Declaraciones de MainPage.cs
// Usb no es compatible con Win8.1. Para ver los pasos de la conexión USB, consulte la solución win10.
BluetoothSerial bluetooth;
Arduino RemoteDevice;
// Los pines utilizados. Nota:números PIN reales.
const privado int LED_PIN =5;
4.8 en el constructor MainPage, después de InitializeComponent () agregue:
En MainPage () el constructor
bluetooth =new BluetoothSerial ("FireFly-748B");
arduino =new RemoteDevice (bluetooth);
bluetooth.ConnectionEstablished + =OnConnectionEstablished;
Reemplace FireFly-748B con su SPP.
4.9 Implementar OnConnectionEstablished agregando el siguiente método a la clase:
Agregar OnConnectionEstablished ()
vacío privado OnConnectionEstablished ()
{
// ¡habilita los botones en el hilo de la interfaz de usuario!
var action =Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, nuevo Windows.UI.Core.DispatchedHandler (() => {
this.OnButton.IsEnabled =true;
arduino.pinMode (LED_PIN, PinMode.OUTPUT);
}));
}
4.10 Y finalmente agregue los controladores de eventos para los botones a la clase:
Agregar controladores de eventos de botón
private void OnButton_Click (remitente del objeto, RoutedEventArgs e)
{
// enciende el LED conectado al pin 5
arduino.digitalWrite (5, PinState.HIGH);
}
private void OffButton_Click (remitente del objeto, RoutedEventArgs e)
{
// apaga el LED conectado al pin 5
arduino.digitalWrite (5, PinState.LOW);
}
4.11 Pruebe la compilación de la aplicación para UWP en configuraciones x86, x64 y ARM
[5] Implementar y probar las aplicaciones universales.
En esta sección conectaremos el LED de hardware al dispositivo Arduino y ejecutaremos la aplicación en el escritorio y en un Windows 10 Phone *
Prueba en tu escritorio
5.1 Configurar la aplicación de escritorio como proyecto de inicio
5.2 Establezca el destino en x86 y máquina local. Reconstruir la aplicación de escritorio para UWP

5.3 Conecte el Pin 5 de Arduino a un LED de hardware. Proporcione GND, VCC y una resistencia adecuada en serie.
Como se mencionó en un blog anterior con respecto a Windows 10 IoT Raspberry PI 2 GPIO Utilizo una placa de desarrollo para implementar mi IO de prueba, como LED, interruptores, etc. Si no tiene una placa similar, es posible que desee utilizar la Configuración de hardware "Blinky" pero deberá invertir la polaridad de la configuración de los pines en los controladores de botones.
5.4 Encienda el dispositivo Arduino y empareje el módulo Bluetooth con su escritorio (contraseña =1234). .. Asumiré que sabes cómo hacer esto.
5.5. Ejecute la aplicación.
5.6 Probablemente le preguntará si está bien que la aplicación se conecte al dispositivo Bluetooth .. OK
5.7 Pruebe la funcionalidad de la aplicación. Establezca un punto de interrupción en los controladores de botones y compruebe que puede depurar.
5.8 Repita 4.1 a 4.6 para x64 si tiene un escritorio de 64 bits.
5.9 Apague Bluetooth en su escritorio
Ahora para probar su Windows 10 Phone, asumiendo que el teléfono está configurado para desarrollo.
5.10 Encienda su teléfono, vaya a Configuración / Bluetooth y enciéndalo. Emparéjelo con el módulo Bluetooth (contraseña =1234).
5.11 Continuando con la aplicación Windows Universal como proyecto de inicio.
5.12 Establecer el objetivo en ARM ,, Dispositivo y reconstruir
5.11 Conecte el teléfono a través de USB Serial al escritorio e implemente la aplicación.
Ahora para probar Raspberry PI 2
ESTE ES UN TRABAJO EN CURSO. VER NOTA AL FINAL DE ESTA SECCIÓN
5.13 El depurador remoto ya está instalado y activo en el RPI2 configurado para Win 10 IoT.
5.14 Determine la dirección IP del RPI2, por ejemplo, con Windows IoT Core Watcher

5.15 En Propiedades del proyecto-Depurar, configure el destino en Máquina remota, Sin autenticación e ingrese la dirección IP

5.16 Reconstruir la aplicación para UWP
5.17 Implemente y pruebe la aplicación en el RPI2.
Todavía no tengo la versión RPI2 para conectarme a través de Bluetooth:
- Bluetooth en general aún no es compatible
- Por favor, deje algún comentario si tiene alguna idea o si tiene éxito con esto.
- Actualizaré aquí cuando avance

[6] Mejora la interfaz de usuario
Lo siguiente mejorará la interfaz de usuario y agregará botones de conexión y desconexión de Bluetooth.
6.1 Modifique el código XAML de la cuadrícula de la interfaz de usuario a ( PD:tenga en cuenta el cambio en las filas de la cuadrícula de botones anteriores ):
Agregar dos botones & amp; amp;
La interfaz de usuario tiene botones más grandes y es más colorida, lo que proporciona una mejor usabilidad. ¡Llegué a esto después de que un usuario lo probara con mi nieta de 4 años !.
El ProgressRing es visible y circula mientras la aplicación se conecta.
6.2 Insertar en la parte inferior de OnConnectionEstablished ():
En OnConnectionEstablished ()
// BT está conectado, así que apague el anillo de progreso
this.progress1.IsActive =false;
this.progress1.Visibility =Visibility.Collapsed;
6.3 Agregue los siguientes controladores para los botones Connect y DisConnect:
Agregar controladores de eventos de botones nuevos
private void ConnectButton_Click (remitente del objeto, RoutedEventArgs e)
{
// estos parámetros no importan para bluetooth- Arduino Firmata, excepto SerialConfig.SERIAL_8N1
bluetooth.begin (115200, SerialConfig.SERIAL_8N1);
this.ConnectButton.IsEnabled =false;
// Conectando BT para mostrar el anillo de progreso
this.progress1.IsActive =true;
this.progress1.Visibility =Visibility.Visible;
}
private void DisconnectButton_Click (remitente del objeto, RoutedEventArgs e)
{
bluetooth.end ();
this.OnButton.IsEnabled =false;
this.OffButton.IsEnabled =false;
this.ConnectButton.IsEnabled =true;
this.DisconnectButton.IsEnabled =false;
}
6.4 Comente o elimine la siguiente línea de MainPageConstructor, ya que ahora está en el controlador del botón Conectar:
bluetooth.begin (115200, SerialConfig.SERIAL_8N1);
6.5 Agregue la siguiente administración de estado al controlador OnButton
En OnButton_Cllick ()
this.OffButton.IsEnabled =true;
this.OnButton.IsEnabled =false;
6.6 Y lo siguiente para el controlador OffButton:
En OffButton_Click
this.OffButton.IsEnabled =false;
this.OnButton.IsEnabled =true;
6.7 Implemente y pruebe la aplicación en los tres (4) objetivos como en la sección 5
[7] Agregar una entrada de botón
En esta extensión de las aplicaciones universales de Windows 8.1, se facilita una entrada GPIO de botón pulsador, en Arduino Pin 5, y su estado se muestra en la interfaz de usuario. La entrada se detectará inicialmente leyendo periódicamente el valor.
La funcionalidad se mejorará mediante la implementación de un controlador para el evento DigitalPinChanged
7.1 Modifique el control Grid en el código XAML de la interfaz de usuario para ambos UA de la siguiente manera:
Agregar un cuadro de texto a la interfaz de usuario
7.2 En la clase MainPage, especifique el pin de entrada:
- En las declaraciones en la parte superior de la clase, agregue el pin de entrada:
En declaraciones de MainPage
const privado int PB_PIN =6;
- En el controlador OnConnectionEstablished, configúrelo en input ::
En OnConnectionEstablished
arduino.pinMode (PB_PIN, PinMode.INPUT);
7.3, agregue un temporizador para sondear la entrada de la siguiente manera:
- En declaraciones en la parte superior de la clase:
En declaraciones de MainPage
// En el modo de encuesta, los ticks del temporizador muestrean las entradas
privado DispatcherTimer pbPolltimer;
- En el constructor configure el temporizador:
En MainPage ()
this.pbPolltimer =new DispatcherTimer ();
this.pbPolltimer.Interval =TimeSpan.FromMilliseconds (250);
this.pbPolltimer.Tick + =PBTimer_Tick;
this.pbPolltimer.Stop ();
- Agregue su controlador de eventos de tic del temporizador
Agregar controlador de tic del temporizador de encuesta
PinState pbPinValue =PinState.LOW;
privado void PBTimer_Tick (objeto remitente, objeto e)
{
PinState pbPinValueTemp =arduino.digitalRead (6);
Pushbutton_Pressed (pbPinValueTemp);
}
- Implementar PushButton_Pressed ():
Agregar PushButton_Pressed ()
pushbutton_Pressed vacío privado (PinState pbPinValueTemp)
{
if (pbPinValue! =pbPinValueTemp)
{
// Escribir valor si se cambia
TxtPin6.Text ="Botón pulsador:" + pbPinValueTemp.ToString ();
pbPinValue =pbPinValueTemp;
}
}
7.4 Necesitamos un interruptor de botón. Afortunadamente, mi placa de desarrollo proporciona estos, así que solo los uso. Si no tiene una bestia así, implemente el circuito opuesto.
En esta extensión de las aplicaciones universales de Windows 8.1, se facilita una entrada GPIO de botón pulsador, en Arduino Pin 5, y su estado se muestra en la interfaz de usuario. La entrada se detectará inicialmente leyendo periódicamente el valor. Con Win 10 IoT Raspberry PI 2 (RPI2), se ha informado que hay algunos errores con la frecuencia con la que se registran las entradas digitales, que se solucionarán en el RTM para Win 10 IoT.
Luego, la funcionalidad se mejorará mediante la implementación de un controlador para el evento DigitalPinChanged
El rebote se puede mejorar para esta situación en el hardware:
- Coloque un pequeño condensador a través del interruptor para agregar algo de eliminación de rebotes de hardware como un retardo RC.
- También agregue un disparador Schmidt a este circuito.
Con el RPI2 hay una opción para agregar eliminación de rebotes a través de la configuración del software.
Con el RPI2 hay una opción para agregar supresión de rebotes a través de la configuración del software.
7.5 Cree, implemente y pruebe la aplicación en los destinos como anteriormente
Agreguemos un LED simulado por software a la interfaz de usuario para mostrar el estado del interruptor.
7.6 Agregue lo siguiente a la interfaz de usuario en el código XAML de cuadrícula en ambas aplicaciones universales:
- Agregar otra definición de fila (en la parte inferior) ::
- Agregue el siguiente control de elipse a esa fila:
Agregue una elipse a la interfaz de usuario
7.7 Agregue dos definiciones de pincel de color a las declaraciones de clase de MainPage en la parte superior:
Agregue colores en las Declaraciones
// Colores para la elipse cuando se presiona / no se presiona el botón de hardware
private SolidColorBrush grayBrush =new SolidColorBrush (Windows.UI.Colors.LightGray);
7.8 Implemente la manipulación del LED con estos colores de la siguiente manera:
- En el constructor de la clase establece su color inicial:
En el constructor
// Comience con un color apagado para la elipse
this.PBStatusLED.Fill =grayBrush;
- En PushButtonPressed () establece su color dependiendo del estado del botón:
Agregar a Pushbutton_Pressed ()
cambiar (pbPinValue)
{
caso PinState.HIGH:
this.PBStatusLED.Fill =redBrush;
romper;
caso PinState.LOW:
this.PBStatusLED.Fill =grayBrush;
romper;
}
7.9 Cree, implemente y pruebe las aplicaciones en los objetivos .. ¡Wala!
Ahora para mejorar este código usando el evento digital.
7.10 Comente todo el código relacionado con el temporizador, pero deje la función PushButtonPressed (); de ahí la razón para separar el controlador de eventos de tic del temporizador.
7.11 Add the event delegate specification to the OnConnectionEstablished() event handler within the action
Add to OnConnectionEstablished
arduino.AnalogPinUpdatedEvent +=Arduino_AnalogPinUpdated;
We could try to implement the event handler as follows:
Invalid DigitalPinUpdated
private async void Arduino_DigitalPinUpdated(byte pin, PinState pinValue)
{
if (pin ==PB_PIN)
{
Pushbutton_Pressed(pinValue);
}
}
But this fail as the event runs in a thread separate to the main UI thread. 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

Proceso de manufactura
- Mando a distancia universal Raspberry Pi
- Windows IoT:puerta de reconocimiento facial
- Windows 10 IoT Core y SHT15
- Windows 10 IoT Core para Raspberry Pi 3 Modelo B +
- GoPiGo v2 con Windows IoT
- Las aplicaciones y dispositivos que admiten equipos de cadena de suministro remota
- Control remoto universal usando Arduino, 1Sheeld y Android
- Animación LCD y juegos
- IOT - Smart Jar usando ESP8266, Arduino y sensor ultrasónico
- Guía de PCB e IoT
- Cisco presenta soluciones de monitoreo remoto de IoT para TI y OT