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