树莓派连接STH30获取温度湿度

博客介绍了i2ctool和smbus的安装,若pip install无法安装smbus2且不翻墙,可从官网下载源代码自行build。还给出了相关代码,如设置命令和读取数据的函数。同时介绍了STH30的单次采样和循环采样模式,以及对应模式的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先需要先安装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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值