Introduction: BoardEdison En Freeboard Con Dweet
Hola, este es un pequeño tutorial de para realizar un muestreo de algunos sensores con Intel Edison, gracias al uso de herramientas ágiles que nos permiten generar una vista gráfica en web en unos cuantos minutos.
Les hablare un poco de dweet, resulta que en IoT lo primordial en un medio de comunicación, montar servicios para poder acceder desde cualquier lado con una API es una tarea un poco laboriosa, bueno pues esta herramienta nos permite crear una API publica con solo incrustar unas pocas lineas de código dentro de scrips que lean la información de nuestros sensores, se puede integrar en varias lenguajes debido a sus múltiples clientes(Node.js, Javascript,Python y Ruby) que maneja.
Ahora freeboard, nos facilita la creación de una interfaz sencilla para mostrar los datos recopilados en la API publica que mencionaba anteriormente, lo que nos permite en cuestión de minutos tener algo vistoso totalmente funcional.
Step 1: Material
- Intel® Edison
- Grove Starter Kit Plus Intel IoT Edition
- Base Shield (debería estar incluida en el kit anterior)
- Arduino expansion board
Step 2: Instalación
Hay muchas formas de integrar dweet a nuestras placas de desarrollo, para hacer mas rápido el proceso y sin necesidad de configuraciones lo aremos con python.
Una vez que ya hayas terminado la guía de inicio que proporciona Intel para configurar tu Intel Edison (si no lo has echo tienes que hacerlo antes de continuar), deberás tener tu placa actualizada, configurada y conectada a Wifi.
Añadir Bibliotecas de Terceros
En la terminal de tu Edison ejecuta vi (editor de texto precargado) de la siguiente manera
vi /etc/opkg/base-feeds.conf
Agrega las siguientes lineas de texto.
<p>src/gz all http://repo.opkg.net/edison/repo/allsrc/gz...><p>src/gz edison http://repo.opkg.net/edison/repo/all
src/gz...><p>src/gz core2-32 http://repo.opkg.net/edison/repo/all
src/gz... </p><p><a href="http://repo.opkg.net/edison/repo/edisonsrc/gz"></a></p>
Guarda y cierra el documento, en vi tendrás que poner la tecla Esc, y después :qw para salir y guardar.
Ahora solo actualiza la lista de paquetes con:
opkg update
Nota: no ejecutes opkg upgrade, puede que tu memoria se sature.
Instalar pip
opkg install python-pip
Instalar cliente dweet
En python hay dos clientes no oficiales pero buenos de dweet (dweepy y pydweet ), pueden usar con la que se acomoden, por esta vez yo lo haré con dweepy que se intala así:
pip install dweepy
Nano
No se te olvide instalar nano, es un editor de código
opkg install nano
InsecurePlatformWarning
En caso que después te salga ese Warning, puedes instalar las siguientes dependencias:
pip install requests==2.5.3
pip install requests[security]
Step 3: Conectando Sensores
Base Shield
Es una extensión para los pines que hace mucho mas fácil la conexión de sensores, debemos de instalarla con cuidado de no doblar ninguno pin.
Sensores
Con el Grove Starter Kit solo necesitamos sacar los sensores de su bolsa y conectarlos al shield es muy fácil, para este tutorial instalare los siguientes sensores:
- A0: Sensor de Luz (LDR)
- A1: Potenciometro
- A2: Sensor de Temperatura
- D2: Push Botton
- D3: Touch Sensor
Step 4: Obteniendo Datos
Es hora de programar, nos basaremos en el repositorio de códigos catalogados por sensores que están en Sensors Bring IoT Projects to Life
En la consola de Edison creamos el archivo sensores.py
<p>nano sensor.py</p>
Copiamos este scrip:
<p>import time<br>import pyupm_grove as grove import pyupm_ttp223 as ttp223</p><p># Create the button object using GPIO pin 2 button = grove.GroveButton(2) # Create the TTP223 touch sensor object using GPIO pin 3 touch = ttp223.TTP223(3) # Create the light sensor object using AIO pin 0 light = grove.GroveLight(0) # New knob on AIO pin 1 knob = grove.GroveRotary(1) # Create the temperature sensor object using AIO pin 2 temp = grove.GroveTemp(2)</p><p>while 1: print ' Button ------------------ ', button.value() if touch.isPressed(): print ' Touch ------------------- ', True else: print ' Touch ------------------- ', False print ' Light ------------------- ',light.value() print ' Celsius ----------------- ',temp.value() print ' Pot --------------------- ',knob.abs_value()</p><p> time.sleep(1)</p><p># Delete the button object del button # Delete the touch sensor object del touch # Delete the light sensor object del light # Delete the temperature sensor object del temp</p>
Nota: También esta en git para que lo puedas copiar mejor sensores.py .
Guardamos y salimos del editor, ahora para ejecutarlo simplemente corre el scrip y debería de mostrarte el resultado de todos tus sensores conectados
python sensores.py
Step 5: Integrando Dweet
Solo necesitas agregar unas pocas lineas al código y listo
<p>dweepy.dweet_for('nombre_unico', {'key1': value,'key2':value, 'key3':value})</p>
En dweet no necesitas registrarte, solo existe la pequeña desventaja que cualquiera puede acceder a los datos que estas manejando, son totalmente públicos.
Esta es la estructura de JSON de información que haremos publica :
{'Button':<font color="#555555" face="Arial, Helvetica, Verdana, Tahoma, sans-serif">bool</font>,'Touch':bool,'Light' : int, 'Celsius' : float, 'Pot' : int}
Entonces el nuevo programa quedaría así:
import time
import pyupm_grove as grove import pyupm_ttp223 as ttp223 import dweepy# Create the button object using GPIO pin 2 button = grove.GroveButton(2) # Create the TTP223 touch sensor object using GPIO pin 3 touch = ttp223.TTP223(3) # Create the light sensor object using AIO pin 0 light = grove.GroveLight(0) # New knob on AIO pin 1 knob = grove.GroveRotary(1) # Create the temperature sensor object using AIO pin 2 temp = grove.GroveTemp(2)
while 1: print ' Button ------------------ ', button.value() if button.value(): buttonBool = True else: buttonBool = False if touch.isPressed(): print ' Touch ------------------- ', True touchBool = True else: print ' Touch ------------------- ', False touchBool = False print ' Light ------------------- ',light.value() print ' Celsius ----------------- ',temp.value() print ' Pot --------------------- ',knob.abs_value() json= { 'Button':buttonBool, 'Touch':touchBool, 'Light' : light.value(), 'Celsius' : temp.value(), 'Pot' : knob.abs_value() } dweepy.dweet_for('BoardEdison_test_1', json) time.sleep(0.3)
# Delete the button object del button # Delete the touch sensor object del touch # Delete the light sensor object del light # Delete the temperature sensor object del temp
y con eso ya tienes una API a la cual consultar cosas y nutrir, si visitas https://dweet.io/get/dweets/for/BoardEdison_test_1 obtendrás algo como esto:
{
"this": "succeeded", "by": "getting", "the": "dweets", "with": [ { "thing": "BoardEdison_test_1", "created": "2015-10-23T04:07:39.999Z", "content": { "Touch": false, "Light": 45, "Button": false, "Celsius": 28, "Pot": 849 } }, { "thing": "BoardEdison_test_1", "created": "2015-10-23T04:07:38.741Z", "content": { "Touch": false, "Light": 44, "Button": false, "Celsius": 27, "Pot": 844 } }, { "thing": "BoardEdison_test_1", "created": "2015-10-23T04:07:37.561Z", "content": { "Touch": false, "Light": 44, "Button": false, "Celsius": 27, "Pot": 849 } }}
Step 6: Interfaz Freeboard
Para darle una mejor presentación a todos los datos que ya podemos manejar sincronizamos con freeboard. Registrate y crea BoardEdison
Ya que estés en tu board que creaste, agrega un datasource como aparese en la imagen, de esta forma consultara la API publica que acabamos de crear.
type : dweet.io
name: lo que sea
Thing name: debe ser igual al nombre de tu api.
Ahora agrega los paneles que quieras para mostrar tu información, a cada panel le puedes agregar Widget que te permitirán hacer dinámica la información.