Bueno, ya tenemos aquí nuestro pequeño juguete. ¿Ahora qué? ¿Por donde empezamos?

Si damos una vuelta por el sitio web de Windows IOT, encontramos el ejemplo perfecto para empezar: Blinky

Blinky es una Universal Windows Platform (UWP) App, basada en WPF/C#, que controla un diodo LED a través del contrador GPIO integrado de la Raspberry Pi 2.  ¡Fácil, sencillo y para toda la familia!

Por donde empezar

Te recomiendo empezar a descargar los samples de IOT KIT (92 mb) y seguir el ejemplo “Blinky”. Aquí haremos haciendo una lectura entre líneas de todo lo que va sucediendo mientras lo implementamos.

IOT Kit: Universal Windows Platform (UWP) Apps

Las Universal Windows Platform (UWP) Apps son el nuevo paradigma de desarrollo de aplicaciones unificadas de Microsoft. Es la evolución natural de las Apps para Windows 8. Cuando hacemos aplicaciones para IOT Kit, estamos creando aplicaciones UWP.

Al crear una aplicación para UWP, estás creando una aplicación que tiene la posibilidad de ejecutarse en cualquier dispositivo de Windows:

  • Familia de dispositivos móviles: Windows Phone, tabléfonos
  • Familia de dispositivos de escritorio: tabletas, portátiles, equipos
  • Familia de dispositivos de equipo: concentrador de Surface
  • Familia de dispositivos del IoT: dispositivos compactos como aparatos domésticos o que se pueden llevar puestos

Puedes limitar tu aplicación a una sola familia de dispositivos (como la familia de dispositivos móviles) o puedes hacer que la aplicación esté disponible en todos los dispositivos que ejecutan Windows.

Este artículo de la MSDN, de donde he sacado la cita anterior, puede resultar de gran utilidad para entender mejor el concepto.

Conceptos básicos de electrónica

Obviamente, cuando entramos en el mundo hardware necesitamos algunos conceptos básicos de electrónica. Así que tuve que tirar mano de memoria para poder entender mínimamente que estaba haciendo:

  • Corriente continua: Positivo (Rojo). Negativo (Negro). La corriente circula del polo negativo al positivo, y en su paso los componentes electrónicos lo aprovechan (por ejemplo, para encender una luz).
  • Formulario: No está de más tener a mano las fórmulas matemáticas relacionas con la electricidad… Son las mismas que habrás aprendido si has cursado Bachillerato Tecnológico o alguna asignatura de electrónica elemental.
  • Este ejemplo utiliza el puerto de alimentación de 3.3v (PIN 1, positivo), y el GPIO (Pin 29, negativo).
  • GPIO: El GPIO es un “interruptor” que luego controlaremos mediante software. Tiene dos posiciones “Abierto” (pasa corriente) o “Cerrado” (no pasa corriente)
  • Resistencia eléctrica: Este artículo de la Wikipedia explica de forma bastante inteligible qué son y qué utilidad tienen en la electrónica. Importante es la codificación de colores, que indica la resistencia que ofrece al paso de la electricidad. Si no elegimos la resistencia adecuada, ¡podríamos quemar el LED por exceso de potencia!:

https://es.wikipedia.org/wiki/Resistor

https://es.wikipedia.org/wiki/Resistor

¡Manos a la obra!

¿Ya lo tenemos más o menos claro? Hora de “cablear” la breadboard tal y como nos marca el artículo de Blinky (muy bien detallado, por cierto):
blink-01

Nos descargamos el pack completo de samples para Windows 10 IoT Kit y nos encontramos con esta aplicación Universal Windows Platform (UWP):

Las UWP pueden tener una interfaz de usuario, que en este caso es WPF:

 

 

 

Este es el aspecto de la página WPF en la vista previa de Visual Studio:

blink-03

 

Resumen rápido del código

Cuando se crea la página, se crea un nuevo timer, que se disparará cada 500ms. se inicializa el GPIO y, si todo ha ido bien, se arranca el timer.

InitGPIO iniciativa el GPIO de Windows 10 IOT. El GPIO nos permite controlar el estado de los puertos GPIO (abierto o cerrado). Si el GPIO no se encuentra disponible en el dispositivo, se muestra un mensaje por pantalla.

Por defecto, se establece el valor del Pin en “High” (cerrado).

Una vez la aplicación está iniciada, ocurrirá un evento cada 500ms, causado por el timer. Este evento lo que hará será abrir o cerrar el GPIO, en base a su estado anterior (si estaba abierto, lo cierra. Si estaba cerrado, lo abre). También refleja este hecho por pantalla.

Ya tenemos nuestro código. Antes de desplegar y ver el código funcionando, deberemos configurar las opciones de inicio del proyecto, para que el código se despliegue en nuestra Pi2. En el “Solution Explorer” > Botón derecho sobre “Blink (Universal Windows) > Properties > Debug > Y configuramos las “Start Options”:

blink-04

Deberemos especificar la dirección IP de la Pi2 (lo puedes ver en la pantalla de espera de Windows 10 IOT) y el modo de autenticación. Por defecto no hay autenticación configurada.

Una vez configurado, cerramos esta pantalla y le damos a “Depurar”, asegurándonos que la plataforma seleccionada es “ARM” y está seleccionada la opción “Remote Machine”:

blinky-05

Si no hay ningún error… la UWP debería desplegarse en la Pi2 y empezar a ejecutarse inmediatamente:

blinky-02

Nota: Como podrás observar, cuando el Led se enciende físicamente, se apaga en el monitor, y viceversa. No se si esta sería la intención original del autor, pero bajo mi punto de vista, el código del timer está al revés, y debería ser así para que se encendiera al mismo tiempo en pantalla y LED:

Resumen

¡Nuestra primera aplicación IOT! Yeah!

Cada 500 ms, nuestro pequeño programa va intercambiando el estado del puerto GPIO 5, abriéndolo o cerrandolo, con lo que la luz del LED se activa cuando el GPIO deja pasar corriente eléctrica.

Al acabar este ejemplo me surge una duda existencial. ¿Si estamos ante una UWP, podremos cambiar este ejemplo para crear una UWP basada en WinJS, con una interfaz HTML y JavaScript/AngularJS en lugar de WPF/C#?

Para descubrirlo, ¡no te pierdas el próximo post!

Tagged as: