domingo, 14 de febrero de 2016

Netduino Wifi 3

Quiero compartirles algo, después de mucha emoción con el Netduino Plus 2 y muchos días de jugar y aprender, me encontré con algo que no esperaba.

A diferencia de nuestro demo de Mobile Services, el service bus de Azure requiere SSL si o si y Netduino 2 Plus no lo soporta. Consumir o enviar data a Mobile Services, es cool, pero definitivamente el poder de IoT está en la mensajeria y para eso necesitaba Azure Service Bus.

Pues bien después de varios frustrantes días, ayer llegó la noticia nueva al fin para quienes nos gusta Netduino, y es la bienvenida a la familia, del Netduino 3 Wifi, con soporte por supuesto a SSL.

En la presentación oficial en el foro se han publicado algunas de sus características más destacadas:

  • Micro: STM32F427VI Rev 3
  • 2MB dual-bank flash (twice as much as NP2)
  • 256KB RAM including 64KB core-coupled RAM (33% more than NP2)
  • Wi-Fi: TI CC3100, 802.11b/g/n (2.4GHz)
  • Supports open networks, WEP and WPA2
  • Built-in support for the latest SSL security (including TLS 1.2)
  • Three GoBus 2.0 ports (for plug and play components)
  • Support for even more Arduino shields (with ICSP header pads)
  • New miniature shield-friendly pushbutton
  • Brand new power subsystem and power management.

Imaginé que su precio iba a ser muy alto pero en realidad está en el promedio. Para mi sorpresa la caracteristica que más esperaba, el poder configurar la wireless aparecia desactivada en el MS Deploy. Buscando actualizar el firmware al más reciente arruine completamente la board. Quedó permanentemente en Modo TinyBooter y no volvio a responder.

Después de un rato encontre en los foros de netduino la solución, re flashear la board manualmente. Aunque el proceso es más largo que una actualización normal y asusta un poco, funciona perfectamente.

Lo encuentran en esta URL
http://forums.netduino.com/index.php?/topic/11842-how-to-recover-non-responding-netduino-3/

Sin embargo aqui les dejo los pasos tomados desde los foros oficiales

To manually flash firmware using ST DFUSE tools, grab the latest copy of ST's DFUSE tools from the download link at the bottom of the following page:
http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916

To erase your board's firmware (do this first):
1. Detach your Netduino
2. Press and hold your Netduino's pushbutton while plugging it in via USB; this will put it in bootloader mode.
3. Erase the firmware on your Netduino using the STDFU Tester application
> a. Select the "Protocol" tab
> b. Press the "Create from Map" button
> c. Select the "Erase" radio button option
> d. Press the "Go" button
> e. Wait for erase process to complete

To create the DFU files which you will program onto your Netduino:
1. Run "DFU File Manager" (from the ST DFU tools)
2. Select "I want to GENERATE a DFU file" and press OK.
3. Click "S19 or HEX..." and then select one of the firmware files in Netduino Update's respective Firmware folder.
4. Click the "generate" button to generate a DFU file which contains the S19 (HEX) file you picked in step 3.
5. Click "delete selected image".
6. Repeat steps 3-5 for the other two firmware files.

Finally, flash each of the .DFU files using the ST DfuSe Demonstrator application (included with STDFU Tester).
1. Run "ST DfuSe Demonstrator"
2. Locate the "Upgrade or Verify Action" pane (bottom-right pane)
3. Press "Choose..." and select one of the generated DFU files
4. Check the "Verify after download" option
5. Press "Upgrade". It will take a few moments to update your Netduino.
6. Repeat steps 3-5 for the other two firmware files.

After you have flashed all the .DFU files, detach and reattach your Netduino (power cycle) or press "Leave DFU mode".


Fritzing: Graficando tus prototipos


Retomando los post del blog quise empezar por buscar una buena herramienta para subir los mapas o gráficos de los circuitos. En internet veia en muchas partes algunas gráficas geniales y he encontrado la herramienta con la que se hacen.

Su nombre es Fritzing y es un proyecto Open Source que pueden encontrar en sus página web y repositorios oficiales

http://fritzing.org
https://github.com/fritzing/fritzing-app

Genial proyecto como todo lo que involucra las comunidades open source alrededor de este tema. Los gráficos son vectoriales y manipularlo es realmente fácil. Eso además de que para quienes no somos expertos en electrónica tiene valiosas ayudas como mostrarte como fluyen tus conexiones en los circuitos.


Por supuesto nuestra board Netduino está disponible y cantidad de elementos. Lo mejor de todo es que al ser  Open Source es seguro que seguirá creciendo.



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.