Jetson传感器数据读取——温湿度传感器SHT30

204 阅读1分钟

Jetson项目用到多个传感器,这里记录一个温湿度传感器SHT30.

初识温湿度传感器

如下图所示,SHT30温湿度传感器。

image.png

这是一片基于I2C通讯的温湿度传感器。

通讯协议

SCL与SDA需要与Jetson对应的引脚相连,可参考下图。

image.png

使用Jetson 40pin的3、5这一对I2C物理引脚(SDA、SCL)。

硬件连接

Jetson与SHT30物理连接参考下图。

image.png

依赖库准备

在正式编码前,记得装一下Adafruit的相应的库。

pip install adafruit-circuitpython-sht31d

adafruit的库会自动侦测0x44地址,即SHT30的I2C总线上的地址。

代码实现

由于使用I2C设备时,可能有异常导致I2C设备访问异常,使用软复位的方式解锁I2C总线。

def soft_reset(i2c):
    try:
        i2c.try_lock()
        i2c.writeto(0x44, bytes([0x30, 0xA2]))  # 发送软复位命令
    except Exception as e:
        print("Reset error:", e)
    finally:
        i2c.unlock()
        time.sleep(0.5)  # 等待复位完成

否则,第二次使用I2C设备时,很可能就找不到相应的地址了。

完整实现如下:

import adafruit_sht31d
import board
import busio
import time

def soft_reset(i2c):
    try:
        i2c.try_lock()
        i2c.writeto(0x44, bytes([0x30, 0xA2]))  # 发送软复位命令
    except Exception as e:
        print("Reset error:", e)
    finally:
        i2c.unlock()
        time.sleep(0.5)  # 等待复位完成

def read_sensor_data():
    try:
        i2c = busio.I2C(board.SCL, board.SDA)
        soft_reset(i2c)
        sensor = adafruit_sht31d.SHT31D(i2c)
        temperature = sensor.temperature
        humidity = sensor.relative_humidity
        print(f"温湿度: {temperature:.2f} °C | {humidity:.2f} %")
    except Exception as e:
        print("Read error:", e)
    finally:
        if 'i2c' in locals():
            i2c.deinit()  # 确保释放I2C资源

if __name__ == "__main__":
    while True:
        read_sensor_data()

效果展示

程序执行效果如下:

image.png

温度湿度一目了然。