Servidor para Netduino+

Veremos un estupendo servidor que corre en nuestro Netduino plus y Netduino 2+ que podemos usar para controlar o leer todos los puertos o para accceder al contenido de la SD ,


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

SI VA a crear un sistema que envíe una notificación a mi teléfono cada vez que alguien abra la puerta aquí está y se llama Doorduino


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):

Alarma casera usando Raspberry Pi, Netduino Plus y ATtiny85

Interesante proyecto de mejora de una alarma convencional usando una placa Netduino y otra Raspberry pi


En el post de vamos a tratar un interesante sistema de monitoreo de alarma para el hogar de código abierto ,que como peculiaridad  usa tres plataformas  completamente diferentes   como son una  Raspbery Pi , Netduino Plus , ATtiny 85   para mejorar  un típico sistema de alarma para el hogar  basada en  los controles  PC5010 Digital Security Controls (DSC) PowerSeries Security System control panel   y sensores.

Concretando un poco el hardware empleado el creador  ha usado un Netduino Plus 1 ejecutando  .NET Micro Framework 4.2 (o QFE1 qfe2) y una  Raspbery Pi Modelo A con Debian GNU / Linux 7.0 (wheezy).

El autor  Gilberto Garcia  empezó el  proyecto  HomeAlarmPlus en febrero de 2012 con la intención de tener un simple sistema de monitorización de alarma para el hogar  y aprender más acerca de los microcontroladores usando como base una placa Netduino. A medida que fue mejorando sus  conocimientos, también lo hizo la complejidad de los circuitos, el sistema y los requisitos.Entonces apareció la idea de usar  una placa  Raspbery Pi para complementar el proyecto existente mediante el uso de la capacidad total del servidor Web Apache. Esto implicó cambios masivos en el código  del  proyecto original  como lo refleja  incluso el nombre final: HomeAlarmPlusPi.

El Objetivo por tanto del proyecto fue utilizar las capacidades completas de Raspbery Pi y Netduino Plus para controlar el sistema de alarma de una casa y reportar cualquier actividad de sensor o detector de movimiento a través de correo electrónico (mediante simple de transferencia de correo (SMTP)), un servidor web local, notificaciones (usando PushingBox ) y Pachube (despues  Cosm  y ahora xively) .

Dada la diversidad de plataformas empleadas , también lo fueron los  lenguajes de Programación  empleados para este proyecto, los cuales  fueron  los siguientes:

En Netduino Plus

  • C # para Netduino Plus
  • HTML para Web Server con hojas de estilo en cascada (CSS)
  • JavaScript para Web Server

En Raspbery Pi

  • HTML5
  • PHP
  • Java script
  • JSON
  • jQuery
  • El tiempo en API
  • Python (en desarrollo: uso de GPIO)

En ATtiny85

  • C / C ++ para programar el ATtiny85. Programado gracias a un escudo ArduinoISP, que construyo siguiendo las instrucciones  del  MIT High-Low Tech Group.
Arduino “programador en-sistema” (ISP) escudo ATtiny programador.

 

El hardware necesario

  • Raspbery Pi Modelo A o B
  • Netduino Plus
  • ATtiny85 (ATTINY85-20PU).
  • Tarjeta de memoria SD de 4 GB o superior (clase 10 preferido).
  • 5V 1A (1000mA) puerto USB fuente de alimentación .
  • Tarjeta Micro SD de 2 GB
  • Wi-Fi (802.11b / g / n) Módulo USB [1] , [2] o [3]
  • Adaptador de tarjetas SD
  • 3mm verde diodo emisor de luz (LED) por zona de alarma y detector de movimiento.
  • 330 ohmios para cada LED.
  • Transistor NPN
  • 10k ohmios resistencia variable
  • Resistencia de 1k ohmios para la base del transistor.
  • 5600 ohmios por resistencia de la zona de alarma y detector de movimiento.
  • Diodo Schottky por zona de alarma. Diodo Schottky debe tener baja caída de tensión como el SBR10U40CT .
  • ScrewShield (Proto-Screwshield (Wingshield) Kit de [1] o [2] ).
  • Conexión WiFi a Internet utilizando cualquier adaptador Wi-Fi. Probado en NetgearWNCE3001 y IOGEAR GWU627 .
  • 16×2 carácter básico LCD [1] u otros [2] .
  • Interruptor DPDT [1] u otros [2] para la selección de voltaje LCD.
  • Registro de desplazamiento 74HC595

Hardware opcional

 

  • Robusto, USB / Panel de conectores a prueba de agua ( RR-211300-30 )
  • Receptor RF Toggle Type para armar / desarmar [1] .
  • Cable USB 2.0, tipo A macho a un varón (10 pies o más arriba). Se utiliza para acceder alNetduino Plus tabla en el panel de alarma.
  • 200 vatios / 350 VA UPS ( APC Sistema UPS BE350G o similar ).
  • Pulsador de rearme externo.
  • Arduino Proto Escudo R3. Más espacio para componentes adicionales. [1] o de otros [2] ,[3] .
  • Bajo perfil adaptador de tarjetas microSD para Raspberry Pi [1] .
  • Caja  Raspbery Pi [1] u otros [2]
  • Interruptor de encendido en la línea de 2,1 mm jack barril [1] o [2] .
  • Raspbery Pi conjunto de disipador de calor [1] .
  • Ventilador de 12 V CC Micro se enfríe Raspbery Pi [1] .

 

Ajustes
Para HomeAlarmPlus y HomeAlarmPlus Pi el símbolo condicional ALARM_DEBUG permite depurar alarma en Visual Studio. Para habilitar la depuración en la correcta proyecto presione AlarmByZones, seleccione propiedades, seleccione la pestaña Build de Visual Studio y añadir ALARM_DEBUG en “símbolos de compilación condicional”.

configuración de depuración

Más capacidades de depuración se llevarán a cabo para Raspbery Pi y ATtiny85.

Circuitería
El  siguiente Fritzing diagrama muestra cómo se conectan el Netduino además, los LED y las zonas de alarma (o detector de movimiento). En comparación de la aplicación anterior ( HomeAlarmPlus ) se ha añadido un  ATtiny85 con el fin de reducir los hilos en el Netduino Plus 1. De esta manera se han salvado 2 KB de RAM y dando  más espacio de código.

HomeAlarmPlus Pi diagrama de conexión I. Rev

 

circuitos HomeAlarmPlus Pi
HomeAlarmPlus Pi detalles de circuitos

Tenga en cuenta que una o más zonas consisten en lo siguiente:
a) 1 normalmente abierto de contacto y 1 Contacto normalmente cerrado con resistencia de fin de línea (EOL).
b) Doble circuito EOL, 1 contacto normalmente cerrado con una resistencia EOL 5.6kohm y el diodoSchottky. Esto hará que la protección necesaria para el Netduino o Arduino.
c) Cada zona de tierra debe ser conectado a la ProtoScrewShield GND.

Netduino / ProtoScrewShield Pin
Descripción
A0 Zona # 1
A1 Zona # 2
A2 Zona # 3
A3 Zona # 4
A4 Sensor # 1 [detector de movimiento]
D0 XBee RX
D2 LED de zona # 1
D3 LED de zona # 2
D4 Zona LED # 3
D5 Zona LED # 4
D6 LED Sensor # 1 [detector de movimiento]
D7 RF pasador articulado (Receptor RF)
D8 ATtiny85 poder
D9 Alarma antirrobo o Mini zumbador
D10, D11 y D13 LCD registro de desplazamiento

Opciones de servidor Web en Netduino Plus

opciones
Descripción
/ página raíz formato de escritorio.
/open Abrir último archivo en la tarjeta SD.
/ sdcard Lista los archivos en la tarjeta SD.
/ Do superusuario. Muestra opciones adicionales.
/ Pachube Muestra la actividad Pachube por zona / Datastream.
/about créditos de la aplicación y la versión. [Versión desktop]
/ about-mobile créditos de la aplicación y la versión. [Versión móvil]
/ delete-confirm Eliminar último archivo en la tarjeta SD [ventana de confirmar].
/ delete-last Eliminar último archivo en la tarjeta SD [ninguna ventana de confirmación].
/ diag Muestra la memoria disponible en Netduino y fuerzas para despejar el recolector de basura. [Versión de escritorio]
/ diag-mobile Muestra la memoria disponible en Netduino y fuerzas para despejar el recolector de basura. [Versión móvil]
/date Obtiene fecha y hora de Raspbery Pi.
/mobile página raíz formato móvil.

 

HomeAlarmPlus [Versión de escritorio]
HomeAlarmPlus [Versión móvil]

Opciones de servidor Web en Raspbery Pi

opciones
Descripción
/ página raíz formato de escritorio.
/index.php página raíz formato de escritorio.
/weather.html los datos de tiempo en Wunderground. [Versión desktop]
/móvil página raíz formato móvil.
/mobile/index.php página raíz formato móvil.
/references.htm Proyecto enlaces de referencia.
/about créditos de la aplicación y la versión.
/NetduinoPlus/setNetduinoTimer.php Configuración / Actualización Netduino Plus hora / fecha.

 

servidor web HomeAlarmPlus Pi [Versión de escritorio]
HomeAlarmPlus Pi servidor web [Versión móvil]

 

HomeAlarmPlus Pi [pantalla móvil Apple]

Arquitectura de software

HomeAlarmPlus Arquitectura de Software Pi

 

Arquitectura de Software detallada

Producto final

Producto final mostrando el acceso móvil, Raspbery Pi, Netduino Plus 1, escudo personalizados para el panel de alarma Netduino y Home

En desarrollo

  • Interfaz web para dispositivos basados en tabletas. [Pruebas, no publicado]
  • Las cámaras con sensor de movimiento integrado y la visión nocturna. Cámara debe integrarse con Raspbery Pi GPIO.
  • Más capacidades de depuración de Raspbery Pi y ATtiny85.
  • Explora las opciones de notificación adicionales como IFTTT. [Hecho. Lanzamiento 17 de de julio de, 2013]

Referencias muy interesantes para profundizar:

Repositorio de código y documentación
HomeAlarmPlusPi

Advertencia
El proyecto  contiene información relacionada con un típico sistemas de alarma. Por favor, tenga en cuenta que este procedimiento puede anular la garantía. Cualquier sistema de alarma o cualquier tipo puede ser comprometido deliberadamente o puede fallar al operar como se espera por una variedad de razones.

El autor, Gilberto García, no se hace responsable de los fallos del sistema, tales como: instalación inadecuada, el conocimiento penal, el acceso de intrusos, fallo de alimentación, el fallo de las baterías reemplazables, el compromiso de la radiofrecuencia dispositivos (inalámbricos), los usuarios del sistema, detectores de humo, movimiento detectores, dispositivos de alarma (sirenas, campanas, cuernos), líneas telefónicas, tiempo insuficiente, fallo de un componente, pruebas insuficientes, de seguridad y de seguros (de propiedad o de seguros de vida).

Una última cosa:Desconecte la alimentación de c.a.  y de teléfono antes de hacer cualquier cosa.

Fuente aqui