Servidor para Netduino+


NeonMika.Webserver es un servidor web preconfigurado  para Netduino+  yNetduino 2+   fácil de extender de modo que con un código mínimo (o incluso nulo), puede obtener excelentes resultados controlando todos  los puertos de  su Netduino +, accediendo y cargando archivos, creando servicios web ¡y algunas cosas  más!

El código  fuente esta disponible aun en codeplex en  :https://neonmikawebserver.codeplex.com/documentation  aunque hay  una version para Netduino 3+ en  Github .  A pesar de que el foro  de Netduino se ha mudado al sitio widernesslab.co  se mantiene  información  de NeonMika.Webserver  en el antiguo  foro de Netduino ( http://forums.netduino.com/index.php?/topic/2889-neonmikawebserver/)  asi que tiene más preguntas o desea  mas explicaciones  sobre el código le recomiendo que se dirija a ese sitio.

Si usa el esquema de la cafetera conectada  del que hablábamos  en un post anterior     únicamente puede   usar el pin digital  D2  como salida  y al que  conectaremos  una economica placa de un relé   compatible  con Arduino (5V)

 

Como se puede apreciar en el esquema del circuito , este no puede ser mas simple pues solo hay que alimentar el circuito del rele con la tensión  de 5V procedente de la placa Netduino, conectar el pin de datos  D2 a la entrada IN de la placa del  relé  y finalmente conectar la carga ( en este caso un cafetera)  a los contactos de salida del relé

 

Gracias  a neomikaserver podremos controlar fácilmente la cafetera   de una manera muy facil  y rapida pero ademas este servidor destaca por la siguientes  funcionalidades:

  • Acceso a la tarjeta microSD
  • Control de todos  lso puertos GPIO
  • Lectura de todos los puertos GPIO
  • Control   de  su Netduino+  usando métodos existentes como setPWM o setDigitalPinState
  • Permite agregar sus propios métodos similares al servicio web para que pueda expandir NeonMika.Webserver a sus propias necesidades para cada proyecto.

Hay dos directorios de interés para usted:

  • Framework :contiene el código de la biblioteca para un nuevo proyecto usando NeonMika.Webserver. Consulte esta carpeta si desea agregar NeonMika.Webserver a un proyecto existente.
  • Executeable:  contiene un pequeño proyecto creado usando NeonMika.Webserver. Consulte este si desea obtener una primera experiencia con el servidor. ¡Puede ejecutarlo sin escribir ninguna línea de código!

Para probar NeonMika.Webserver y tener algún código de muestra, simplemente siga estos pasos:

  • Simplemente descargue el código y vaya a «Executeables».
  • Implemente el proyecto en su Netduino Plus. Debería comenzar a funcionar.
  • Este proyecto de ejemplo que utiliza NeonMika.Webserver tiene el siguiente método xml agregado al servidor web en tiempo de ejecución: netduinoplus / wave … Conecte los LEDs al Pin 0,1,4,5,8,9 y verá que su LED se enciende uno después el otro.

 

Setup

Como puede ver, solo necesita llamar al constructor para iniciar NeonMika.Webserver.

Server WebServer = new Server(PinManagement.OnboardLED, 80, false, "192.168.0.200", "255.255.255.0", "192.168.0.1", "NETDUINOPLUS");

Los parámetros necesarios son  autoexplicativos:

  • El puerto 
  • DHCP encendido / apagado
  • Dirección IP
  • Máscara de subred
  • Gateway
  • Nombre de red

¡No necesita nada más para ejecutarlo!

Métodos sopurtados?

Aquí hay una lista con todos los métodos web precodificados que puede usar en su navegador o en cualquier otra aplicación para comunicarse con su Netduino:

  • echo (devuelve el valor enviado) ,    ejemplo   netduinoplus / echo? value = [a-Z] , por ejemplo http://192.168.0.2/echo?value=markus devolveria «markus»
  • switchDigitalPin (Cambia el pin seleccionado de verdadero a falso y vis-a-vis) ,ejemplo : -> netduinoplus / switchDigitalPin? pin = [0-13]  es decir  por ejemplo para encender la cafetera seria http://192.168.0.2/setDigitalPin?pin=2&state=true y para apagarla http://192.168.0.2/setDigitalPin?pin=2&state=flase
  • setDigitalPin (Establece el pin digital seleccionado al estado seleccionado), ejemplo -> netduinoplus / setDigitalPin? pin = [0-13] & estado = [verdadero | falso]
  • pwm (establece el PWM del pin para el período y duración enviados, ejemplo -> netduinoplus / pwm? pin = [5 | 6 | 9 | 10] & period = [int] & duration = [int]
  • getAnalogPinValue (Devuelve el valor del pin analógico seleccionado),ejemplo-> netduinoplus / getAnalogPinValue? pin = [0-5]
  • getDigitalPinState (Devuelve el estado de su pin seleccionado (on / off)),ejemplo -> netduinoplus / getDigitalPinState? pin = [0-13]
  • getAllAnalogPinValues ​​(Devuelve el valor de cada pin analógico), ejemplo-> netduinoplus / getAllAnalogPinValues
  • getDigitalPinState (Devuelve el estado de cada pin digital).ejemplo-> netduinoplus / getAllDigitalPinStates
  • getAllPWMValues ​​(Devuelve los valores para todos los puertos PWM), ejemplo-> netduinoplus / getAllPWMValues
  • fileUpload (Carga un archivo en la ruta de la tarjeta SD mediante POST. Debe escribir los datos de archivo (bytes) en el cuerpo POST),ejemplo  -> netduinoplus / upload? path = [a-Z]
  • Respuesta de archivo y directorio: Simplemente escriba netduinoplus / [pathtomyfile] y podrá ver / descargar su archivo. Si la ruta dada es un directorio, se devolverá una vista de directorio

 

Más para fines de prueba, pero también como parte de NeonMika.Webserver:

  • xmlResponselist (le da una lista de todos los métodos XML) , ejemplo -> netduinoplus / xmlResponselist
  • jsonResponselist (Te da una lista de todos los métodos JSON),ejemplo -> netduinoplus / jsonResponselist
  • multipleXML (Ejemplo sobre cómo usar XML anidado), ejemplo -> netduinoplus / multixml

Algunos  ejemplos de uso

Como expandirlo con servicios XML

WebServer.AddResponse(new XMLResponse("wave", new XMLResponseMethod(WebserverXMLMethods.Wave)));

No se ve tan complicado? Eso porque no es complicado.

Este es un ejemplo de cómo escribir un XMLResponse

private void Echo(Request e,Hashtable results)
{
  if(e.Request.GetArguments.Contains("value") == true)
    results.Add("Echo",e.Request.GetArguments["value"]);
  else
    results.Add("ERROR", "No 'value'-parameter transmitted toserver");
}

Todas las XMLResponses deben tener este formato:

  • Valor de retorno:vacío
  • Parámetro: Solicitud (con esto puede acceder al parámetro escrito en la URL)
    Hashtable (aquí usted agrega la respuesta)
  • Si necesita XML apilado, eche un vistazo al método MultiXML en Server.cs

 

Cómo escribir una respuesta JSON:

 

private void ResponseListJSON(Request e, JsonArray j)
{
   JsonObject o;
   foreach(Object k in _Responses.Keys)
   {
     o = newJsonObject();
     o.Add("methodURL", k);
     o.Add("methodName", ((Response)_Responses[k]).Name);
     j.Add(o);
   }
}

Server setup:

Server WebServer = new Server(PinManagement.OnboardLED,80,false,"192.168.0.200","255.255.255.0","192.168.0.2","NETDUINOPLUS"); 
WebServer.AddResponse(newXMLResponse("echo", new XMLResponseMethod(Echo))); 
WebServer.AddResponse(newJSONResponse("jsonResponselist", new JSONResponseMethod(ResponseListJSON)));

 

Cómo acceder a los últimos datos POST:

PostFileReader post = new PostFileReader ();

byte [] postData = post.Read (bufferSize);

 

Mostrar el directorio de archivos:

http://192.168.0.2/SD

 

Archivo de acceso:

http://192.168.0.2/SD/folder/file.txt

 

 

 

Pushing usando Parse desde Netduino a Xamarin.Forms


Parse es un proveedor BaaS (Backend as a service) que, entre su conjunto de características, ofrece un servicio de notificaciones Push . Se usa  ese servicio para enviar las notificaciones push a nuestros  dispositivos. Es bastante sencillo comenzar, en primer lugar, crear una nueva aplicación, tomar las claves (para ambas REST API y .NET), escribir  un código y empezaré a enviar pushes.

Configurando el Netduino

Se puede utilizar  un simple interruptor de contacto magnético(es decir un rele reed)  para detectar cuándo la puerta se abrió o se cerró, en el código se verá algo así como var doorPort = new InputPort(... y un bucle infinito en el que reside la lógica «principal»). while el netduino lee el estado actual del sensor, lo compara con un estado previo y, si hay algún cambio, envía la notificación de inserción utilizando mi biblioteca parse-dotnetmf .

La biblioteca parse-dotnetmf

Para consumir las funciones REST Api de Parse de un Netduino 3, se puede í crear una biblioteca de clientes para facilitar las cosas , esta biblioteca actualmente solo admite el envío de notificaciones push o Parse, pero puede ampliarse fácilmente para admitir todas las demás funciones también , es fácil de usar simplemente cree un cliente var pc = new ParseClient("AppId", "Api Key"); y luego envíe una notificación push así: pc.SendPushToChannel("Hey!"); .

Esta biblioteca está muy inspirada en la biblioteca MicroTweet2 de Matt Isenhower. Utiliza la clase HttpWebRequest , no requiere dependencias adicionales y cabe fácilmente en un tablero de Wi-Fi Netduino 3.

Configuración de la aplicación Xamarin.Forms

Hay algunos pasos que debe seguir para implementar Parse Push en su aplicación Xamarin, le recomiendo que siga los tutoriales que ya existen en el sitio web de Parse. Voy a hacer un resumen rápido de lo que hice (además de tratar de crear mi propio complemento).

En primer lugar, para Windows Phone no hay pasos obligatorios que no sean seguir este tutorial , por otro lado, para Android tendrás que hacer dos cosas:
1. Marque este tutorial pero haga solo la parte de AndroidManifest.xml .
2. Compruebe la muestra en GitHub , en particular la implementación de la clase ParseApplication en el proyecto de Android.

El complemento CrossParse

Como sabemos, cuando queremos ofrecer experiencias específicas de la plataforma desde una aplicación Xamarin.Forms podemos usar o crear un complemento que nos permita resumir las funcionalidades de cada plataforma para interactuar con cada plataforma a través de una API común.

Tratar de hacer un complemento para manejar todas las interacciones con Parse push o resulta que no es tan fácil como se puede pensar al principio, pues  los Componentes Xamarin de Parse para cada plataforma ya son compatibles con las notificaciones push, pero no existe una capa de abstracción que pueda usarse con formularios, sin mencionar que hay algunos pasos especiales necesarios para cada plataforma que debe gestionar explícitamente en cada proyecto específico de plataforma como por ejemplo crear la clase ParseApplication extra en el proyecto de Android, por ejemplo).

Por lo tanto, este complemento no es tan útil o, pero aún ayuda proporcionando la capa de abstracción mencionada e instalando los nugets de Parse por ti. Con este complemento, puede suscribirse / darse de baja de los canales y gestionar las notificaciones mientras el usuario se encuentra en la aplicación. Realmente esperemos que Parse lance un complemento para formularios pronto, ya que es bastante fácil de hacer dado que ya tienen los componentes.

El autor ha realizado un video donde mostra cómo funciona el sistema:

Enlaces

No pretendemos desde este blog  crear una publicación llena de enlaces, así que aquí están los enlaces a los complementos GitHub repos (y su respectiva página NuGet):