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