Proyecto en c# para Raspberry pi


 

En efecto , aunque hemos hablado en muchísimas ocasiones de múltiples ejemplos en c# usando la plataforma Netduino  es poco frecuente ver aun ejemplos que usen la plataforma de desatollo de Microsoft de IoT  en otros entornos.

Precisamente  en el siguinte  ejemplo  de como implementar  una estación  meteorológica  en una Raspberry Pi , se demuestra cómo aprovechar la potencia de Windows 10 IO Core, y crear una estación meteorológica con  un escudo de Sparkfun(Sparkfun DEV-12081)  en una Raspberry pi que corre Windows 10 (puede ser la versión  2 o también la  3).

Este proyecto forma parte de la iniciativa de Microsoft llamada  Hack the Home , que proporciona componentes de código abierto para minimizar  el esfuerzo en la creación de  interfazes con los dispositivos y servicios a  usar para enfrentarse a sus hogares.

Antes de describir   como lo han hecho en el vídeo podemos ver  una introducción a la plataforma de windows IoT;

 

El nuevo espacio de nombres Windows.Devices de las API de Windows Plataforma universal (UWP) en Windows 10, permite a los desarrolladores aprovechar la potencia de Windows  en la interacción con el mundo real a través de sensores y actuadores utilizando el bus I2C y los puertos de uso general de entrada / salida (GPIO) disponibles en el Raspberry Pi 2, para crear una estación meteorológica conectada a Internet utilizando la protección contra la intemperie Sparkfun.

Las instrucciones proporcionadas darán un desarrollador de primera mano la configuración del hardware requerida junto con la escritura y depuración de Windows recientemente disponible en  windows 10 llamada UWP Windows.Devices API’s.

En este ejemplo,  también se demostrará cómo agregar sus datos en la nube utilizando el Azure Event Hub y  ConnectTheDots API.

Para  empezar , lo primero es conexionar   los  pines desde la Raspberry Pi 2 a la placa Sparkfun(Sparkfun DEV-12081)

Este es el conector de la Raspberry Pi 2:

GPIO esquemática (pata 1 está marcada con una almohadilla de soldadura cuadrada)

El diagrama de conexiones de  la Raspberry Pi  hacia la placa de Sparkfun   es el siguiente:

  •  GND (negro) —— GND
  • 5V (rojo) ——— VIN
  • 3V3 ——- (marrón) —— 5V (escudo truco; no es un error)
  • GPIO2 —– (amarillo) —- SDA
  • GPIO3 —- (naranja) —- SCL
  • GPIO5 —– (verde) —– D8
  • GPIO6 —– (azul) ——- D7

Cableado de cerca del carril exterior (negro, rojo)

 

Con la placa Weather Shield es muy fácil de hacer funcionar con Arduino  ofreciendo  de por sí la presión barométrica, humedad relativa, luminosidad y temperatura. También hay conexiones para sensores opcionales tales como la velocidad del viento, dirección, pluviómetro y GPS para la ubicación.

Utiliza el sensor de humedad HTU21D, de presión barométrica MPL3115A2, un sensor de luz ALS-PT19 y se basa en la librería HTU21D y MPL3115A2 para Arduino. Dispone de dos posiciones para soldar conectores RJ11 (para sensores opcionales de lluvia y viento) y un conector GPS de 6 pines (para conectar un GPS opcional). Puede funcionar desde 3.3V hasta 16V y tiene un regulador de voltaje integrado.

 

En cuanto al sw de  la estación meteorológica  en realidad se compone de  dos aplicaciones:

  • La primera es una bucle largo por tiempo indefinido, que trabaja  de fondo leyendo el estado de los sensores y actúando como un servidor de estación meteorológica.
  • La segunda, una interfaz de usuario que realiza una solicitud al puerto 50001 del servidor mostrando los datos. La aplicación de interfaz de usuario es universal y se puede implementar en cualquier dispositivo Windows desde el Raspberry Pi 2 hasta el final a un PC de escritorio – y en cualquier lugar en el medio!

Es necesario encontrar la siguiente línea en el archivo `Mainpage.xaml.cs` del proyecto` build2015-tiempo-station`, y vuelva a colocar el nombre del equipo, «MINWINPC», en la dirección URL con el nombre de su dispositivo IO.

//TODO: On the following line, replace "minwinpc" with the computer name of your IoT device (ie "http:// :50001").

private Uri weatherUri = new Uri("http://minwinpc:50001");

 

1-Seleccione la rama «lab_ConnectTheDots», si desea aprender a utilizar connectthedots y completar el código manualmente

2-Abrir «WeatherStation \ WeatherStation.sln» en Visual Studio 2015

3-Vaya a «WeatherStationTask.cs» en el panel «Explorador de soluciones»

4-Utilice la «Lista de tareas» para saltar a cada «TODO //:» y escribir el código necesario

Los archivos AppSettings, ConnectTheDotsSensor, y ConnectTheDotsHelper son parte del código creado para ayudarle a utilizar la interfaz connectthedots al Hub Evento Azure.

AppSettings: Guarda los ajustes para la conexión al hub de eventos

Esta información se puede encontrar bajo su ServiceBus en Azure.

5-Vaya a su «* ns» instancia ServiceBus -> Evento Ejes -> ehdevices -> Información de conexión -> Busca el SAS «D1»

6-Copiar la cadena de conexión que debe tener este aspecto (Contiene información para sus AppSettings)

"Endpoint=sb://iotbuildlab-ns.servicebus.windows.net/;SharedAccessKeyName=D1;SharedAccessKey=iQFNbyWTYRBwypMtPmpfJVz+NBgR32YHrQC0ZSvId20="

  • servicio de espacio de nombres de autobús (Ej: «iotbuildlab-ns»)
  • nombre del evento cubo (Ej: «ehdevices» – siempre usar esto)
  • nombre de la clave (Ej: «D1»)
  • clave (Ej: «iQFNbyWTYRBwypMtPmpfJVz + NBgR32YHrQC0ZSvId20 =»)
  • nombre de visualización (Ej: «WeatherStation1» – Esto le da un nombre a los datos del dispositivo)
  • organización (Ej: «Construir la IO Lab» – Cambio de personalizar)
  • ubicación (Ej: «EE.UU.» – Cambio de personalizar)

ConnectTheDotsSensor: Contiene la información de un sensor

  • GUID
  • mostrar nombre
  • organización
  • ubicación
  • nombre de la medida
  • unidad de medida
  • hora de creación
  • valor

ConnectTheDotsHelper: Las funciones auxiliares para inicializar el Hub de eventos

  • establece la conexión
  • crea los tokens de autenticación

Si desea iniciar su propio concentrador de sucesos de servicios de fondo, siga las instrucciones del connectthedots GitHub repositorio:https://github.com/msopentech/connectthedots/blob/master/Azure/AzurePrep/AzurePrep.md

.

7-Una vez que haya que desplegado, debe iniciar el envío de datos al cubo evento y los datos debe ser visible en http://iotbuildlab.azurewebsites.net/ o en su propio sitio web.

 

Fuente  aqui

Sensor de movimiento en Orange pi y Raspberry Pi


Desde 2012 la Raspberry Pi ha ido creciendo de gran popularidad, estando hoy en día posicionada como una de las placas de desarrollo de referencia. Uno de sus rivales clásicos en los últimos tiempos están siendo las Orange Pi, una placa fabricada por Shenzhen Xunlong ,con un diseño similar pero basado en procesadores de Allwinne y con un precio bastante inferior a falta de 1 conector USB

Esta placa  de desarrollo  «low cost» es ademas abierta y hackeable compitiendo abiertamente con otras tantas existentes donde la mas destacable es también la Banana Pi , pretendiendo todas ellas competir con la Raspberry Pi.

Hablando de esta versión, la Orange Pi ,se vende en dos versiones, una básica de bajo coste y otra denominada Orange Pi Plus.

orange_pi

Como ejemplo de uso de GPIO ,vamos a conectar un sensor PIR HC-SR501  a una OrangePi, pero la idea y concepto es aplicable también a una Raspberry Pi utilizando por ejemplo la librería Python RPi.GPIO

 

hcsr501.PNG

 

 

El  modelo HC-SR501HC-SR501 es  un Sensor infrarrojo de bajo coste (menos de 2€  por modulo en Amazon) con placa de circuito de control donde se pueden ajustar la sensibilidad y el tiempo de retención gracias a dos resistencias ajustables que dispone en un lateral.

La gama de voltaje de trabajo es  DC 5V-20V  con un consumo de corriente de  menos de 60uA. La salida  es binaria digital  siendo el voltaje de salida de  3,3 V para un nivel alto o «1» logico  y  0V para el cero lógico (no detección de movimiento).

Lo primero que hacemos es conocer el pinout del HC-SR501, pero rápidamente al ver la serigrafía  de la placa, queda perfectamente claro :GND  para la masa , VCC para la alimentación (que tomaremos desde la Orange Pi ) y un pin de salida (OUT) que será el que nos indique si ha detectado algún movimiento.

Luego lleva un par de resistencia variables o potenciómetros que nos permiten ajustar los parámetros de sensibilidad y duración de la señal, es decir, durante cuanto tiempo vamos a querer que en pin OUT tener la salida informada.

sensor

 

El primer potenciómetro hacia la derecha sirve para ajustar la distancia de modo que el , rango de detección aumenta (unos 7 metros), por el contrario, la gama de detección disminuye (unos 3 metros).
El otro potenciómetro rotándolo a la derecha sirve para retrasar  el  retardo de sensor a  tiempos más largos (sobre 300s).Si se gira la contrario el retardo sera corto (sobre 5).

En cuanto a las conexiones del sensor a la placa no pueden ser mas sencillas:

  • El sensor HC-SR501 funciona a 5v, por lo buscamos los pines que nos proporcionan la alimentación ,los cuales  corresponden a los pines 4 y 6 de la referencia CONN de la Orange Pi.
  • El pin de salida del  HC-SR501 con el estado del sensor se puede  conectar por ejemplo  al puerto 7 de GPIO ( al conector número 7)

Primero y si no lo tenemos instalado,teniendo conectado la Orange pi  a Internet  via cable etherenet, debemos  instalar el acceso al repositorio de código  git  usando el siguiente comando:

orangepi@OrangePI:~$ sudo apt-get install git

Vamos a utilizar la librería en Python orangepiPCgpio_pyH3 para acceder los puerto de conexión GPIO’s. Ésta librería la podéis encontrar en el GitHub del usuario duxingkei33 seidno resumidamentes una adaptación de la librería pyA20 0.2.1 que se utiliza en la placa A20-OLinuXino-MICRO.

Vamos a clonar primero el repositorio:

git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3.git

Y ahora para instalar ejecutamos:

cd orangepi_PC_gpio_pyH3
sudo python setup.py install

Una vez tenemos conectado nuestro sensor HC-SR501 a nuestra placa OrangePi, vamos a generar un pequeño script    de ejemplo para leer el valor del conector GPIO 7 tal y como lo veremos en el código el port.PA6:

from pyA20.gpio import gpio
from pyA20.gpio import port
from pyA20.gpio import connector

gpio.init() 

gpio.setcfg(port.PA6, gpio.INPUT) 

while True:
if gpio.input(port.PA6) == 1:
print «PA6/PIN 7 = 1»
else:
print «PA6/PIN 7 = 0»

 

El código es muy sencillo y pasamos a describir:

  • Mediante  gpio.init()  inicializamos  el modulo,acción que siempre haremos los  primero cuando usemos el Gpio.
  • La linea gpio.setcfg(port.PA6, gpio.INPUT) configura PA6 como entrada.Cómo información adicional, si miramos dentro del código de la librería orangepiPCgpio_pyH3 el fichero mapping.h tiene la relación entre PUERTO y CONECTOR. Por ejemplo, el  pin utilizado en el ejemplo lo encontraremos definido así («PA6» cómo 7): «PA6», SUNXI_GPA(6), 7 }.Como curiosidad  puede sorprender que el pinout del conector GPIO 7 corresponda al nombre del puerto PA6 . La librería pyA20 utiliza esta nomenclatura de puertos ya que la placa a la que está orientada originariamente (no ésta modificación/adaptación) tiene diferentes fuentes de GPIO’s y es una forma de darles un nombre único dentro de todas las conexiones.
  • Por ultimo tenemos un bucle while desde el que nunca saldemos y en el que constantemente se  esta mirando el estado del pin pintando en pantalla en función del estado, obteniendo un mensaje u otro.

Para ejecutar el script ,observe que la inicialización del módulo requiere root, por lo que el script de Python lo tenemos que ejecutar con sudo

El ejemplo es muy sencillo y únicamente lo que hace es leer el valor del sensor, que puede ser «0» (no detecta movimiento) o «1» (se detecta movimiento) y pintar en pantalla el resultado ,pero obviamente se puede mejorar  mucho mas , dentro del bucle while por ejemplo añadiendo código para enviar un correo al detectar movimiento o por ejemplo enviar el dato a un repositorio de IoT como Cosm.com . 

 

Fuente aqui