martes, 26 de julio de 2016

Ejemplo GPIO en Raspberry PI - Enciende un LED



Ahora vamos a hacer un ejemplo, donde encenderemos un led con un flujo de Node Red.

Materiales que utilizaremos:

a) 1 Canakit. Es un kit que contiene un paquete básico para que comiences a crear circuitos para Raspberry. De CanaKit utilizaremos el protoboard, un led, una resistencia de 220ohms, un cable para conectar el led, el cable de conexión del raspberry al circuito con pines que se coloca en el protoboardo.




 b) Ver la distribución del GPIO de tú raspberry:
c) En node red, vas a necesitar lo siguiente:
2 nodos inject
1 nodo GPIO output
2 nodos debug

Listo es todo lo que necesitas para empezar.

Paso 1. Conecta tú raspberry al protoboard, observa la imagen:


Paso 2. conecta el led de la siguiente forma:

En mi caso conecté todo de la siguiente forma:
Cable del pin 17 de la GPIO a la columna 24 del protoboard
El led, conecté la terminal larga (positiva) a la columna 24 del protoboard y la terminal corta(negativo) a la columna 25
La resistencia conecté un extremo en la columna 25 para que coincida con la terminal negativa del LED y el otro extermo al negativo de la alimentación de 3.3V


Obseva la imagen:



















Paso 3. Ahora que todo el Hardware esta configurado. Vamos a pasar a Node Red. Diagrama un flujo como sigue:




Paso 4. Configura los inject de la siguiente forma:




Paso 5. Configura el nodo GPIO como se muestra en la imagen. Recuerda: todos los nodos toman la información de msg.payload

Configure la salida GPIO para el pin en cuestión: 17


Paso 6. Despliega el flujo de NodeRed y debe verse similar a lo siguiente:

Una de las grandes ventajas de NodeRed es que puedes compartir flujos hechos por otras personas. Estos se almacenan en formato JSON y es sólo texto. Te comparto, el código de este flujo para que lo puedas probas de inmediato:


[{"id":"12d2f4b6.4701db","type":"inject","z":"ab10e82a.033888","name":"","topic":"On","payload":"1","payloadType":"num","repeat":"","crontab":"","once":false,"x":135.75,"y":101.00000762939453,"wires":[["3100d548.4176ca","4b3d5169.dbaf4"]]},{"id":"3100d548.4176ca","type":"rpi-gpio out","z":"ab10e82a.033888","name":"","pin":"11","set":false,"level":"1","out":"out","x":291.75,"y":124.50000762939453,"wires":[]},{"id":"7ee42586.69750c","type":"inject","z":"ab10e82a.033888","name":"","topic":"off","payload":"0","payloadType":"num","repeat":"","crontab":"","once":false,"x":135.75,"y":153,"wires":[["3100d548.4176ca","a8e23b75.0f0538"]]},{"id":"4b3d5169.dbaf4","type":"debug","z":"ab10e82a.033888","name":"","active":true,"console":"false","complete":"false","x":288.75,"y":49.666664123535156,"wires":[]},{"id":"a8e23b75.0f0538","type":"debug","z":"ab10e82a.033888","name":"","active":true,"console":"false","complete":"false","x":282.75,"y":193.66665649414062,"wires":[]}]

Dentro de node red, crea un flujo nuevo y en el menú selecciona importar desde el clipboard y pegas el código anterior.

Listo!!!! Ya tienes un flulo de Node Red que enciende y apaga un LED.

El ejemplo modificado para Watson IoT lo puedes encontrar en la siguiente ruta: http://deep-iot.blogspot.mx/2016/08/ejemplo-watson-iot-platform.html

domingo, 24 de julio de 2016

Flujo ejecutando un comando con Node Red

Ahora que hemos hecho dos ejemplos con Node Red, vamos a interactuar un poco más con Raspberry. Vamos a ejecutar un comando del sistema operativo: vcgencmd

La documentación de vcgencmd, la puedes encontrar en la siguiente URL: http://www.elinux.org/RPI_vcgencmd_usage

El ejemplo que realizaremos, es para obtener la temperatura de Raspberry PI y necesitaremos los siguientes nodos para realizar nuestro ejemplo:
  • Inject: para realizar una llamada al flujo
  • Exec: para ejecutar el comando del sistema operativo
  • Debug: para ver la salida
  • Function: para formatear la salida del comando, realizaremos la salida con forma JSON
 Acomoda los nodos de la siguiente forma y después los configuratemos:


Nos enfocaremos a trajabar en exec y function. Primero configura exec de la siguiente forma:


Después en el nodo function ingresa el siguiente código:
msg.payload={'d':{'temp':Number(msg.payload.substring(5,9))}}; //Estoy extrayendo de la salida de exec el valor de la temperatura y formateandolo como un número.  También estoy reescribiendo el payload.
return msg; //Regreso el objeto msg

Despliega el flujo y ejecuta una vez tú flujo. Debes ver algo similar a esto:

En la pestaña debug observarás que aparece la temperatura formateada y sin formatear.

Una de las grandes ventajas de NodeRed es que puedes compartir flujos hechos por otras personas. Estos se almacenan en formato JSON y es sólo texto. Te comparto, el código de este flujo para que lo puedas probas de inmediato:

[{"id":"edd483c9.2ac008","type":"inject","z":"1e1664fa.ed931b","name":"","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":153,"y":132.2900161743164,"wires":[["802fc074.76b12"]]},{"id":"d2cebc8a.13cb48","type":"function","z":"1e1664fa.ed931b","name":"","func":"//var vcgencmd = require('vcgencmd');\n//console.log(vcgencmd.mesureTemp());\n\nmsg.payload={'d':{'temp':Number(msg.payload.substring(5,9))}};\nreturn msg;","outputs":1,"noerr":0,"x":545.8499755859375,"y":110.72000885009766,"wires":[["b3771139.ec696"]]},{"id":"802fc074.76b12","type":"exec","z":"1e1664fa.ed931b","command":"vcgencmd","addpay":true,"append":"measure_temp","useSpawn":"","name":"","x":323,"y":133.22000885009766,"wires":[["d2cebc8a.13cb48","ba54f64b.f6067"],[],[]]},{"id":"b3771139.ec696","type":"debug","z":"1e1664fa.ed931b","name":"","active":true,"console":"true","complete":"payload","x":714,"y":109.00000762939453,"wires":[]},{"id":"ba54f64b.f6067","type":"debug","z":"1e1664fa.ed931b","name":"","active":true,"console":"false","complete":"false","x":568,"y":207,"wires":[]}]

Dentro de node red, crea un flujo nuevo y en el menú selecciona importar desde el clipboard y pegas el código anterior.

Listo!!!! Ya tienes un flulo de Node Red que ejecuta un comando del sistema operativo y lo formatea