domingo, 14 de febrero de 2016

Consumiendo Servicios Web con Netduino

Se sorprenderán de como he empezado de una forma muy diferente a como comienzan todos los libros de Netduino, encendiendo y apagando LEDs, y es que básicamente lo que quiero que entiendan es que mi último interés es quedarme en temas de esa índole que son abordados en todos los libros de electrónica tanto de Arduino como de Netduino, seguramente también lo haremos, pero mi intención es que juntos nos trasportemos a entender como lograr la electrónica, el software y la nube trabajen para hacer el verdadero internet de las cosas.

La idea con este post es que también la gente que solo sabe electrónica entienda que hoy en día programar un backend para nuestros proyectos, ni siquiera necesita código. Nuestro backend será un servicio Node.js creado a través de los Wizard de Azure.

Así que bueno, para empezar vamos algo cool y simple, vamos a crear un servicio en Azure Mobile Service para que nuestro Netduino pueda enviar información.

En la consola de Azure encontrarán esa opción
Al seleccionar la opción nuevo se abre un submenú donde iniciamos la creación
Llenamos los datos de nuestro servicio
También de la base de datos que utilizará

Esperamos a que Azure finalice las  tareas necesarias

Hasta que nuestro servicio aparezca como listo para usarse

Al entrar a la pestaña de data podemos ver que no tenemos tablas creadas
Presionamos la opción adicionar tabla y le asignamos un nombre

Al confirmar que finalizamos empieza la creación de la tabla que no tarda mucho

 Podemos observar que la tabla no contiene registros

Al ir a la pestaña columnas vemos como azure crea algunos campos en nuestra tabla NoSql de forma automática. Presionamos el botón añadir columna para crear una propia.

Ahora damos un nombre a nuestra columna y elegimos el tipo de dato.
Después de confirmar verificamos que efectivamente la tabla tenga nuestra nueva columna

  
Para que nuestro demo sea más simple voy a cambiar los permisos de la tabla para que cualquiera pueda ingresar datos en ella.

Y ahora si lo que estabamos esperando empezar nuestro primer proyecto en Netduino. Como ven crear un proyecto de .NET Micro Framework es tan simple con cualquier proyecto de .NET en Visual Studio. Simplemente buscamos la sección y vemos todas las plantillas. Seleccionamos la que es acorde al Netduino que tenemos.

En el interior del proyecto encontramos algo familia, un punto de entrada Main típico de aplicaciones de consola.
Siendo nuestra intención probar si la red de nuestro Netduino quedo funcionando vamos a agregar dos referencias a nuestro proyecto, System.Http y System.IO

Además agregaremos un paquete de Nuget
Agregamos el Json.NETMF, para ayudarnos a serializar más facilmente.

Además creamos una entidad que nos permitrá guardar los datos en nuestra table. Ahora luce sencilla, sin embargo en otros laboratorios añadiremos más columnas. 


El código necesario para registrar datos en nuestra tabla se los pongo a continuación, es código .NET común el cual no es mi intención explicar pues es un consumo HTTP tradicional por POST. En verde resalto la línea que indica la Url con la que se debe apuntar a nuestro Azure Mobile Service.

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;
using Netduino.NetworkTest.Entities;
using System.IO;

namespace Netduino.NetworkTest
{
    public class Program
    {
        public static void Main()
        {
            try
            {
                EventLog eventLog = new EventLog()
                {
                    Description = "Hello Cloud"
                };
                string json = Json.NETMF.JsonSerializer
                    .SerializeObject(eventLog);

                Debug.Print("Message: " + json);

                var httpWebRequest = (HttpWebRequest)WebRequest
                    .Create(

                      "http://netduinotest.azure-mobile.net/tables/EventLog");

                httpWebRequest.Method = "POST";
                httpWebRequest.Accept = "application/json";
                httpWebRequest.ContentType = "application/json; charset=UTF-8";
                httpWebRequest.ContentLength = json.ToCharArray().Length;

                using (var streamWriter =
                    new StreamWriter(httpWebRequest.GetRequestStream()))
                {
                    streamWriter.Write(json);
                    streamWriter.Flush();
                    streamWriter.Close();
                }

                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader
                    = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                    Debug.Print(result);
                }
            }
            catch (Exception ex)
            {
                Debug.Print("Error: " + ex.Message);
            }
            finally
            {
                Thread.Sleep(Timeout.Infinite);
            }
        }
    }
}


En este punto revisamos la versión del .NET Micro Framework a usar, si aun no has actualizado tu Firmware, debes cambiarla a la correspondiente.

Además nos aseguramos que en la opción .NET Micro Framework este el método de transporte USB y este seleccionado nuestro Netduino
 Y ahora si, estamos listos para ejecutar nuestra app dando PLAY. En la ventana de salida podremos ver como inicia el despliegue de paquetes dentro del Netduino
Luego inicia la ejecución de nuestra aplicación y ups, así se vería un error. En el código que les copié ya está corregido, sin embargo cuando di ejecutar por primera vez olvide remover el HTTPS y dejar solo HTTP en la ruta del servicio de Azure Mobile Services. Como vemos en la imagen, el error es que no es soportado. Netduino no soporta SSL.
Volvemos a ejecutar la aplicación y ahora si tenemos una ejecución exitosa.
Si revisamos nuestro servicio en Azure, veremos el registro enviado desde nuestro Netduino

Starter Kit: Caja De Herramientas

He posteado algunas cosas rápidamente con el fin de dar línea para tener todo lo necesario para comenzar, una de esas cosas es hablar de algunas de las cosas que sería interesante tener para hacer algunos laboratorios.

En muchos lugares donde venden cosas para Arduino encontrarás los componentes necesarios, todos compatibles, finalmente son los componentes más básicos de la electrónica, un Starter Kit para Arduino está muy bien para iniciar. Si lo pides para Netduino te dirán que no tienen pues la mayoría de gente que los vende no entiende del tema, así que no les hagamos lios.

Sin embargo cuando de sensores se trata, mira la hoja de especificaciones, he encontrado algunos que dicen explicitamente no trabajar con Netduino, así que ten cuidado y valida antes de comprar.

Algunas de las cosas que puedes comprar para empezar son: LEDs, fotoresistencias, pulsadores, potenciómetros, resistencias de diferentes valores, Display Segmentados, Multimetro, Protoboard, Pinza para pelar y cortar cable y por supuesto una caja de herramientas para guardarlo todo.

Entre mis recomendados están los siguientes:

Teclado matricial 4x4: Desde que lo ví quise tenerlo, excelente para dar entradas de datos a los labs, además es super sencillo de usar con el .NET Micro Framework Toolbox


Jumpers Wire: En el caso de los cables les recomiendo de varios materiales, tipos y tamaños. Con materiales me refiero a los cables tradicionales y los flexibles que son mucho más cómodos para trabajar con los cables largos que van a los sensores. Los cortos en cable tradicional se pueden poner más facilmente en la protoboard pues tienen más rigidez. Es importante que tengas algunos macho - macho, y otros macho hembra.


Sensores y otros: Es bueno tener servos, buzzer y diferentes tipos de sensores de acuerdo a los labs que quieras hacer


Con respecto a estos, ten en cuenta de compralos ya con su cable o si no tener un set de cables para sensores



Fuente de la imagen del header: http://www.domusweb.it/en/design/2013/02/15/arduino-out-of-the-box.html

Actualizando el Firmware de Netduino

He de confesar que al empezar a investigar como hacer esto me preocupe en poco, con la escasez de Netduinos en mi ciudad lo que menos queria era dañarlo. Pero después de buscar un rato cual era el mejor camino, descubrí que en realidad actualizar el Netduino Plus 2 de la versión 4.2.1 a 4.3.1 es bastante sencillo, lo cual no parecia así en versiones atrás.

En mi caso algo habia mal con mi firmware, al poner una Micro SD no se detectaba más el dispositivo, con la actualización ya no pasó más.

Lo primero que debes hacer es bajar los drivers DfuSe_Demo. Al descomprimir instala el setup según tu procesador. Si quieres curiosear en esta herramientas está bien, pero no necesitas hacer nada allí para la actualización. Estos drivers se requieren para que el Netduino Update Tool reconozca tu Netduino

Luego debes descargar el Netduino Update Tool. Al entrar al enlace notarás que te reporta un error, lo que debes hacer es iniciar sesión en la página y entonces funcionará sin problema el enlace de descarga.

Antes de inicial la actualización, desconecta tu Netduino Plus 2 del PC y presiona el botón de la board mientras vuelves a conectarlo. 

Ejecuta ahora NetduinoUpdate.exe desde la carpeta descomprimida y en la pantalla deberás ver que la herramienta lista tu Netduino. Selecciónalo e inicia proceso


Es bastante sencillo, cuando la barra de progreso termine, tu Netduino estará actualizado. Sin embargo debes tener en cuenta que debes configurar de nuevo la MAC de tu Netduino para que funcione la red. La MAC la encuentras debajo de la board y puedes actualizarla usando el Deployment Tool del .NET Micro Framework.


Allí simplemente ingresas tu nueva MAC Address y presionas el botón Update.

jueves, 28 de enero de 2016

Compartiendo Wifi con Netduino Plus 2

Después de tener todo listo para empezar, hay algo obviamente que en nuestra ruta falta y es darle salida a internet a nuestro Netduino, de todas las primera aventuras esta fue para mi la más complicada, la información está en todos los foros, pero al ser conversaciones y reportes de errores es un poco demorado entender a que se refieren.

Por otro lado mi PC tiene algo en particular y es que debido a que uso varias máquinas virtuales para trabajar con dispositivos móviles, me todo un ratito entender que era lo que debia configurar para poder usar la Wifi en casa con mi Netduino.

Los tradicional es conectar desde tu modem de internet un cable a tu netduino, sin embargo si como en mi caso eso significa cablear tu casa, este post podría ser también tu solución. Esto además de que al irse de casa a hacer un demo, depender de la red de cada lugar es una mala idea y a mano solo tenemos el plan de datos del móvil o bien la conexión de nuestro portatil a alguna red por ahí.

Lo primero que necesitas es un cable cruzado, reconocerlo es tan simple como comparar sus extremos, si la distribución de colores es diferente, ya lo tienes.

Ahora vamos a entrar a las opciones de red de nuestro Panel de Control y buscar la configuración de los adaptadores de red.

Este era el escenario al que me enfrentaba en mi PC


Lo primero es claramente identificar la red a compartir, en mi caso no era la Wifi directamente si no el Virtual Switch que tiene el nombre de mi conexión de red en casa (Yadira). Debes dar click derecho y entrar a las propiedades, y allí ingresar a la pestaña de compartir.

En mi caso debía seleccionar tambien el Virtual Switch de mi Ethernet y no la Ethernet directamente, que de hecho ni aparece. Después de eso la red aparece como compartida, tu internet debe seguir funcionando normalmente.


Ahora viene la parte que en realidad cuesta un poco poner a punto, pero que es necesario memorizar debido a que cada vez que desconectemos nuestras redes todo volverá a sus valores por defecto.

Después decodificar las recomendaciones en los foros estos fueron los pasos que realicé y únicos que me funcionaron, no desesperes, la red puede morir, enloquecer, vuelve al punto cero e inicia de nuevo, no pierdas la cabeza.

Ejecuta el comando IPCONFIG en la Consola de Comandos


Esto es importante pues necesitamos saber cual es el Gateway de nuestra Wifi. Ahora buscamos el Virtual Switch al cual le compartimos la Wifi e ingresamos a sus propiedades

Dentro de las propiedades editamos la configuración de IPv4


Allí configuramos una IP para nuestra subred, y configuramos el Gateway de la Wifi manualmente.


Ahora como vimos antes, entramos a nuestra configuración de red del Netduino y configuramos la IP teniendo en cuenta que el Gateway en este caso será la IP estática que asignamos a nuestro adaptador de red Ethernet en el paso anterior.

En este punto si quieres validar que todo va bien, presiona el botón de la board para resetear el Netduino y entonces deberás ver como muestra la IP que tiene asignada al iniciarse.


Como último paso de verificación, haz un ping a las IP estáticas que configuraste y si todo va bien, ambas responderán correctamente.



Para terminar de validar que nuestro Netduino tiene salida a internet debemos hacer un proyecto y probarlo, pero eso será en el siguiente post.


Fuente de la imagen de la cabecera: https://ciscoccvp.wordpress.com/2009/06/02/t1-crossover-cable/

jueves, 14 de enero de 2016

.NET Micro Framework

.NET Micro Framework es una plataforma de código abierto que permite escribir aplicaciones de código administrado C# utilizando Visual Studio para dispositivos embebidos. El proyecto es liderado por Microsoft Open Source Technologies. Su comunidad y código puede ser encontrada en Github http://netmf.github.io/


Para empezar con nuestro Netduino o cualquier otro dispositivo que soporte .NET Micro Framework debemos descargarlo e instalarlo. Su última versión estable a la fecha es SDK v4.3 (QFE2-RTM). La instalación queda en la ruta C:\Program Files (x86)\Microsoft .NET Micro Framework si no la hemos cambiado y allí podemos ver el soporte que tiene a las versiones anteriores.

La herramienta más importante del .NET Micro Framework es el Deployment Tool el cual nos permite realizar varias acciones en nuestro dispositivo, que iremos viendo en este post.
Para detectar nuestro Netduino, debemos seleccionar USB en la zona de Device y aparecerá nuestro dispositivo conectado. La primera que deberíamos probar es Device Capabilites que nos mostrará que versión de Firmware tiene nuestra board. La podemos encontrar en el menú Target:


Podremos ver entonces una información similar a la siguiente imagen: 


El botón Ping nos mostrará si nuestro Netduino está respondiendo correctamente, con lo que debieramos recibir una respuesta similar a esta de la imagen o minimo "Pinging TinyCLR"


Otra de las opciones que más usaremos es la configuración de red que tambien puede encontrarse en el menú Target.


En ella podremos configurar nuestra MAC Address y tambien la IP de nuestra red, un proceso que veremos en detalle en otro post.


Esta herramienta tiene muchas más opciones, las iremos descubriendo de forma contextual y según en uso que le demos en los siguientes post.

El anuncio oficina con más detalles se encuentra en Channel 9.


Para terminar, te recomiendo instalar el .NET Micro Framework Toolbox, ya que más adelante lo estaremos usando para los labs de este blog.

miércoles, 6 de enero de 2016

Conociendo Netduino

Como saben quienes me conocen, mi lenguaje de programación es C# razón por la cual para incursionar en el Internet de las cosas mi alternativa obvia era busca un dispositivo que lo soportara, y que afortunadamente existe. Mi elección fue Netduino. En este microcontrolador podemos programar con C# usando .NET Microframework, del cual hablaremos más adelante, por ahora conozcamos Netduino y sus diferentes opciones.

Netduino 1 y 2:
Netduino Plus 1 y 2: 

Netduino GO

Cada una de estas opciones difiere en sus diferentes capacidades. El Netduino 1 y 2 no tienen conexión a red a diferencia del el Netduino Plus 1 y 2. El Netduino GO permite conectar módulos extra y tampoco cuenta con conexión a red.

Como pueden ver en la última fotografía, el cable de conexión al PC es un cable Micro USB, los típicos que usamos para conectar nuestros celulares, a diferencia del Arduino que se conecta con un cable para impresora.

La comparación entre todos ellos más detallada la puedes encontrar directamente en el Wiki de Netduino.


Una de las más bonitas y grandes ventajas de las comunidades Open Source de Hardware y Software es como todos se ayudan unos a otros y Netduino no es la excepción. La fuente oficial de todos los recursos son los foros y el wiki donde todos los pertenecientes a la comunidad nos dirigimos a compartir o encontrar soluciones a los problemas y a realizar las descargas oficiales de recursos.

Aunque en los foros, wiki y montones de blogs y libros se encuentra muchos recursos mi intención con el blog es contarles y ponerles de forma concreta y corta algunas de las instrucciones para las aventuras típicas y que la verdad cuesta un poco de dificultad encontrar en tantos recursos dispersos.

El Netduino que usare para mis demos es el Netduino Plus 2. Las especificaciones oficiales están en el sitio de Netduino


A continuación les comparto un esquema que me gusto mucho para empezar a conocer el Netduino aquellos que no somos tan cercanos a los temas de la electrónica.


La idea es que vamos paso a paso, sobre todo por que mi blog está enfocado más a devs que a electrónicos y más a entender como podemos darle sentido y generar ecosistemas de soluciones que involucren Apps, Cloud e IoT, que al reto de describir el proceso de crear robots elaborados o cubrir temas de electrónica. 

Lo que haré será de hecho irles referenciando los recursos que yo misma voy usando para recordar todos esos temas, que hace más de 10 años ni tocaba pero que me tienen feliz aprendiendo.

Para empezar les recomiendo un par de libros en inglés Getting Started with Netduino y Getting Started with the Internet of Things. Y si prefieres leer en Español, el señor Carlos Navarro tiene su libro sobre Netduino 2

Instalación de herramientas
Luego de comprar el software habrá que instalar todo lo necesario. Recuerda que si tienes versiones del .NET Microframework o el SDK de Netduino instaladas ya, lo mejor es desinstalarlas.


Compatibilidad con Arduino
Muchos de los componentes tradicionales del Arduino pueden usarse para empezar, otros más complejos necesitan que existan los drivers correctos y a veces sencillamente no están o no hay compatibilidad. La comunidad si bien es grande es mucho más pequeña que la de Arduino, sin embargo con Netduino y otras boards que soportan .NET Micro Framework es seguro que seguirá creciendo.

:) Con esto estamos listos para empezar. En el siguiente post veremos como actualizar el Firmware de nuestro Netduino para comenzar con todas las de la ley.