首先需要先安装i2ctool和smbus
然后现在有了smbus2,上官网,如果pip install 装不上又不翻墙,就上官网上下源代码自己build。
代码简单如下,设置命令都用write_i2c_block_data(地址,命令高8位,命令低8位)
read_i2c_block_data(地址,0x00,读取长度一般是6)
STH30有两种模式,单次采样和循环采样模式。示例代码是循环采样模式。如果是单次采样,就是发一次采样命令,再读一次6byte的数据。也即一次write命令,一次read命令,所用命令如下图。
图1 单次采样模式命令
图2 循环采样模式命令
from smbus2 import SMBusWrapper #引入相关类
txtfile=open('mydb.txt','w')
with SMBusWrapper(1) as bus:#打开i2c
bus.write_i2c_block_data(0x44,0x23,[0x22])#我这个STH30的默认地址是0X44,本命令写入0X2322命令,意思是设置为每秒采样4次,精确水平是中等
time.sleep(0.016)#给STH30一点时间
bus.write_i2c_block_data(0x44,0xe0,[0x00])#开始采样
time.sleep(0.016)
mycount=16
while(mycount>0):
data=bus.read_i2c_block_data(0x44,0x00,6)#读取采样结果
temperature=data[0]*256+data[1]
celsius = -45 + (175 * temperature / 65535.0)
humidity = 100 * (data[3] * 256 + data[4]) / 65535.0
txtfile.write(str(celsius)+','+str(humidity)+'\n')
time.sleep(0.25)
mycount=mycount-1
bus.write_i2c_block_data(0x44,0x30,[0x93])#中止循环采样模式
time.sleep(0.016)
bus.write_i2c_block_data(0x44,0x30,[0xa2])#STH30软重启
time.sleep(0.016)
txtfile.close()