2618 views|0 replies

1453

Posts

18

Resources
The OP
 

PyboardCN V2 Fun--Temperature and Humidity Sensor THU21D [Copy link]

 
This post was last edited by sacq on 2018-8-5 20:12 HTU21D: A temperature and humidity sensor with an I2C interface, which was obtained by the manufacturer during the activities of this forum. The package is extremely small and it is very difficult for individuals to solder and fix it. Connection: 4 pins, power supply 3.3, ground, DATA, SCK I found several driver codes and used this one (HTU21D.PY): import pyb class HTU21D: i2c = None # HTU21D Address address = 0x40 # Commands TRIGGER_TEMP_MEASURE_HOLD = 0xE3 TRIGGER_HUMD_MEASURE_HOLD = 0xE5 READ_USER_REG = 0xE7 # Constructor def __init__(self): self.i2c = pyb.I2C(1, pyb.I2C.MASTER) def readUserRegister(self): #Read the user register byte return self.i2c.mem_read(1,self.address,self.READ_USER_REG) def readTemperatureData(self): #Read 3 temperature bytes from the sensor # value[0], value[1]: Raw temperature data # value[2]: CRC value = self.i2c.mem_read(3,self.address,self.TRIGGER_TEMP_MEASURE_HOLD) if not self.crc8check(value): return -255 rawTempData = ( value[0] << 8 ) + value[1] rawTempData = rawTempData & 0xFFFC; # Clear the status bits # Calculate the actual temperature actualTemp = -46.85 + (17 5.72 * rawTempData / 65536) return actualTemp def readHumidityData(self): #Read 3 humidity bytes from the sensor # value[0], value[1]: Raw relative humidity data # value[2]: CRC value = self.i2c.mem_read(3,self.address,self.TRIGGER_HUMD_MEASURE_HOLD) if not self.crc8check(value): return -255 rawRHData = ( value[0] << 8 ) + value[1] rawRHData = rawRHData & 0xFFFC; # Clear the status bits # Calculate the actual RH actualRH = -6 + (125.0 * rawRHData / 65536) return actualRH def crc8check(self, value): #Calulate the CRC8 for the data received # from https://github. com/sparkfun/HTU21D_Breakout remainder = ( ( value[0] << 8 ) + value[1] ) << 8 remainder |= value[2] # POLYNOMIAL = 0x0131 = x^8 + x^5 + x^4 + 1 # divsor = 0x988000 is polynomial shifted to farthest left of three bytes divsor = 0x988000 for i in range(0, 16): if( remainder & 1 << (23 - i) ): remainder ^= divsor divsor = divsor >> 1 if remainder == 0:return True else: return False # vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 Test code: import time import HTU21D htu=HTU21D.HTU21D() while True: time.sleep(0.5) print("T:%2.2f, H:%2.2f"%(htu.readTemperatureData(),htu.readHumidityData())) # readTemperatureData(self) Effect: HTU21D.zip (1.06 KB, downloads: 4) This content is original by EEWORLD forum user sacq. If you need to reprint or use it for commercial purposes, you must obtain the author's consent and indicate the source


Personal signaturehttp://weibo.com/u/1391449055
 
 

Find a datasheet?

EEWorld Datasheet Technical Support

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号
快速回复 返回顶部 Return list