8 def __init__(self, altitude=0, external=None, oversampling=0, filter=0, standby=0.5, slave=0x76):
9 I2C.__init__(self,
toint(slave))
10 Pressure.__init__(self, altitude, external)
33 oversamplingBits =
toint(oversampling).bit_length()
35 self.
writeRegister(0xF4, (oversamplingBits << 5) | (oversamplingBits << 2) | 0x03)
37 standbyValues = {
'0.5':0,
'10':6,
'20':7,
'62.5':1,
'125':2,
'250':3,
'500':4,
'1000':5}
38 if standby
in standbyValues:
39 tStandbyBits = standbyValues[standby]
44 filterBits =
toint(filter) >> 1
45 self.
writeRegister(0xF5, (tStandbyBits << 5) | (filterBits << 2) | spiBits)
51 return [Temperature.__family__(self), Pressure.__family__(self), Humidity.__family__(self)]
56 if byteOrder ==
'big':
57 for i
in range(0, numBytes):
58 x |= d[i] << (8 * (numBytes - (i + 1)))
60 for i
in range(0, numBytes):
64 def readSigned(self, address, numBytes, byteOrder = 'little'):
72 adc_T = ((raw >> 16) & 0xFFFFFF) >> 4
74 return (adc_T, adc_P, adc_H)
78 var1 = (((adc_T >> 3) - (self.
t1 << 1)) * self.
t2) >> 11
79 var2 = (((((adc_T >> 4) - self.
t1) * ((adc_T >> 4) - self.
t1)) >> 12) * self.
t3) >> 14
85 return float((t_fine * 5 + 128) >> 8) / 100.0
89 var1 = t_fine - 128000
90 var2 = var1 * var1 * self.
p6
91 var2 = var2 + ((var1 * self.
p5) << 17)
92 var2 = var2 + (self.
p4 << 35)
93 var1 = ((var1 * var1 * self.
p3) >> 8) + ((var1 * self.
p2) << 12)
94 var1 = ((1 << 47) + var1) * self.
p1 >> 33
100 p = (((p << 31) - var2) * 3125) // var1
101 var1 = (self.
p9 * (p >> 13) * (p >> 13)) >> 25
102 var2 = (self.
p8 * p) >> 19
103 p = ((p + var1 + var2) >> 8) + (self.
p7 << 4)
105 return float(p) / 256.0
109 v_x1_u32r = t_fine - 76800
110 v_x1_u32r = ((((adc_H << 14) - (self.
h4 << 20) - (self.
h5 * v_x1_u32r)) + 16384) >> 15) * (((((((v_x1_u32r * self.
h6) >> 10) * (((v_x1_u32r * self.
h3) >> 11) + 32768)) >> 10) + 2097152) * self.
h2 + 8192) >> 14)
111 v_x1_u32r = v_x1_u32r - (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * self.
h1) >> 4)
112 v_x1_u32r = max(v_x1_u32r, 0)
113 v_x1_u32r = min(v_x1_u32r, 419430400)
115 return float(v_x1_u32r >> 12) / 1024.0
120 adc_T = ((raw >> 16) & 0xFFFFFF) >> 4