8000 drivers/hts221: Add HTS221 humidity sensor driver. · micropython/micropython@fc6d989 · GitHub
[go: up one dir, main page]

Skip to content

Commit fc6d989

Browse files
iabdalkaderdpgeorge
authored andcommitted
drivers/hts221: Add HTS221 humidity sensor driver.
1 parent 07cae91 commit fc6d989

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed

drivers/hts221/hts221.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
"""
2+
The MIT License (MIT)
3+
4+
Copyright (c) 2013-2022 Ibrahim Abdelkader <iabdalkader@openmv.io>
5+
Copyright (c) 2013-2022 Kwabena W. Agyeman <kwagyeman@openmv.io>
6+
7+
Permission is hereby granted, free of charge, to any person obtaining a copy
8+
of this software and associated documentation files (the "Software"), to deal
9+
in the Software without restriction, including without limitation the rights
10+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
copies of the Software, and to permit persons to whom the Software is
12+
furnished to do so, subject to the following conditions:
13+
14+
The above copyright notice and this permission notice shall be included in
15+
all copies or substantial portions of the Software.
16+
17+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23+
THE SOFTWARE.
24+
25+
HTS221 driver driver for MicroPython.
26+
Original source: https://github.com/ControlEverythingCommunity/HTS221/blob/master/Python/HTS221.py
27+
28+
Example usage:
29+
30+
import time
31+
import hts221
32+
from machine import Pin, I2C
33+
34+
bus = I2C(1, scl=Pin(15), sda=Pin(14))
35+
hts = hts221.HTS221(bus)
36+
37+
while (True):
38+
rH = hts.humidity()
39+
temp = hts.temperature()
40+
print ("rH: %.2f%% T: %.2fC" %(rH, temp))
41+
time.sleep_ms(100)
42+
"""
43+
44+
import struct
45+
46+
47+
class HTS221:
48+
def __init__(self, i2c, data_rate=1, address=0x5F):
49+
self.bus = i2c
50+
self.odr = data_rate
51+
self.slv_addr = address
52+
53+
# Set configuration register
54+
# Humidity and temperature average configuration
55+
self.bus.writeto_mem(self.slv_addr, 0x10, b"\x1B")
56+
57+
# Set control register
58+
# PD | BDU | ODR
59+
cfg = 0x80 | 0x04 | (self.odr & 0x3)
60+
self.bus.writeto_mem(self.slv_addr, 0x20, bytes([cfg]))
61+
62+
# Read Calibration values from non-volatile memory of the device
63+
# Humidity Calibration values
64+
self.H0 = self._read_reg(0x30, 1) / 2
65+
self.H1 = self._read_reg(0x31, 1) / 2
66+
self.H2 = self._read_reg(0x36, 2)
67+
self.H3 = self._read_reg(0x3A, 2)
68+
69+
# Temperature Calibration values
70+
raw = self._read_reg(0x35, 1)
71+
self.T0 = ((raw & 0x03) * 256) + self._read_reg(0x32, 1)
72+
self.T1 = ((raw & 0x0C) * 64) + self._read_reg(0x33, 1)
73+
self.T2 = self._read_reg(0x3C, 2)
74+
self.T3 = self._read_reg(0x3E, 2)
75+
76+
def _read_reg(self, reg_addr, size):
77+
fmt = "B" if size == 1 else "H"
78+
reg_addr = reg_addr if size == 1 else reg_addr | 0x80
79+
return struct.unpack(fmt, self.bus.readfrom_mem(self.slv_addr, reg_addr, size))[0]
80+
81+
def humidity(self):
82+
rH = self._read_reg(0x28, 2)
83+
return (self.H1 - self.H0) * (rH - self.H2) / (self.H3 - self.H2) + self.H0
84+
85+
def temperature(self):
86+
temp = self._read_reg(0x2A, 2)
87+
if temp > 32767:
88+
temp -= 65536
89+
return ((self.T1 - self.T0) / 8.0) * (temp - self.T2) / (self.T3 - self.T2) + (
90+
self.T0 / 8.0
91+
)

0 commit comments

Comments
 (0)
0