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/all

src/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.

Step 7: