Lectura de Raspberry Pi BMP085 Temperatura y presión
Otro pequeño y divertido dispositivo i2c adquirido a bajo precio a través de eBay. Lee la presión barométrica y la temperatura. Hay algunas matemáticas relativamente simples para convertir los resultados en algo legible.
Una vez más, ADAFruit proporciona una guía y una biblioteca fantásticas para usar el dispositivo en su Uso del BMP085 con Raspberry Pi. Como en publicaciones anteriores, podría haber usado la biblioteca ADAFruit lista para usar. Si bien no siento la necesidad de reinventar la rueda y volver a codificar desde cero, me gusta comprender cómo funciona.
Obtuve la información de un par de otras fuentes:
- Maarten Damen’s Bus Pirate leyendo la temperatura BMP085 (sitio inactivo en el momento de escribir esto)
- Adaptación de Python del código C de John Burn al leer datos de un BMP085 de Bosch con una Raspberry Pi.
A continuación se muestra un esquema muy simple para conectar el dispositivo al Pi.
importar smbus importar tiempo BMP085 (): = 3 def __ init __ ( yo , i2c, dirección): yo . i2c = i2c yo . dirección = dirección yo . ac1 = yo . readSignedWord ( 0xaa ) yo . ac2 = yo . readSignedWord ( 0xac ) yo . ac3 = yo . readSignedWord ( 0xae ) yo . ac4 = yo . readWord ( 0xb0 ) yo . ac5 = yo . readWord ( 0xb2 ) yo . ac6 = yo . readWord ( 0xb4 ) yo . b1 = yo . readSignedWord ( 0xb6 ) yo . b2 = yo . readSignedWord ( 0xb8 ) yo . mb = yo . readSignedWord ( 0xba ) yo . mc = yo . readSignedWord ( 0xbc ) yo . md = yo . readSignedWord ( 0xbe ) def readWord ( yo , reg): msb = yo . i2c.read_byte_data ( yo . dirección, reg) lsb = yo . i2c.read_byte_data ( yo . dirección, reg + 1 ) valor = (msb << 8 ) + lsb return valor def readSignedWord ( yo , reg):msb = yo . i2c.read_byte_data ( yo . dirección, reg) lsb = yo . i2c.read_byte_data ( yo . dirección, reg + 1 ) si (msb> 127 ): msb = msb - 256 valor = (msb << 8 ) + lsb return valor def readUT ( yo ): yo . i2c.write_byte_data ( yo . dirección, 0xf4 , 0x2e ) time.sleep ( 0,0045 ) ut = yo . readWord ( 0xf6 ) return ut def readTemperature ( yo ):ut = yo . readUT () x1 = ((ut - yo . ac6) * yo . ac5)>> 15 x2 = ( yo . mc << 11 ) / (x1 + yo . md) yo . b5 = x1 + x2 return (( yo . b5 + 8 )>> 4 ) / 10.0 def readUP ( yo ): yo . i2c.write_byte_data ( yo . dirección, 0xf4 , 0x34 + ( yo . OSS << 6 )) retraso = ( 2 + ( 3 << yo . OSS)) / 1000.0 time.sleep (retraso) msb = yo . i2c.read_byte_data ( yo . dirección, 0xf6 ) lsb = yo . i2c.read_byte_data ( yo . dirección, 0xf7 ) xlsb = yo . i2c.read_byte_data ( yo . dirección, 0xf8 ) arriba = (msb << 16 ) + (lsb << 8 ) + xlsb arriba = arriba>> ( 8 - yo . OSS) return arriba def readPressure ( yo ): arriba = yo . readUP () b6 = yo . b5 - 4000 x1 = ( yo . b2 * (b6 * b6)>> 12 )>> 11 x2 = ( yo . ac2 * b6)>> 11 x3 = x1 + x2 b3 = ((( yo . ac1 * 4 + x3) <> 2 x1 = ( yo . ac3 * b6)>> 13 x2 = ( yo . b1 * ((b6 * b6)>> 12 ))>> 16 x3 = ((x1 + x2) + 2 )>> 2 b4 = ( yo . ac4 * + 32768 ))>> 15 b7 = (arriba - b3) * ( 50000 yo . OSS) si (b7 < 0x80000000 ): p = (b7 << 1 ) / b4 más : p = (b7 / b4) <> 8 ) * (p>
> 8 ) x1 = (x1 * 3038 )>> 16 x2 = ( - 7357 * p)>> 16 p + = (x1 + x2 + 3791 )>> 4 return p i2c = smbus.SMBus ( 0 ) bmp085 = BMP085 (i2c, 0x77 ) t = bmp085.readTemperature () p = bmp085.readPressure () imprimir "Temperatura:% .2f C" % t imprimir "Presión:% .2f hPa" % (p / 100 ) Para más detalles:Raspberry Pi leyendo BMP085 Temperatura y presión Proceso de manufactura
- Registrador de temperatura Raspberry Pi
- Perfil de temperatura de Raspberry Pi usando LabVIEW
- Mide temperaturas con un sensor DS18B20 de 1 cable y Raspberry Pi
- Monitor de red de temperatura y humedad Raspberry Pi
- Leer temperatura con DS18B20 | Raspberry Pi 2
- Monitoreo de temperatura en Raspberry Pi
- Medición de temperatura con RASPBERRY PI
- Biblioteca Python del sensor de temperatura TMP006 con Raspberry pi,
- Sensor de temperatura Python y Raspberry Pi
- Temperatura y humedad sencillas en Raspberry Pi
- Supervisión de la temperatura con Raspberry Pi