Leitura de Raspberry Pi BMP085 Temperatura e pressão
Outro pequeno dispositivo i2c divertido adquirido por um preço baixo no eBay. Ele lê a pressão barométrica e a temperatura. Existem algumas matemáticas relativamente simples para converter as saídas em algo legível.
Mais uma vez, ADAFruit fornece um guia fantástico e biblioteca para usar o dispositivo em seu Uso do BMP085 com Raspberry Pi. Como nos posts anteriores, eu poderia ter usado a biblioteca ADAFruit pronta para uso. Embora eu não sinta a necessidade de reinventar a roda e recodificar do zero, gosto de entender como ela funciona.
Extraí as informações de algumas outras fontes:
- Bus pirata de Maarten Damen lendo a temperatura BMP085 (site fora do ar no momento em que este artigo foi escrito)
- Port Python do código C de John Burn na leitura de dados de um Bosch BMP085 com um Raspberry Pi.
Abaixo está o esquema muito simples para conectar o dispositivo ao Pi.
importação
smbus
importação
hora
classe
BMP085 ():
OSS
=
3
def
__ init __ (
self
, i2c, endereço):
self
. i2c
=
i2c
self
. endereço
=
endereço
self
. ac1
=
self
. readSignedWord (
0xaa
)
self
. ac2
=
self
. readSignedWord (
0xac
)
self
. ac3
=
self
. readSignedWord (
0xae
)
self
. ac4
=
self
. readWord (
0xb0
)
self
. ac5
=
self
. readWord (
0xb2
)
self
. ac6
=
self
. readWord (
0xb4
)
self
. b1
=
self
. readSignedWord (
0xb6
)
self
. b2
=
self
. readSignedWord (
0xb8
)
self
. mb
=
self
. readSignedWord (
0xba
)
self
. mc
=
self
. readSignedWord (
0xbc
)
self
. md
=
self
. readSignedWord (
0xbe
)
def
readWord (
self
, reg):
msb
=
self
. i2c.read_byte_data (
self
. address, reg)
lsb
=
self
. i2c.read_byte_data (
self
. endereço, reg
+
1
)
valor
=
(msb <<
8
)
+
lsb
return
valor
def
readSignedWord (
self
, reg):msb
=
self
. i2c.read_byte_data (
self
. address, reg) lsb
=
self
. i2c.read_byte_data (
self
. endereço, reg
+
1
)
if
(msb>
127
):
msb
=
msb
-
256
valor
=
(msb <<
8
)
+
lsb
return
valor
def
readUT (
self
):
self
. i2c.write_byte_data (
self
. endereço,
0xf4
,
0x2e
) time.sleep (
0,0045
) ut
=
self
. readWord (
0xf6
)
return
ut
def
readTemperature (
self
):ut
=
self
. readUT () x1
=
((ut
-
self
. ac6)
*
self
. ac5)>>
15
x2
=
(
self
. mc <<
11
)
/
(x1
+
self
. md)
self
. b5
=
x1
+
x2
return
((
self
. b5
+
8
)>>
4
)
/
10.0
def
readUP (
self
):
self
. i2c.write_byte_data (
self
. endereço,
0xf4
,
0x34
+
(
self
. OSS <<
6
))
atraso
=
(
2
+
(
3
<<
self
. OSS))
/
1000,0
time.sleep (delay)
msb
=
self
. i2c.read_byte_data (
self
. endereço,
0xf6
)
lsb
=
self
. i2c.read_byte_data (
self
. endereço,
0xf7
)
xlsb
=
self
. i2c.read_byte_data (
self
. endereço,
0xf8
)
up
=
(msb <<
16
)
+
(lsb <<
8
)
+
xlsb up
=
up>
> (
8
-
self
. OSS)
return
up
def
readPressure (
self
):
up
=
self
. readUP ()
b6
=
self
. b5
-
4000
x1
=
(
self
. b2
*
(b6
*
b6)>>
12
)>>
11
x2
=
(
self
. ac2
*
b6)>>
11
x3
=
x1
+
x2
b3
=
(((
self
. ac1
*
4
+
x3) <>
2
x1
=
(
self
. ac3
*
b6)>>
13
x2
=
(
self
. b1
*
((b6
*
b6)>>
12
))>>
16
x3
=
((x1
+
x2)
+
2
)>>
2
b4
=
(
self
. ac4
*
(x3
+
32768
))>>
15
b7
=
(up
-
b3)
*
(
50000
>>
self
. OSS)
if
(b7 <
0x80000000
):
p
=
(b7 <<
1
)
/
b4
else
:
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
"Pressão:% .2f hPa"
%
(p
/
100
)
Para mais detalhes:Raspberry Pi lendo BMP085 Temperatura e pressão Processo de manufatura
- Registrador de temperatura Raspberry Pi
- Perfil de temperatura Raspberry Pi usando LabVIEW
- Meça temperaturas com um sensor DS18B20 de 1 fio e Raspberry Pi
- Monitor de rede de temperatura e umidade Raspberry Pi
- Ler a temperatura com DS18B20 | Raspberry Pi 2
- Monitoramento de temperatura no Raspberry Pi
- Medindo a temperatura com RASPBERRY PI
- Biblioteca Python do sensor de temperatura TMP006 usando Raspberry pi,
- Sensor de temperatura Python e Raspberry Pi
- Temperatura e umidade fáceis no Raspberry Pi