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