@@ -16,15 +16,18 @@ def __init__(self, i2c, address=HTS_I2C_ADDR):
1616 self .writebuffer = bytearray (1 )
1717 self .readbuffer = bytearray (1 )
1818
19- self .calibrate_temperature ()
20- self .calibrate_humidity ()
19+ self ._temp_gain = 1.0
20+ self ._temp_offset = 0.0
21+
22+ self ._read_temperature_calibration ()
23+ self ._read_humidity_calibration ()
2124
2225 # set av conf: T=4 H=8
2326 self .setAv (0x81 )
2427 # set CTRL_REG1: PD=1 BDU=1 ODR=1
2528 self .setODR (0x85 )
2629
27- def calibrate_temperature (self ):
30+ def _read_temperature_calibration (self ):
2831 # HTS221 Temp Calibration registers
2932 self .T0_OUT = int16 (self ._read_reg16 (HTS221_T0_OUT_L ))
3033 self .T1_OUT = int16 (self ._read_reg16 (HTS221_T1_OUT_L ))
@@ -33,7 +36,7 @@ def calibrate_temperature(self):
3336 self .T0_degC = (self ._read_reg (HTS221_T0_degC_x8 ) + (t1 % 4 ) * 256 ) / 8
3437 self .T1_degC = (self ._read_reg (HTS221_T1_degC_x8 ) + ((t1 % 16 ) / 4 ) * 256 ) / 8
3538
36- def calibrate_humidity (self ):
39+ def _read_humidity_calibration (self ):
3740 # HTS221 Humi Calibration registers
3841 self .H0_OUT = self ._read_reg16 (HTS221_H0_T0_OUT_L )
3942 self .H1_OUT = self ._read_reg16 (HTS221_H1_T0_OUT_L )
@@ -112,9 +115,10 @@ def _ensure_data(self):
112115 def temperature (self ):
113116 self ._ensure_data ()
114117 t = self ._read_reg16 (HTS221_TEMP_OUT_L )
115- return self .T0_degC + (self .T1_degC - self .T0_degC ) * (t - self .T0_OUT ) / (
118+ factory = self .T0_degC + (self .T1_degC - self .T0_degC ) * (t - self .T0_OUT ) / (
116119 self .T1_OUT - self .T0_OUT
117120 )
121+ return self ._temp_gain * factory + self ._temp_offset
118122
119123 # calculate Humidity
120124 def humidity (self ):
@@ -132,11 +136,41 @@ def read(self):
132136 humidity = self .H0_rH + (self .H1_rH - self .H0_rH ) * (h - self .H0_OUT ) / (
133137 self .H1_OUT - self .H0_OUT
134138 )
135- temperature = self .T0_degC + (self .T1_degC - self .T0_degC ) * (t - self .T0_OUT ) / (
139+ factory = self .T0_degC + (self .T1_degC - self .T0_degC ) * (t - self .T0_OUT ) / (
136140 self .T1_OUT - self .T0_OUT
137141 )
142+ temperature = self ._temp_gain * factory + self ._temp_offset
138143 return humidity , temperature
139144
145+ # Temperature calibration
146+
147+ def set_temp_offset (self , offset_c ):
148+ """Set a temperature offset in °C (gain remains 1.0).
149+
150+ Args:
151+ offset_c: offset value in degrees Celsius.
152+ """
153+ self ._temp_gain = 1.0
154+ self ._temp_offset = float (offset_c )
155+
156+ def calibrate_temperature (self , ref_low , measured_low , ref_high , measured_high ):
157+ """Two-point calibration from reference measurements.
158+
159+ Computes gain and offset so that the sensor reading is adjusted
160+ to match reference values at two temperature points.
161+
162+ Args:
163+ ref_low: reference temperature at the low point (°C).
164+ measured_low: sensor reading at the low point (°C).
165+ ref_high: reference temperature at the high point (°C).
166+ measured_high: sensor reading at the high point (°C).
167+ """
168+ delta = float (measured_high - measured_low )
169+ if delta == 0.0 :
170+ raise ValueError ("measured_low and measured_high must differ" )
171+ self ._temp_gain = float (ref_high - ref_low ) / delta
172+ self ._temp_offset = float (ref_low ) - self ._temp_gain * float (measured_low )
173+
140174 def get (self ):
141175 h , t = self .read ()
142176 return [h , t ]
0 commit comments