3
3
4
4
# copied from https://github.com/SWITCHSCIENCE/samplecodes/blob/master/BME280/Python27/bme280_sample.py
5
5
from smbus2 import SMBus
6
- import time
7
- import datetime
8
- import sqlite3
9
6
10
7
class BME280 :
11
8
def __init__ (self ):
@@ -18,7 +15,7 @@ def __init__(self):
18
15
self .digH = []
19
16
20
17
self .t_fine = 0.0
21
-
18
+
22
19
# FIXME:
23
20
self .result_T = 0.0
24
21
self .result_P = 0.0
@@ -31,7 +28,7 @@ def writeReg(self, reg_address, data):
31
28
32
29
def get_calib_param (self ):
33
30
calib = []
34
-
31
+
35
32
for i in range (0x88 ,0x88 + 24 ):
36
33
calib .append (self .bus .read_byte_data (self .i2c_address ,i ))
37
34
calib .append (self .bus .read_byte_data (self .i2c_address ,0xA1 ))
@@ -56,7 +53,7 @@ def get_calib_param(self):
56
53
self .digH .append ((calib [28 ]<< 4 ) | (0x0F & calib [29 ]))
57
54
self .digH .append ((calib [30 ]<< 4 ) | ((calib [29 ] >> 4 ) & 0x0F ))
58
55
self .digH .append ( calib [31 ] )
59
-
56
+
60
57
for i in range (1 ,2 ):
61
58
if self .digT [i ] & 0x8000 :
62
59
self .digT [i ] = (- self .digT [i ] ^ 0xFFFF ) + 1
@@ -67,7 +64,7 @@ def get_calib_param(self):
67
64
68
65
for i in range (0 ,6 ):
69
66
if self .digH [i ] & 0x8000 :
70
- self .digH [i ] = (- self .digH [i ] ^ 0xFFFF ) + 1
67
+ self .digH [i ] = (- self .digH [i ] ^ 0xFFFF ) + 1
71
68
72
69
def readData (self ):
73
70
data = []
@@ -76,22 +73,22 @@ def readData(self):
76
73
pres_raw = (data [0 ] << 12 ) | (data [1 ] << 4 ) | (data [2 ] >> 4 )
77
74
temp_raw = (data [3 ] << 12 ) | (data [4 ] << 4 ) | (data [5 ] >> 4 )
78
75
hum_raw = (data [6 ] << 8 ) | data [7 ]
79
-
76
+
80
77
self .compensate_T (temp_raw )
81
78
self .compensate_P (pres_raw )
82
79
self .compensate_H (hum_raw )
83
80
84
81
def compensate_P (self , adc_P ):
85
82
global t_fine
86
83
pressure = 0.0
87
-
84
+
88
85
v1 = (t_fine / 2.0 ) - 64000.0
89
86
v2 = (((v1 / 4.0 ) * (v1 / 4.0 )) / 2048 ) * self .digP [5 ]
90
87
v2 = v2 + ((v1 * self .digP [4 ]) * 2.0 )
91
88
v2 = (v2 / 4.0 ) + (self .digP [3 ] * 65536.0 )
92
89
v1 = (((self .digP [2 ] * (((v1 / 4.0 ) * (v1 / 4.0 )) / 8192 )) / 8 ) + ((self .digP [1 ] * v1 ) / 2.0 )) / 262144
93
90
v1 = ((32768 + v1 ) * self .digP [0 ]) / 32768
94
-
91
+
95
92
if v1 == 0 :
96
93
return 0
97
94
pressure = ((1048576 - adc_P ) - (v2 / 4096 )) * 3125
@@ -101,7 +98,7 @@ def compensate_P(self, adc_P):
101
98
pressure = (pressure / v1 ) * 2
102
99
v1 = (self .digP [8 ] * (((pressure / 8.0 ) * (pressure / 8.0 )) / 8192.0 )) / 4096
103
100
v2 = ((pressure / 4.0 ) * self .digP [7 ]) / 8192.0
104
- pressure = pressure + ((v1 + v2 + self .digP [6 ]) / 16.0 )
101
+ pressure = pressure + ((v1 + v2 + self .digP [6 ]) / 16.0 )
105
102
pressure = pressure / 100
106
103
107
104
self .result_P = float ("{:7.2f}" .format (pressure ))
@@ -132,7 +129,7 @@ def compensate_H(self, adc_H):
132
129
var_h = 100.0
133
130
elif var_h < 0.0 :
134
131
var_h = 0.0
135
-
132
+
136
133
self .result_H = float ("{:6.2f}" .format (var_h ))
137
134
138
135
print ("hum : %6.2f %" % (var_h ))
@@ -154,42 +151,17 @@ def setup(self):
154
151
self .writeReg (0xF2 ,ctrl_hum_reg )
155
152
self .writeReg (0xF4 ,ctrl_meas_reg )
156
153
self .writeReg (0xF5 ,config_reg )
157
-
154
+
158
155
def result (self ) -> (float , float , float ):
159
156
# print(self.result_T) # e.g. 27.9
160
157
# print(self.result_P) # e.g. 997.31
161
158
# print(self.result_H) # e.g. 57.1
162
159
return self .result_T , self .result_P , self .result_H
163
160
164
- class Repository :
165
- def __init__ (self , dsn ) -> None :
166
- self .conn = sqlite3 .connect (dsn )
167
-
168
- def store (self , temperature , pressure , humidity ):
169
- cur = self .conn .cursor ()
170
- date = datetime .datetime .now ().strftime ('%Y-%m-%d %H:%M:%S' )
171
- cur .execute ('insert into environment(date, temperature, pressure, humidity) values(?, ?, ?, ?)' , (date , temperature , pressure , humidity ))
172
- self .conn .commit ()
173
-
174
- def close (self ):
175
- self .conn .close ()
176
-
177
-
178
161
if __name__ == '__main__' :
179
162
try :
180
163
bme280 = BME280 ()
181
164
bme280 .get_calib_param ()
182
165
bme280 .readData ()
183
- t , p , h = bme280 .result ()
184
-
185
- dsn = '/home/pi/github.com/ddddddO/sensor-pi/environment.sqlite3'
186
- repo = Repository (dsn )
187
- repo .store (t , p , h )
188
- repo .close ()
189
166
except KeyboardInterrupt :
190
167
pass
191
-
192
-
193
-
194
-
195
-
0 commit comments