Serie .NET Gadgeteer: Configuración del entorno de trabajo y hola mundo

Este es el primero de una serie de artículos relacionados con .NET Gadgeteer y .NET MicroFamework. En este artículo veremos cómo configurar el entorno de trabajo y crear nuestro  primer “hola mundo”.

Para los que no lo conozcáis, .NET MicroFramework es un proyecto open source de Microsoft con licencia Apache 2.0 a través del cual podemos programar dispositivos embebidos utilizando C#, un subset de .NET y Visual Studio.

 .NET Gadeteer por su parte, es otro proyecto open source que nos permite ensamblar dispositivos electrónicos sin necesidad de ser soldadores expertos. Gracias a él podemos crear prototipos de nuestros gadgets usando diferentes módulos hardware y haciendo uso del .NET MicroFramework. 

Para toda la serie nos vamos a basar en el uso de una placa Cerbuino Bee.

Placa_Cerbuino_Bee

Esta placa es un buen punto de partida, apenas cuesta 38€ y es especialmente práctica puesto que es compatible con Gadgeteer y también con Arduino, por lo que podremos usar sensores diseñados para ambas plataformas. Además incorpora puertos USB y un lector de tarjetas microSD que nos permitirán experimentar sin necesidad de añadir otros módulos por ahora. Como curiosidad vale la pena mencionar que es OSHW (open source hardware).

 

Para poder empezar a trabajar vamos a necesitar configurar nuestro entorno de trabajo y tendremos que instalar varias cosas:

- Visual Studio 2012

- .NET MicroFramework 4.3. Es importante destacar que la placa Cerbuino Bee, soporta el .NET Microframework 4.2. Por lo que tendremos que hacer target a esta versión cuando compilemos.

- .NET Gadgeteer Core

- SDK del fabricante. Si vas a utilizar también la placa Cerbuino Bee, el fabricante ha creado este instalador que incluye: el SDK del hardware, .NET Microframework y .NET Gadgeteer Core, por lo que será suficiente que instales Visual Studio y este SDK.

Comprobando la conexión con nuestra Cerbuino Bee y actualizaciones de Firmware

Simplemente con los anteriores productos instalados ya podríamos crear nuestro primer proyecto, pero como buenos geeks vamos a comprobar antes que nuestra Cerbuino Bee tiene instalado la última versión del Firmware, para ello utilizaremos una herramienta que hemos instalado con el SDK del fabricante.

  • Conecta la Cerbuino Bee a tu Windows PC a través del cable USB, cuando lo hagas se encenderá un led rojo justo detrás del conector USB de alimentación y Windows te instalará automáticamente el driver necesario.
  • Si estás utilizando Windows 8 o superior, pulsa la tecla Windows para ir a la pantalla de inicio, escribe “FEZ Config” y ejecuta la aplicación, si utilizas alguna otra versión de Windows puedes buscar esta aplicación a través del menú de inicio.
  • Comprueba la conexión a tu Cerbuino Bee pulsando el botón “Ping”.

Ping_device

En la pantalla de output te aparecerá un mensaje “TinyCLR”, lo cual indica que todo está funcionando correctamente y que tenemos respuesta. Ahora pulsa el botón “Check device for update”, en mi caso podemos ver que mi Cerbuino Bee dispone de versiones más actuales tanto del firmware como del “Loader”, por lo que procederemos a actualizar ambos antes de empezar a programar, si la tuya ya está actualizada puedes saltarte los siguientes pasos.

Check_device_for_update

Actualización del Boot loader

El Loader, llamado TinyBooter, es lo primero que se ejecuta al encender la placa y es el encargado de ejecutar a su vez el firmware llamado TinyCLR. Para actualizarlo podemos utilizar MFDeploy, una herramienta genérica que está incluida con SDK de .NET MicroFramework, aunque para simplificar el proceso seguiremos utilizando el SDK del fabricante. Los pasos a seguir son:

  • Descomprime el fichero STM_DFU.zip que está en la carpetaC:\Program Files (x86)\GHI Electronics\GHI OSHW NETMF v4.2 SDK\FEZ Cerb Family\Firmware
  • Ejecuta el instalador DfuSe_Demo_V3.0.2_Setup_amd64.exe si tu Windows PC es de 64 bit, o DfuSe_Demo_V3.0.2_Setup.exe si es de 32 bits.
  • Instala los drivers USB que están en la carpeta C:\Program Files (x86)\STMicroelectronics\Software\DfuSe\Driver

Lo siguiente que tenemos que hacer es configurar nuestra Cerbuino Bee en “Boot mode”, la forma de hacerlo sería –con la placa desconectada- añadir un “header” y utilizar un “jumper” en los conectores habilitados que están marcados como LDR y puedes ver a la izquierda del procesador. En mi caso, dado que no tenía a mano y no quería esperar a tener uno, simplemente cerré el circuito con un cable, concretamente pelando los extremos del cierre que venía en la bolsa del pan de molde y conectando ambos puntos tal y como podéis ver en la imagen inferior.

Placa_Cerbuino_Bee_Loader_Mode

Una vez que hayáis configurado la Cerbuino Bee en “boot mode”, podéis conectarla de nuevo a vuestro Windows PC y veréis que se enciende el led rojo igual que antes. Una vez que esté encendida la placa, y sin apagarla, quita la conexión que acabamos de hacer para entrar en “boot mode”.

Ahora vamos a utilizar otra herramienta del fabricante, si utilizáis Windows 8 desde la pantalla de inicio escribid “STDFU Tester”, si utilizáis otra versión de Windows podéis buscarla a través del menú de inicio. Al abrir la aplicación si has hecho el procedimiento adecuadamente la aplicación mostrará en el desplegable “Devices”: “STM Device DFU Mode” tal y como aparece en la imagen siguiente.

Update_loader_dfu_mode

Lo siguiente que vamos a hacer es borrar el contenido de la placa, así que presta atención para no equivocarte en los pasos. Desde la pestaña “Protocol”:

  • Pulsa el botón “Create from Map”.
  • Selecciona la operación “Erase” en el radio button de la izquierda.
  • Pulsa el botón “Go”.
  • Pulsa el botón “Load DFU File”, abre la carpeta “C:\Program Files (x86)\GHI Electronics\GHI OSHW NETMF v4.2 SDK\FEZ Cerb Family\” Selecciona el fichero “TinyBooter_4_2_6_1.dfu” (los números variarán en función de la versión actual).
  • Pulsa el botón “Download”
  • Pulsa el botón “Go”.

Llegados a este punto ya habrás actualizado el “Loader”, puedes comprobarlo abriendo de nuevo la aplicación “FEZ Config” y pulsando en “Check for Device Updates”.

Actualización del Firmware

Una vez que hemos actualizado el “Loader” ahora vamos a actualizar el firmware, no os preocupéis que el proceso es mucho más sencillo que el anterior. Este proceso va a borrar el firmware de la placa asegúrate que no la desconectas ni reseteas accidentalmente. En la aplicación FEZ Config que ya hemos utilizado, pulsa la pestaña “Firmware Updater”, deberías ver la siguiente pantalla.

Update_device_firmware

En siguientes artículos utilizaremos un módulo ethernet, por lo que vamos a marcar el checkbox “Ethernet Firmware”, si no tienes pensado utilizarlo no es necesario que lo marques. Ahora tan sólo tienes que pulsar “Next” y esperar que acabe el proceso que verás como progresa en una pantalla parecida a la que te muestro a continuación.

Update_device_firmware_3

Con esto hemos acabado con la actualización y configuración del entorno de desarrollo.

 

Programación Hola Mundo

Ahora ya estamos listos para crear y desplegar nuestra primera aplicación en la Cerbuino Bee, para ello crearemos un proyecto usando la plantilla “.NET Gadgeteer Application”, lo cual nos abrirá una nueva ventana donde seleccionaremos nuestra placa tal y como podéis ver en la imágenes inferiores.

Create_Gadgeteer_ProjectCerbuinoBee_selector

Lo habitual ahora sería escribir un simple “Hello world”, el reto es que no disponemos de pantalla y escribir en la consola para verlo en nuestro Windows PC no da mucha sensación de estar interactuando con la placa. Una opción mejor para interactuar con la Cerbuino Bee podría ser encender el led de debug usando el comando Mainboard.SetDebugLED(true), pero un proyecto parece que no empieza sin un “hello world”. Por eso he pensado que podríamos hacer más interesante el uso del led y programar nuestro hola mundo creando un simple traductor Morse.

Morse_code_translator

Podéis descargar la implementación del traductor Morse, la idea general es extremamente simple: le pasamos un texto plano y el traductor lo convierte en un array de int, el cual contiene la secuencia Morse basada en el código Morse internacional con 0 y 1, dónde el 0 indica apagar el led y el 1 encenderlo.

Durante el boot de la placa traduciremos “hello world” a Morse, crearemos un timer, cada vez que transcurra el intervalo de tiempo encenderemos o apagaremos el led de debug en función de lo que corresponda al mensaje Morse en ese intervalo, finalmente apagaremos el led. Para esto tan solo necesitamos escribir un código parecido al siguiente:

 int[] morseCode = null;
int index = 0;

private void SayHelloWorld()
{
    MorseCodeTranslator translator = new MorseCodeTranslator();

    morseCode = translator.Translate("hello world");

    GT.Timer timer = new GT.Timer(300);
    timer.Tick += timer_Tick;
    timer.Start();
}

void timer_Tick(GT.Timer timer)
{
    if (morseCode == null)
        return;

    if (index < morseCode.Length)
    {
        Mainboard.SetDebugLED(morseCode[index] == 1);

        index++;
    }
    else
    {
        timer.Stop();
        Mainboard.SetDebugLED(false);
    }
}

Podéis descargar el proyecto de ejemplo completo para seguir experimentando.

Espero que este primer artículo os sirva para empezar a trabajar en vuestros proyectos .NET Gadgeteer, no dudéis en compartir las pruebas que vayáis haciendo.

 

Jose Bonnin

@wasat

Technical Evangelist Manager