Source code for SEEL.SENSORS.SHT21

from __future__ import print_function
from numpy import int16
import time

[docs]def connect(route,**args): return SHT21(route,**args)
[docs]class SHT21(): RESET = 0xFE TEMP_ADDRESS = 0xF3 HUMIDITY_ADDRESS = 0xF5 selected=0xF3 NUMPLOTS=1 PLOTNAMES = ['Data'] ADDRESS = 0x40 name = 'Humidity/Temperature' def __init__(self,I2C,**args): self.I2C=I2C self.ADDRESS = args.get('address',self.ADDRESS) self.name = 'Humidity/Temperature' ''' try: print ('switching baud to 400k') self.I2C.configI2C(400e3) except: print ('FAILED TO CHANGE BAUD RATE') ''' self.params={'selectParameter':['temperature','humidity']} self.init('')
[docs] def init(self,x): self.I2C.writeBulk(self.ADDRESS,[self.RESET]) #soft reset time.sleep(0.1)
[docs] def rawToTemp(self,vals): if vals: if len(vals): v = (vals[0]<<8)|(vals[1]&0xFC) #make integer & remove status bits v*=175.72; v/= (1<<16); v-=46.85 return [v] return False
[docs] def rawToRH(self,vals): if vals: if len(vals): v = (vals[0]<<8)|(vals[1]&0xFC) #make integer & remove status bits v*=125.; v/= (1<<16); v-=6 return [v] return False
@staticmethod def _calculate_checksum(data, number_of_bytes): """5.7 CRC Checksum using the polynomial given in the datasheet Credits: https://github.com/jaques/sht21_python/blob/master/sht21.py """ # CRC POLYNOMIAL = 0x131 # //P(x)=x^8+x^5+x^4+1 = 100110001 crc = 0 # calculates 8-Bit checksum with given polynomial for byteCtr in range(number_of_bytes): crc ^= (data[byteCtr]) for bit in range(8, 0, -1): if crc & 0x80: crc = (crc << 1) ^ POLYNOMIAL else: crc = (crc << 1) return crc
[docs] def selectParameter(self,param): if param=='temperature':self.selected=self.TEMP_ADDRESS elif param=='humidity':self.selected=self.HUMIDITY_ADDRESS
[docs] def getRaw(self): self.I2C.writeBulk(self.ADDRESS,[self.selected]) if self.selected==self.TEMP_ADDRESS:time.sleep(0.1) elif self.selected==self.HUMIDITY_ADDRESS:time.sleep(0.05) vals = self.I2C.simpleRead(self.ADDRESS,3) if vals: if self._calculate_checksum(vals,2)!=vals[2]: return False print (vals) if self.selected==self.TEMP_ADDRESS:return self.rawToTemp(vals) elif self.selected==self.HUMIDITY_ADDRESS:return self.rawToRH(vals)