diff --git a/sgptest.py b/sgptest.py new file mode 100644 index 0000000..169a8ff --- /dev/null +++ b/sgptest.py @@ -0,0 +1,42 @@ +import smbus2 +from smbus2 import SMBusWrapper, SMBus, i2c_msg +from collections import namedtuple +from functools import partial +#import Adafruit_PureIO.smbus as adabus +from time import sleep + +DEVICE_BUS = 1 +DEVICE_ADDR = 0x58 +#print bus.write_byte_datadata(DEVICE_ADDR, 0x00, 0x01) +#self._i2c_read_words_from_cmd([0x36, 0x82], 0.01, 3) + +Sgp30Cmd = namedtuple("Sgp30Cmd",["commands","replylen"]) +GET_SERIAL=Sgp30Cmd([0x36, 0x82],6) +GET_FEATURES=Sgp30Cmd([0x20, 0x2f],2) +IAQ_INIT=Sgp30Cmd([0x20, 0x03],0) +IAQ_MEASURE=Sgp30Cmd([0x20, 0x08],6) +IAQ_SELFTEST=Sgp30Cmd([0x20, 0x32],3) + +def read_write(cmd,bus,addr=DEVICE_ADDR,sleep_time=0): + bus.i2c_rdwr(i2c_msg.write(addr,cmd.commands)) + if cmd.replylen >0 : + b=i2c_msg.read(addr,cmd.replylen) + sleep(sleep_time) + bus.i2c_rdwr(b) + r=list(b) + crc=r[2::3] + answer = [i<<8 | j for i,j in zip(r[0::3],r[1::3])] + return answer + +with SMBusWrapper(1) as bus: + rw=partial(read_write,bus=bus) + print(rw(GET_FEATURES)) + print(rw(GET_SERIAL)) + print(rw(IAQ_INIT)) + #print(rw(IAQ_SELFTEST,sleep_time=.1)) + for i in range(600): + print( "CO_2eq: %d ppm, TVOC: %d"%tuple( rw(IAQ_MEASURE,sleep_time=.1))) + sleep(2) + + +bus.close()