Demostración de conexión 11 Netduinos al servicio de Windows Azure


Mike Linen nos enseña en una charla que incluye un laboratorio de construcción de un sistema de automatización de seguridad  domestico  usando nada más y nada menos  que 11 Netduinos 2+  que se    comunican a través de MQTT con la nube  en  Windows Azure.

Este proyecto fue creado para mostrar algunas de las cosas divertidas que se pueden hacer para empezar en el IoT  ( Internet de las Cosas) , pero nunca fue pensado para ser un sistema de Seguridad  para el Hogar de trabajo real, por lo que aconsejan no tratar de usarlo para esto, al menos que usted realmente piense de abordar algunos de los problemas de seguridad de Internet que necesitan ser abordados con un proyecto como este.

Cada dispositivo que se conecta al eje central del sistema llevará a cabo una función específica en la plataforma de seguridad. En un sistema de seguridad real no tendría dispositivos de misión crítica que dependan de la conectividad externa a la nube.La conectividad a un sistema externo de este tipo podría ser fácilmente interrumpida. Una vez más esto es sólo un ejemplo de la diversión para hacerle pensar sobre cómo conectar muchos dispositivos a un servicio en la nube.

Los asistentes a esta charla disfrutaron viendo la demo del laboratorio donde se mostraba como construir diversos componentes de un sistema de seguridad.

Ahora  podemos ver  todo el sistema funcionando  en un vídeo que muestra los diversos componentes del sistema.

 

El hardware utilizado para este proyecto es la Netduino Plus 2 de Secret Labs de LLC .Todos los ejemplos de código que ve en esta vista se centrará en el dispositivo Netduino Plus 2. Sin embargo, el protocolo para comunicarse con el servicio en la nube no es específica de la plataforma por lo que cualquier dispositivo puede ser utilizado para comunicarse con el servicio de Seguridad para el Hogar. Así que no dude en utilizar un dispositivo diferente .Net Framework Micro. Incluso se puede utilizar uno de los dispositivos de Arduino muy populares.

Por supuesto, la parte de servicios cloud de este proyecto se está ejecutando en laplataforma Windows Azure . Hay tantas opciones disponibles para usted con la plataforma Azure. Decidí usar un pequeño subconjunto de las funciones disponibles sólo para demostrar que no se necesita mucho para conseguir algo que hacer en la plataforma Azure.

Este proyecto trata pues de la construcción de los dispositivos que completan el sistema de Seguridad para el Hogar. Algunos código básicos ya están  escrito para usted, pero en su mayor parte, será su trabajo completar el código y hacer  el dispositivo funcional. El servicio en la nube que conecta los dispositivos  ya se ha completado y enviado a Windows Azure para su uso, así que usted no tiene que hacer nada de eso codificación.

Sin embargo, el código para el servicio en la nube está disponible en control de código fuente para que usted mire como esta construido.

  • Documentación – Aquí es donde usted pasará la mayor parte de su tiempo, ya que contiene toda la documentación para completar los ejercicios de laboratorio.
  • Prepararse para la Reunión – Toda la información que necesita para que venga preparado para el evento.
  • Azure Código fuente Repositorio – Toda la fuente de los componentes azules del sistema de seguridad.
  • Netduino Código fuente Repositorio – Toda la fuente de los componentes Netduino del sistema de seguridad
  • Dashboard – Este es el cuadro de mandos de la seguridad casera, donde se puede ver el estado de un dispositivo e interactuar con él
  • Deslice la cubierta – Las diapositivas de la presentación

Se han utilizado  durante la construcción  al menos de uno de los siguientes dispositivos en el sistema de seguridad para el hogar:

  • Puerta de entrada externa – Este dispositivo se encarga de todas las E / S para cualquier puerta externa
  • La puerta Bell – Este dispositivo se encarga de la E / S para permitir que el usuario sepa un timbre de la puerta fue empujada
  • Alarma – Este dispositivo se encarga de la E / S para permitir que el usuario qué se ha disparado la alarma
  • Panel de control de alarma – Este dispositivo se encarga de la E / S para los paneles de control colocados en cada habitación de la casa
  • Panel de Control Maestro – Esto no es realmente un dispositivo (pero podría ser) y que ya está construido para usted. Lo estoy llamando aquí porque sin ella todo el sistema sería un montón de dispositivos que son independientes entre sí, sin control central verdadera gestión de toda la lógica del sistema de seguridad.

Determine cuál de los dispositivos que desee para tratar de construir. Algunos de los dispositivos son más difíciles de completar que otros. Si quiere empezar fácil, entonces usted puede hacer que el dispositivo timbre. Si quiere un reto tan duro y luego seguir adelante y probar el panel de control de alarma.

Habrá un poco de código que ya está escrito por usted para que usted no tiene que preocuparse de los protocolos de comunicación necesarios para publicar y suscribirse a la MQTT bus de mensajes. Dado que el protocolo se abstrae lejos de todo lo que necesitas saber es que los mensajes MQTT son básicamente de dos partes: un tema y un mensaje. Hay mucho más a la norma MQTT que se puede leer por su cuenta pero no lo necesitará para este proyecto. Básicamente, los temas son una serie de palabras separadas por un separador / tema. El mensaje es simplemente cualquier cadena. Se espera que los dispositivos del bus de entender los temas y formatos de mensaje, pero al igual que todos los pub / sub diseña los dispositivos no saben

 

Lo que se está ejecutando en la nube

Hay dos componentes principales que ya existen en Azure que los dispositivos interacción con: MQTT Message Broker y panel de control principal. El intermediario de mensajes se ejecuta bajo un rol Azure Trabajador. El panel de control principal se ejecuta en Windows Azure Papel Web. El corredor simplemente rutas MQTT mensajes y no tiene lógica empresarial específica de seguridad verdadero hogar en él. El Panel de control Master gestiona el estado del sistema de seguridad, así como las reglas de negocio alrededor de cómo funciona el sistema de seguridad en su conjunto. SignalR se utiliza para actualizar los navegadores cliente cuando el estado del sistema de seguridad cambia. Eche un vistazo al panel de control principal para más detalles sobre cómo funciona.

 

Como se puede ver es  bastante impresionante.  El código  fuente para el proyecto el autor lo ha puesto disponible  en GitHub :

El sitio web del Sistema de Seguridad se encuentra alojado en un Papel Web y contiene toda la documentación para el laboratorio.

Fuente aqui

.NET Micro Framework – Usando display alfanumericos LCDs


.NET Micro Framework incluye capacidades gráficas de alcance con las bibliotecas WPF  para algunas tarjetas de desarrollo de alta gama bastante ( Tahoe II , ChipworkX o FEZ Cobra por nombrar algunos)donde se  incluyen gráficos de lujo pantallas TFT, a menudo con soporte a  entrada táctil  también . Pero esto tiene  significativamente mayores costos, y requiere una CPU rápida. Por lo tanto, podría parecer que si está utilizando un tablero mucho más barato como Netduino o uno de la familia FEZ, que éstos están condenados a depender sólo parpadear LEDs. No tanto pues en la mayoría de los escenarios  un display LCD alfanumérico podría ser una alternativa barata (o si tiene mayor presupuesto  usted también podría considerar el uso de una pantalla OLED que también trabaja con Netduino ).

alt Para un proyecto más amplio de este post  vamos a  utilizar un LCD alfanumérico para mostrar todo tipo de información de estado. Prácticamente todos los LCDs populares son controlados por un chipset HD44780 compatible con  interfaz paralela. Hay gran variedad de estas pantallas disponibles en varias combinaciones de luz de fondo y el color del texto. El tamaño común es 16×2 caracteres (16 columnas en 2 filas). Eche un vistazo a la amplia selección de pantallas LCD disponible en Sparkfun

Cuando usted compra un  LCD observe  bien si  ese alimenta a 5V o 3V3 versión. Estoy seguro de que ambos funcionan bien con Netduino (que utiliza la lógica 3V3), pero asegúrese de conectarlos para corregir pin fuente de alimentación.

Estas pantallas LCD son bastante fáciles de conectar  y programar. Si nos fijamos en la imagen de arriba notar la cabecera 16pin en la parte superior de la pantalla. El chipset HD44780 utiliza la interfaz paralela para la comunicación de datos y soporta los modos de 8 bits y 4 bits. En el primer caso se utilizará al menos 10 pines de salida digitales del microcontrolador, en el más tarde al menos 6. El pasador de R / W (escritura y lectura) de bits se puede conectar permanentemente a tierra. Puede encontrar las instrucciones de cableado en los ejemplos para la biblioteca Arduino cristal líquido – que funcionará de la misma manera en la Netduino. Para evitar la soldadura también se puede tratar de utilizar el Teclado LCD Escudo DFRobot para Arduino , del Sr. Kogoro Kotobuki ( kotobuki ), es el diseño de un escudo LCD similar que parece funcionar muy bien con Netduino .

Sin embargo, si tomamos el enfoque directo, la pantalla LCD utilice al menos seis de los pines digitales disponibles. Si utiliza un microcontrolador que expone un número masivo de puertos IO (como FEZ Rhino o próxima FEZ Panda ) esto podría estar bien, pero en caso de Netduino o tableros similares que tiene sólo un puñado de los pines digitales esto puede ser no apto. En este caso es posible que desee para multiplexar la salida de más de un menor número de líneas. En mi anterior post ya os hablamos sobre el uso de registros de desplazamiento para evitar tal situación y en este caso se puede reducir el número de salidas a sólo tres.

Otra alternativa podría ser la de comprar un LCD Habilitado Serial . Por lo general, incluyen pensión hija tan especial en la parte posterior (de ahí llamado «mochila») que tiene una MCU responsable de traducir la comunicación UART a la interfaz de la pantalla LCD. Así que si puedes sacrificar uno de los puertos UART en el Netduino esta podría ser una buena opción, pero por lo general cuesta alrededor de $ más que los LCD regulares 10. También podrás comprar la mochila serie solo, por ejemplo el de Sparkfun o el Kit LCD Serial LCD117 de dispositivos modernos .

Para este proyecto  se va a utilizar el mismo registro 74HC595 tal y como Pavel Bansky demostró cómo hacer esto en dispositivos .NET Micro Framework. En su primer post que muestra cómo conectar LCD con 3 cables usando el registro de desplazamiento 4094, y luego en el segundo puesto , añadió soporte para un I 2 C de 8 bits de ampliación de puertos. He modificado y ampliado su biblioteca para incluir funcionalidad disponible en la biblioteca de Arduino LiquidCrystal .

Pavel introdujo una abstracción agradable en su aplicación para separar las funciones de alto nivel LCD de interfaz de transporte subyacente en clases separadas. Así, el constructor de la clase de nivel superior LiquidCrystal, debe proporcionar una instancia de una clase que implementa la interfaz ILiquidCrystalTransferProvider. Esto permite utilizar esta biblioteca con todos los métodos de comunicación descritas anteriormente. En el código fuente ya se encuentra un GpioLiquidCrystalTransferProvider y Shifter74Hc595LiquidCrystalTransferProvider para el registro 74HC595 turno. Más tarde me voy a añadir soporte para el I 2 C de expansión del puerto. Me dieron una bonita mochila LCD de JeeLabs tienda que utiliza el chip MCP23008 pero no sé aún de lo diferente que es de PCF8574P de Pavel. En preparación para este código de manejo de algunas poco comunes ya que se abstrae de la clase BaseShifterLiquidCrystalTransferProvicer.

Aquí se puede ver el cableado he utilizado:

Wiring 16x2 LCD to Netduino via shift register

Observe que porque esta vez voy a usar interfaz SPI los datos en serie está conectado al pin 11 (MOSI) y reloj pin se conecta al pin 13 (SPCK). Pin 10 se conecta a la clavija del pasador, y en el código que se pasa como Slave Select pin al objeto SPIConfiguration. Ya que vamos a utilizar siete salidas desde el registro de desplazamiento la producción restante se conecta a través 2N2222A transistor para controlar la luz de fondo del LCD. Esto nos permite encender la luz de dentro o fuera del código. Finalmente, el potenciómetro de 10K se utiliza para controlar el contraste de la pantalla.

_MG_1274 Foto de la derecha muestra la placa  para el LCD  Tenga en cuenta que debido a que la junta se monta «al revés» las salidas del registro de desplazamiento a LCD se invierten, pero es fácil corregirlo en el código (Shifter74Hc595LiquidCrystalTransferProvider constructor tiene la opción BitOrder opcional).

A continuación puede encontrar una lista de los métodos expuestos por la clase LiquidCrystal:

  • Comience (columnas, líneas) – Utilice este método para inicializar el LCD. Especifica las dimensiones (anchura y altura) de la pantalla.
  • Borrar () – Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda.
  • Inicio () – Posiciones el cursor en la parte superior izquierda de la pantalla LCD.
  • SetCursorPosition (columna, fila) – Colocar el cursor del LCD; es decir, establecer la ubicación en la que se mostrará el texto escrito posterior a la pantalla LCD.
  • ScrollDisplayLeft () – Desplaza el contenido de la pantalla (texto y cursor) un espacio a la izquierda.
  • ScrollDisplayRight () – Desplaza el contenido de la pantalla (texto y cursor) un espacio a la derecha.
  • Write (texto) – Escribe un texto a la pantalla LCD.
  • Escribe (buffer, offset, count) – Escribe un número especificado de bytes a la pantalla mediante los datos de una memoria intermedia.
  • WriteByte (datos) – Envía un byte de datos a la pantalla.
  • CreateChar (ubicación, charmap)

Y sus propiedades:

  • Luz de fondo – Enciende la luz de fondo del LCD encendido o apagado.
  • BlinkCursor – mostrar u ocultar el cursor de bloque parpadeante en la posición a la que se escribirá el siguiente carácter.
  • ShowCursor – Mostrar u ocultar el cursor del LCD: un guión bajo (línea) en la posición a la que se escribirá el siguiente carácter.
  • Visible – Activa la pantalla LCD encendida o apagada. Esto restaurará el texto (y cursor) que estaba en la pantalla.
  • Codificación – Obtener o establecer la codificación utilizada para asignar la cadena en códigos de bytes que se envían LCD. UTF8 se utiliza por defecto.

 

Y aquí el código de ejemplo de  “hello world” con un lcd:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static void Main()
{
    // create the transfer provider
    var lcdProvider = new Shifter74Hc595LiquidCrystalTransferProvider(<span class="skimlinks-unlinked">SPI_Devices.SPI1</span>,
        <span class="skimlinks-unlinked">SecretLabs.NETMF.Hardware.Netduino.Pins.GPIO_PIN_D10</span>);
    // create the LCD interface
    var lcd = new LiquidCrystal(lcdProvider);
    // set up the LCD's number of columns and rows:
    <span class="skimlinks-unlinked">lcd.Begin(16</span>, 2);
    // Print a message to the LCD.
    <span class="skimlinks-unlinked">lcd.Write("hello</span>ld!");
    while (true)
    {
        // set the cursor to column 0, line 1
        lcd.SetCursorPosition(0, 1);
        // print the number of seconds since reset:
        <span class="skimlinks-unlinked">lcd.Write((Utility.GetMachineTime().Ticks</span> / 10000).ToString());
        <span class="skimlinks-unlinked">Thread.Sleep(100</span>);
    }
}

Fuente aqui