[Tips and Tricks] Correr una App de consola .NET en la Intel Galileo

galileo-illustrationIntroducción

En la Preview Release del programa de desarrollo de Windows para IoT podemos desarrollar aplicaciones para la Intel Galileo utilizando las APIs Arduino Wiring y un subconjunto de Win32. En el pasado //BUILD 2014 en San Francisco, Microsoft anuncio la futura disponibilidad del modelo de desarrollo de aplicaciones Windows universales.

Aplicación .NET de consola

Abrimos Visual Studio y creamos una nueva aplicación de consola:

Nuevo proyecto de Consola

Nuevo proyecto de Consola

Vamos a crear una aplicación muy sencilla, nos mostrará los primeros 100 números primos. Para ello, crearemos un Helper que nos indicará si un número es o no primo:

public static bool IsPrime(int number)
{
     if ((number & 1) == 0)
          return number == 2;

     for (int i = 3; (i * i) <= number; i += 2)
     {
          if ((number % i) == 0)
               return false;
     }

     return number != 1;
}

En nuestra App crearemos un bucle con los primeros 100 números e iremos verificando si son o no primos:

Console.WriteLine("--- Primes between 0 and 100 ---");

for (int i = 0; i < 100; i++)
{
     bool prime = PrimeHelper.IsPrime(i);
     if (prime)
     {
          Console.Write("Prime: ");
          Console.WriteLine(i);
     }
}

Console.ReadLine();

Si la ejecutamos veremos un resultado como el siguiente:

100 primeros primos

100 primeros primos

Vamos a desplegar la App en la Galileo y a ejecutar la misma. Recordamos que la Galileo es una placa Open Hardware basado en el procesador Quark SoC X1000 de 32bits de Intel. Por lo tanto, si queremos ejecutar la aplicación debemos modificar la plataforma destino a x86 en las propiedades de compilación de nuestro proyecto.

Compilar en x86

Compilar en x86

Utilizamos Galileo Watcher con la Galileo conectada a nuestro equipo de desarrollo para acceder a los recursos compartidos y copiar la aplicación:

Copiamos la App en los recursos compartidos

Copiamos la App en los recursos compartidos

Todo listo!. Si ejecutamos nuestra aplicación vía Telnet el resultado es:

Ejecutando la App en la Galileo vía Telnet

Ejecutando la App en la Galileo vía Telnet

Podéis descargar el sencillo ejemplo realizado a continuación:

También podéis acceder al código fuente directamente en GitHub:

Ver GitHub

Recordar que cualquier tipo de duda o sugerencia la podéis dejar en los comentarios de la entrada.

A tener en cuenta

Hemos verificado que nuestra aplicación .NET de consola funciona perfectamente. De hecho, muchas otras aplicaciones de consola podrían funcionar. La mayoría de funciones del Core asi como mscorlib/mscoree funcionaran. Sin embargo, al comenzar a utilizar librerías dependientes no implementadas obtendremos distintos tipos de excepciones. No funciona todo lo que sería necesario. Por ejemplo, si utilizamos System.Diagnostics.Debug, obtendremos una excepción.

Si queremos desarrollar aplicaciones para la Galileo las APIs Wiring son la opción sólida. Sin embargo,  tenemos un subconjunto de APIs Win32 soportadas que nos permiten poder ejecutar aplicaciones .NET como la vista en este artículo.

Más información

[IoT] Introducción al «Internet de las Cosas» con la Intel Galileo

IoT IconIntroducción

IoT acrónimo utilizado para referirnos a Internet of Things o lo que es lo mismo en nuestro idioma, el Internet de las Cosas es un término sin duda de moda. La leemos y se habla comunmente referenciando varias temáticas relacionadas con la tecnología.

Pero… ¿Qué es el Internet de las Cosas?

Internet de las Cosas

Internet de las Cosas

Vivimos en un mondo cada vez más conectado. Es habitual que muchos cuenten con teléfono conectado a la red pero a su vez es habitual tener tambien tablet, ordenador y otros elementos básicos conectados. Cada día estamos rodeados de más tecnología interconectada entre sí. Elementos cotidianos en nuestra vida diaria comienzan a estar conectados e identificados. Esto permite un mayor control y gestión del usuario sobre el conjunto de su vida digital.

Para los desarrolladores nos abre un mundo de posibilidades en un abanico de sectores gigantescos que hasta ahora eran imposibles o estaban fuera del alcance de muchos de nosotros.

En el artículo de hoy, vamos a analizar la Intel Galileo, que es Windows para IoT y a crear nuestro primer proyecto básico para ella.

¿Te apuntas?

¿Intel Galileo?

La Intel Galileo es una placa Open Hardware basado en el procesador Quark SoC X1000 de 32bits de Intel con una velocidad de 400MHz. Cuenta con conector Ethernet, un zócalo para microSD, puerto serie RS-232, USB Host, un puerto mini PCI Express y 8 MByte NOR Flash.

Además la placa es compatible con el IDE de Arduino y con las Arduino Shields pero basado en un procesador Intel aportando una serie de posibilidades extras que veremos a continuación.

NOTA: La Galileo incluye pines compatibles con una amplia gama de protectores Arduino Uno R3.

Intel Galileo

Intel Galileo

Preparando el entorno

Antes de compenzar a trabajar con la Galileo debemos preparar nuestro entorno, tanto el equipo de desarrollo como la propia Galileo.

Preparando el equipo de desarrollo

En nuestro equipo de desarrollo necesitaremos los siguientes prerrequisitos:

  • Una cuenta Microsoft para registrarnos en el programa de desarrollo Windows para el Internet de las Cosas en Connect.
  • Visual Studio 2013.

NOTA: Cualquier versión de Visual Studio 2013 esta soportada incluida la versión Express. Si cuentas con la versión Express necesitas instalar Nuget Package Manager. Visual Studio 2015 aun no esta soportado.

Lo primero que debemos hacer es registrarnos en de desarrollo Windows para IoT en Microsoft Connect. Una vez registrados, procederemos a la descarga de WindowsDeveloperProgramforIOT.msi:

Descarga de WindowsDeveloperProgramforIOT.msi

Descarga de WindowsDeveloperProgramforIOT.msi

Tras descargar instalaremos Windows Developer Program for IoT que nos añadirá las herramientas y plantillas necesarias para poder trabajar con la Intel Galileo:

Instalamos Windows Developer Program for IOT

Instalamos Windows Developer Program for IOT

Entre el conjunto de opciones instaladas, al final de proceso veremos que contamos con la herramienta Galileo Watcher:

Galileo Watcher

Galileo Watcher

Esta herramienta nos permite detectar la placa que tengámos conectada a la misma red.

Para acceder de forma remota a la palca e interactuar con ella será necesario también utilizar Telnet. Es una característica incluida en Windows, tan solo debemos verificar que este activada.

Para ello, nos dirigimos a Inicio y hacemos clic en Panel de Control. Nos dirigimos a Programas y características y hacemos clic sobre la opción Activar o desactivar las características de Windows.

Habilitar Telnet

Habilitar Telnet

En el listado de características de Windows seleccionamos la opción Cliente Telnet y aceptamos.

Preparando la Intel Galileo

Necesitaremos los siguientes prerrequisitos:

  • Una tarjeta microSD de al menos 16GB.

Comenzamos descargando los paquetes necesarios:

Descargamos apply-BootMedia.cmd y  Microsoft Windows for Intel Galileo

Descargamos apply-BootMedia.cmd y Microsoft Windows for Intel Galileo

Tras la descarga de los ficheros necesarios vamos a preparar la tarjeta microSD. Comenzamos formateándola en FAT32.

A continuación, abrimos una línea de comandos con privilegios de Administrador. Escribiremos:

cd /d %USERPROFILE%\Downloads
apply-bootmedia.cmd -destination {YourSDCardDrive} -image {.wimFile downloaded above} -hostname mygalileo -password admin

NOTA: YourSDCardDrive es la unidad de la tarjeta SD en la máquina de desarrollo.

16 Tarjeta SD

Estructura de la tarjeta SD

Conectando con la Galileo

Una vez preparada la microSD estamos listos para conectar con la placa. Podemos utilizar varias herramientas para la comunicación con la misma, Galileo Watchet y Telnet.

Conectando y arrancando la Galileo

Adaptador USB a 10/100Mbps

Adaptador USB a 10/100Mbps

Tras preparar la tarjeta microSD en el paso anterior la insertaremos en la Galileo. Proporcionaremos energía a la placa con su adaptador de corriente y la conectaremos a nuestro equipo de desarrollo utilizando en adaptador de USB a 10 / 100Mbps.

Una vez conectado debemos esperar a que termine el arranque de Windows en la Galileo.

NOTA: El arranque de Windows en la Galileo es un proceso que puede llegar a tardar hasta aproximadamente 2 minutos aunque normalmente es más rápido. Durante este proceso podemos observar que el LED de la tarjeta microSD parpadea frecuentemente. Cuando el LED deje de parpadear con frecuencia, nos indicará que el proceso se completo.

Conexión con la Galileo

Conexión con la Galileo

Galileo Watcher

Tras el arranque de la placa en nuestro equipo de desarrollo podremos ver más información de la misma en la herramienta Galileo Watcher:

Información de la Galileo desde la herramienta Galileo Watcher

Información de la Galileo desde la herramienta Galileo Watcher

La herramienta es muy sencilla de utilizar. Mediante un  menu contextual nos permite realizar acciones como:

  • Copiar dirección MAC: Nos permite copiar al Clipboard la dirección MAC de la Galileo.
  • Copiar dirección IP: Nos permite copiar al Clipboard la dirección IP de la Galileo.
  • Abrir Telnet: Nos abre una sesión Telnet con la placa.
  • Abrir navegador: Además de ejecutar Windows, cuenta con un pequeño servidor Web.
  • Recurso compartido red: Al contar con Windows, contamos con la posibilidad de tener el recurso compartido C$.
Menu contextual Galileo Watcher

Menu contextual Galileo Watcher

Telnet

La herramienta Galileo Watcher nos permite abrir una conexión Telnet con la Galileo. Los parámetros de la conexión son:

  • Username: Administrator
  • Password: admin

NOTA: No es la única vía para acceder a la Galileo utilizando Telnet.

Telnet

Telnet

Abrir navegador

Tenemos tres opciones incluidas en esta opción:

  • Task List: Listado de procesos Windows en ejecución.
  • File List: Listado de ficheros.
  • Memory Statistics: Uso de memoria.
WebServer

WebServer

Recurso compartido de red

Al contar con Windows, contamos con la posibilidad de tener el recurso compartido C$. Los parámetros para conectar son:

  • Username:myGalileo\ Administrator
  • Password: admin
Acceder a recursos compartidos de la Galileo

Acceder a recursos compartidos de la Galileo

NOTA: myGalileo es el nombre de la placa. En caso de problemas de conexión, utilizaremos la IP de la misma.

Una vez conectado podemos acceder al sistema de archivos de la Galileo como a cualquier recurso compartido C$ de un sistema Windows.

Conexión Recursos compartidos

Conexión Recursos compartidos

Nuestro primer «Hola Mundo»

Llegado a este punto es hora de pasar a la acción creando nuestro primer proyecto. Abrimos Visual Studio y nos dirigimos a las plantillas dentro de la categoría Visual C++. Tendremos una nueva categoría Windows for IoT donde encontraremos una plantilla Galileo Wiring App que nos permitirá crear Apps para la Galileo:

Hola Mundo!

Hola Mundo!

El proyecto por defecto nos incluye el siguiente código:

void loop()
{
    // TODO: Add your code here

    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
    Log(L"LED OFF\n");
    delay(1000);               // wait for a second
    digitalWrite(led, HIGH);   // turn the LED on by making the voltage HIGH
    Log(L"LED ON\n");
    delay(1000);               // wait for a second
}
Led

Led

El proyecto por defecto (y el «Hola Mundo» habitual) en la Galileo consiste en hacer parpadear un simple LED conectado en el Pin 13.

El código es muy sencillo, cada segundo se modifica el voltaje del Led para hacerlo parpadear.

Llega el momento del despliegue. Antes de desplegar debemos asegurarnos de verificar una correcta configuración. En las propiedades del proyecto nos dirigimos al apartado de Debugging.

En el valor de la propiedad Remote Server Name debemos establecer el nombre de nuestra placa, recordad que podemos verlo facilmente con la herramienta Galileo Watcher. Además, podemos configurar facilmente donde desplegaremos la aplicación modificando el valor de la propiedad Working Directory.

Propiedades del despliegue

Propiedades del despliegue

Tras desplegar se nos pedirán credenciales y Visual Studio realizará el despliegue. Podemos verficar el mismo accediendo a los recursos compartidos de la placa.

Podéis descargar el sencillo ejemplo realizado a continuación:

También podéis acceder al código fuente directamente en GitHub:

Ver GitHub

Y hasta aquí llegamos en esta introducción con la Galileo. En futuras entradas veremos aplicaciones más complejas, como correr aplicaciones .NET en la misma y otras opciones. Recordar que cualquier tipo de duda o sugerencia la podéis dejar en los comentarios de la entrada.

Más información