Raspberry Pi membaca BMP085 Suhu &Tekanan
Perangkat i2c kecil lainnya yang menyenangkan diperoleh dengan harga murah melalui eBay. Ini membaca tekanan barometrik dan suhu. Ada beberapa matematika yang relatif sederhana untuk mengubah output menjadi sesuatu yang dapat dibaca.
Sekali lagi, ADAFruit memberikan panduan dan pustaka yang fantastis untuk menggunakan perangkat dalam Menggunakan BMP085 dengan Raspberry Pi. Seperti pada posting sebelumnya, saya bisa saja menggunakan perpustakaan ADAFruit di luar kotak. Meskipun saya tidak merasa perlu menemukan kembali roda dan mengkode ulang dari awal, saya ingin memahami cara kerjanya.
Saya mengambil informasi dari beberapa sumber lain:
- Bajak Laut Bus Maarten Damen membaca Suhu BMP085 (situs down pada saat penulisan ini)
- Port Python dari Kode C John Burn dalam Membaca data dari Bosch BMP085 dengan Raspberry Pi.
Di bawah ini adalah skema yang sangat sederhana untuk menghubungkan perangkat ke Pi.
impor smbus impor waktu kelas BMP085(): OSS 3 def __init__( sendiri , i2c, alamat): sendiri .i2c i2c sendiri .address alamat sendiri .ac1 sendiri .readSignedWord( 0xaa sendiri .ac2 sendiri .readSignedWord( 0xac sendiri .ac3 sendiri .readSignedWord( 0xae sendiri .ac4 sendiri .readWord( 0xb0 sendiri .ac5 sendiri .readWord( 0xb2 sendiri .ac6 sendiri .readWord( 0xb4 sendiri .b1 sendiri .readSignedWord( 0xb6 sendiri .b2 sendiri .readSignedWord( 0xb8 sendiri .mb sendiri .readSignedWord( 0xba sendiri .mc sendiri .readSignedWord( 0xbc sendiri .md sendiri .readSignedWord( 0xbe def readWord( sendiri , reg): msb sendiri .i2c.read_byte_data( sendiri .address, reg) lsb sendiri .i2c.read_byte_data( sendiri .address, reg + 1 nilai (msb << 8 ) + lsb kembalikan nilai def readSignedWord( sendiri , reg): msb sendiri .i2c.read_byte_data( sendiri .address, reg) lsb sendiri .i2c.read_byte_data( sendiri .address, reg + 1 ) jika (msb> 127 msb msb - 256 nilai (msb << 8 ) + lsb kembalikan nilai def readUT( sendiri ): sendiri .i2c.write_byte_data( sendiri .address, 0xf4 , 0x2e ) time.sleep( 0,0045 ) ut sendiri .readWord( 0xf6 ) kembalikan ut def readTemperature( sendiri ): ut sendiri .readUT() x1 ((ut - sendiri .ac6) sendiri .ac5)>> 15 x2 sendiri .mc << 11 ) / (x1 + sendiri .md) sendiri .b5 x1 + x2 kembalikan (( sendiri .b5 + 8 )>> 4 ) / 10.0 def readUP( sendiri sendiri .i2c.write_byte_data( sendiri .address, 0xf4 , 0x34 + sendiri .OSS << 6 )) tunda 2 + 3 << sendiri .OSS)) / 1000.0 time.sleep(delay) msb sendiri .i2c.read_byte_data( sendiri .address, 0xf6 lsb sendiri .i2c.read_byte_data( sendiri .address, 0xf7 xlsb sendiri .i2c.read_byte_data( sendiri .address, 0xf8 naik (msb << 16 ) + (lsb << 8 ) + xlsb up atas>> ( 8 - sendiri .OSS) kembalikan naik def readPressure( sendiri naik sendiri .readUP() b6 sendiri .b5 - 4000 x1 sendiri .b2 (b6 b6)>> 12 )>> 11 x2 sendiri .ac2 b6)>> 11 x3 x1 + x2 b3 ((( sendiri .ac1 4 + x3)<> 2 x1 sendiri .ac3 b6)>> 13 x2 sendiri .b1 ((b6 b6)>> 12 ))>> 16 x3 ((x1 + x2) + 2 )>> 2 b4 sendiri .ac4 (x3 + 32768 ))>> 15 b7 (naik - b3) 50.000 >> sendiri .OSS) jika (b7 < 0x80000000 p (b7< 1 / b4 lain p (b7 / b4)<> 8 ) (p>
> 8 x1 (x1 3038 )>> 16 x2 - 7357 p)>> 16 p + (x1 + x2 + 3791 )>> 4 kembalikan p i2c smbus.SMBus( 0 bmp085 BMP085(i2c, 0x77 t bmp085.readTemperature() p bmp085.readPressure() cetak "Suhu:%.2f C" t cetak "Tekanan: %.2f hPa" (p / 100 Untuk lebih detail:Raspberry Pi membaca BMP085 Suhu &Tekanan