Htu21d.py: Difference between revisions
From Federal Burro of Information
Jump to navigationJump to search
(Created page with "<pre. #!/usr/bin/python import struct, array, time, io, fcntl I2C_SLAVE=0x0703 HTU21D_ADDR = 0x40 CMD_READ_TEMP_HOLD = "\xE3" CMD_READ_HUM_HOLD = "\xE5" CMD_READ_TEMP_NOHOLD...") |
No edit summary |
||
(12 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<pre | |||
== Script == | |||
run this on your raspberry pi. | |||
<pre> | |||
#!/usr/bin/python | #!/usr/bin/python | ||
# From: https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=76688 | |||
import struct, array, time, io, fcntl | import struct, array, time, io, fcntl | ||
Line 99: | Line 105: | ||
</pre> | </pre> | ||
[[Category | Also see [[Arduino Projects of note/datalogger sdcard]] | ||
gnuplot stuff: | |||
http://www.kleerekoper.co.uk/2014/05/how-to-create-heatmap-in-gnuplot.html | |||
== Take 2 == | |||
use i2c libs | |||
use smbus libs. | |||
https://www.instructables.com/id/Raspberry-Pi-I2C-Python/ | |||
https://pypi.org/project/smbus2/ | |||
https://learn.sparkfun.com/tutorials/htu21d-humidity-sensor-hookup-guide/all | |||
great project: https://github.com/rieder91/pi-co2 | |||
idea / plan: | |||
make a service that exports the data via /metric web service, then tell prometheus to eat it . ha ha ! I did that-> https://github.com/drthornt/htu21d-exporter | |||
[[Category:Script]] |
Latest revision as of 20:41, 10 February 2023
Script
run this on your raspberry pi.
#!/usr/bin/python # From: https://www.raspberrypi.org/forums/viewtopic.php?f=44&t=76688 import struct, array, time, io, fcntl I2C_SLAVE=0x0703 HTU21D_ADDR = 0x40 CMD_READ_TEMP_HOLD = "\xE3" CMD_READ_HUM_HOLD = "\xE5" CMD_READ_TEMP_NOHOLD = "\xF3" CMD_READ_HUM_NOHOLD = "\xF5" CMD_WRITE_USER_REG = "\xE6" CMD_READ_USER_REG = "\xE7" CMD_SOFT_RESET= "\xFE" class i2c(object): def __init__(self, device, bus): self.fr = io.open("/dev/i2c-"+str(bus), "rb", buffering=0) self.fw = io.open("/dev/i2c-"+str(bus), "wb", buffering=0) # set device address fcntl.ioctl(self.fr, I2C_SLAVE, device) fcntl.ioctl(self.fw, I2C_SLAVE, device) def write(self, bytes): self.fw.write(bytes) def read(self, bytes): return self.fr.read(bytes) def close(self): self.fw.close() self.fr.close() class HTU21D(object): def __init__(self): self.dev = i2c(HTU21D_ADDR, 1) #HTU21D 0x40, bus 1 self.dev.write(CMD_SOFT_RESET) #soft reset time.sleep(.1) def ctemp(self, sensorTemp): tSensorTemp = sensorTemp / 65536.0 return -46.85 + (175.72 * tSensorTemp) def chumid(self, sensorHumid): tSensorHumid = sensorHumid / 65536.0 return -6.0 + (125.0 * tSensorHumid) def crc8check(self, value): # Ported from Sparkfun Arduino HTU21D Library: 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 the 0x0131 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 def read_tmperature(self): self.dev.write(CMD_READ_TEMP_NOHOLD) #measure temp time.sleep(.1) data = self.dev.read(3) buf = array.array('B', data) if self.crc8check(buf): temp = (buf[0] << 8 | buf [1]) & 0xFFFC return self.ctemp(temp) else: return -255 def read_humidity(self): self.dev.write(CMD_READ_HUM_NOHOLD) #measure humidity time.sleep(.1) data = self.dev.read(3) buf = array.array('B', data) if self.crc8check(buf): humid = (buf[0] << 8 | buf [1]) & 0xFFFC return self.chumid(humid) else: return -255 if __name__ == "__main__": obj = HTU21D() print "Temp:", obj.read_tmperature(), "C" print "Humid:", obj.read_humidity(), "% rH"
Also see Arduino Projects of note/datalogger sdcard
gnuplot stuff:
http://www.kleerekoper.co.uk/2014/05/how-to-create-heatmap-in-gnuplot.html
Take 2
use i2c libs
use smbus libs.
https://www.instructables.com/id/Raspberry-Pi-I2C-Python/
https://pypi.org/project/smbus2/
https://learn.sparkfun.com/tutorials/htu21d-humidity-sensor-hookup-guide/all
great project: https://github.com/rieder91/pi-co2
idea / plan:
make a service that exports the data via /metric web service, then tell prometheus to eat it . ha ha ! I did that-> https://github.com/drthornt/htu21d-exporter