Usando I2C en el Beaglebone con el sensor BMP085 + Twitter

En esta oportunidad usaremos el standard I2C para conectar el sensor de presión y temperatura BMP085.
Hay información detallada de I2C en la Internet,  un buen tutorial esta aquí

 

 

 

 

 

 

El sensor BMP085 es de alta precisión con un rango de medida de entre 300 y 1100 hPa (Hecto Pascal) con un margen de error mínimo de tan sólo 0.03 hPa. Está basado en tecnología piezo-resistiva de alta eficiencia, linearidad y larga duración.

Materiales usados

Conectividad y software

Para empezar ejecutamos
sudo apt-get update
sudo apt-get install i2c-tools
Se conecta el sensor como indica la figura.
Luego ejecutamos
root@omap:/sys/bus/i2c/drivers# i2cdetect -r -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77
La salida anterior nos indica la direccion de 77 esta disponible, para agregar el sensor ahora ejecutamos
echo bmp085 0x77 > /sys/class/i2c-adapter/i2c-3/new_device
Para verificar el comando anterior usamos
 dmesg | grep bmp
[280914.380172] i2c i2c-3: new_device: Instantiated device bmp085 at 0x77
[280914.463284] bmp085 3-0077: BMP085 ver. 2.0 found. [280914.463397] bmp085 3-0077: Successfully initialized bmp085!
root@omap:
Luego para obtener la presión atmosférica se debe ejecutar este comando
cat /sys/bus/i2c/drivers/bmp085/3-0077/pressure0_input
La salida de presión esta en unidades de Pascales (Pa), si quieres saber una altura estimada se puede usar la siguiente fórmula.
Donde
p   = pressure0_input Pa
p0 = es la presion promedio a nivel del mar, 101325 Pa
altitude = altitud en metros
Para obtener la temperatura
cat /sys/bus/i2c/drivers/bmp085/3-0077/temp0_input
Un ejemplo muy sencillo en Python es el siguiente, en su editor favorito pueden escribir
from time import sleep
     while(True):
     f = open("/sys/bus/i2c/drivers/bmp085/3-0077/temp0_input","r")
     datos = f.read()
     vect = datos.split('\x00')
     temp = float(vect[0])
     temp1 = temp/10
     temp2d = ("%.2f" % temp1)
     print switch12d
     f.close
     sleep(30)

Si  guardan el texto anterior en un archivo, por ejemplo temp.py, para ejecutar simplemente usamos el comando

sudo python temp.py
Si se requiere pasar los valores a un servidor externo, tienen que agregar la biblioteca urllib
from time import sleep
import urllib
url = http://www.ejemplo.com/hola.php?

while(True):

     f = open("/sys/bus/i2c/drivers/bmp085/3-0077/temp0_input","r")
     datos = f.read()
     vect = datos.split('\x00')
     temp = float(vect[0])
     temp1 = switch/10
     temp2d = ("%.2f" % temp1)
     print temp2d
     params = urllib.urlencode({'id':'sensor1','temp':temp2d})
     new_url = url + params
     urllib.urlopen(new_url)
     f.close
     sleep(5)

 

Enviando la temperatura por Twitter !

Una forma muy simple de hacer esto es instalar twidge, un conocido cliente twitter para linea de comandos, en el Beaglebone.  Esto se indica aquí, paso a paso, veras que es bastante fácil.

Luego desde la línea de comandos puedes ejecutar por ejemplo

ubuntu@omap:/home/pruebas$ cat /sys/bus/i2c/drivers/bmp085/3-0077/temp0_input > temperatura

A continuación

ubuntu@omap:/home/pruebas$ cat temperatura | twidge update

 

Links

Presentación de Beaglebone
Documentación del comando i2cdetect 

Author: Manuel Carrasco

Ingeniero Eléctrico, Institutano, instructor certificado Cisco, en twitter @mcarrasco con comentarios y opiniones personales.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *