Electrónica y Programación en Personal
«Si no se soluciona con un script en Python entonces no es viable»

por Yeison Cardona el 23 de marzo de 2012 a las 01:40 UTC
Bueno, regresemos con Pachube, una plataforma orientada al Internet de las Cosas con la cual podemos visualizar y compartir datos en tiempo real, funciona mediante una API muy sencilla de usar y que ademas está documetada en el sitio oficial.

Internet de las cosas para crear una red de objetos cotidianos interconectados, el ejemplo mas simple es sin duda alguna la temperatura de nuestra habitación, así que, ¡Hagámoslo con Pinguino!.

La comunicación con Pachube puede lograrse con muchos lenguajes de programación, pero ya conocen mi obsesión con Python...


Paquete EEML
Primero necesitaremos el paquete para python llamado eeml, podemos descargarlo, descomprimirlo e instalarlo, ejecutando en su directorio:
sudo python setup.py install
Es probable que no necesite instalar el paquete PySerial, pero para estar seguros:
sudo apt-get install python-serial
En Pinguino En Pinguino no necesitamos mas que un código que lea la temperatura y la envíe por CDC, el montaje también es muy sencillo: El sensor utilizado es el popular Lm35 y se ha agregado un LED de visualización, la board usada en ésta práctica es la 18F2550. Hay que tener en cuenta que no podemos superar las 100 peticiones por minuto (la primera vez que lo usé me limitaban a una petición cada 3 minutos). El código usado es el siguiente, se puede ver que consiste simplemente en una lectura del pin análogo y en una "animación" en el LED de visualización, la lectura es enviada cada que se recibe la cadena "leer", ésta cadena se enviará desde Python cuando queramos hacer una lectura.
/*-----------------------------------------------------
Author:  Yeison Cardona --
Date: 22/3/2012
Description: Interfaz con Python y Pachube

-----------------------------------------------------*/

int LED=0, Lm35_Salida=13, tiempo=0, lectura;
char desdePython[5];

void setup() {
 pinMode(LED, OUTPUT);
 digitalWrite(LED,HIGH);
 pinMode(Lm35_Salida, INPUT);
 CDC.printf("Iniciado...\n");
 }
 
void enviarTemperatura(){
 digitalWrite(LED,HIGH);
 lectura = analogRead(Lm35_Salida);
 CDC.printf("%d\n", lectura);
 delay(100);
 digitalWrite(LED,LOW);
 }
 
void leer_cadena() {
 unsigned char valor_leido[21];
 unsigned char receivedbyte;
 int cont=1;
 while (cont){    
  receivedbyte=CDC.read(valor_leido);
  valor_leido[receivedbyte]=0;
  if (receivedbyte>0) cont=0;}
 strcpy(desdePython,valor_leido);
    }

void loop() {
 leer_cadena();
 if (strcmp(desdePython, "leer")==0) {
  tiempo=millis();
  enviarTemperatura(); }
 }
En Python
De lado de Python podemos pensar una aplicación mas sencilla, sin interfaz gráfica, que incluso pueda ejecutarse silenciosamente:
#! /usr/bin/python
#-*- coding: utf-8 -*-  

import eeml, serial, time

API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
API_URL = 15507

pac = eeml.Pachube(API_URL, API_KEY)

pinguino = serial.Serial("/dev/ttyACM0", timeout=0.7)
cont=1
while True:
    try:
        pinguino.write("leer")
        value = int(pinguino.readline())
        temp = (5.0 * value * 100.0) / 1023.0
        print temp
        pac.update([eeml.Data(0, temp, ['device'])])
        pac.put()
        
    except: 
        time.sleep(60)


El anterior código se encarga de leer el dato que envía Pinguino, convertir éste dato a un valor de temperatura, imprimirlo y enviarlo a Pachube, para mas referencia puede consultar una anterior entrada sobre pachube o bien la documentación del módulo eeml para Python.

Claro está que los valores de API_KEY y APY_URL son los valores de cada usuario, los cuales pueden ser consultados en la cuenta de Pachube (hay que crear una), en cuanto a los parámetros del método pac.update, pues son sólo el ID, el valor y las etiquetas, Consultar la documentación!!


El resultado
Bueno, habíamos dicho que con Pachube podíamos visualizar los datos, pero donde?, en cualquier página web, ya que tenemos acceso a diferentes tipos de visualizaciones.
Siguiendo las instrucciones del sitio es muy fácil agregar unas como éstas:








También podría interesarte:

Comentarios:
adil dijo:
26 de marzo de 2012 13:13
Hola,me puedes ayudar para publicar temperatura en pachube ,he intentado pero no puedo.
gracias
Responder a adil
Respuesta de Yeison Cardona:
26 de marzo de 2012 13:30

Claro, tienes algún mensaje de error específico, cual es tu problema?
Responder a Yeison Cardona
Añadir un nuevo comentario:
Si desean una respuesta para su comentario sólo deben agregarme en G+ y hacer una mención a Yeison Cardona, así les podré responder lo antes posible.