本文介绍了上海晶珩睿莓 1 开发板通过 AHT10 传感器实现环境温湿度采集,结合 WiFi 和 MQTT 协议实现数据实时上传至 Home Assistant 平台,实现物联网温湿度计,并进一步结合 LabVIEW 上位机实现演化曲线分析及数据采集的项目设计。
| 睿莓 1 40-Pin | AHT10 |
|---|---|
| 3 (SDA) | SDA |
| 5 (SCL) | SCL |
| 9 (GND) | GND |
| 3.3V | VIN |
实物连接

设备已支持两路 i2c 总线,终端执行 ls /dev/i2c* 查询 IIC 总线接口
/dev/i2c-0 /dev/i2c-1
若未显示,则执行 sudo raspi-config 进入图形配置界面使能 IIC 总线,依次选择 Interfacing Options - I2C - Enable 并退出保存;
执行 ls /dev/i2c* 重新验证。
安装 i2c-tools (系统默认已安装)
sudo apt-get update
sudo apt-get install i2c-tools python3-smbus
根据 IIC 总线的引脚对应关系,连接 AHT10 传感器与开发板

使用 i2cdetect 查看 i2c 总线上的设备
i2cdetect -y 0 #查看 i2c-0 总线上的设备
i2cdetect -y 1 #查看 i2c-1 总线上的设备
这里将 AHT10 接入 i2c-1 总线,因此执行 i2cdetect -y 1 显示 0x38

系统管理总线(System Management Bus,SMBus)是一种基于 IIC(Inter-Integrated Circuit)通信协议的子集,由 Intel 和 Duracell 共同制定,主要用于移动 PC 和桌面 PC 系统中的低速率通讯。
使用 pip 安装 smbus2 ,终端执行安装指令
pip install smbus2
等待安装完成即可。

代码包括 AHT10 传感器驱动代码模块、终端打印温湿度的读取模块。
终端执行 touch aht10.py 新建 AHT10 传感器驱动文件,并添加如下代码
import smbus2
import time
class AHT10:
def __init__(self, bus=1, address=0x38):
self.bus = smbus2.SMBus(bus)
self.address = address
self._initialize()
def _initialize(self):
# 发送初始化命令(0xE1 + 0x08, 0x00)
self.bus.write_i2c_block_data(self.address, 0xE1, [0x08, 0x00])
time.sleep(0.5) # 校准等待
def read_data(self):
# 触发测量(0xAC + 0x33, 0x00)
self.bus.write_i2c_block_data(self.address, 0xAC, [0x33, 0x00])
time.sleep(0.1)
# 读取6字节数据
data = self.bus.read_i2c_block_data(self.address, 0x00, 6)
# 解析温湿度(参考AHT10数据手册)
humidity = ((data[1] << 12) | (data[2] << 4) | (data[3] >> 4)) * 100 / 0x100000
temperature = (((data[3] & 0x0F) << 16) | (data[4] << 8) | data[5]) * 200 / 0x100000 - 50
return round(temperature, 1), round(humidity, 1)
保存代码,退出编辑模式;
终端执行 touch aht10_test.py 新建传感器数据读取文件,并添加如下代码
import smbus2
import time
import sys
from aht10 import AHT10
try:
sensor = AHT10()
print("开始读取AHT10传感器数据,按 Ctrl+C 终止...")
while True:
temp, humi = sensor.read_data()
print(f"温度: {temp}°C, 湿度: {humi}%", end='\r') # 使用\r覆盖上一行
time.sleep(1) # 每秒更新一次
except KeyboardInterrupt:
print("\n检测到用户中断,程序已终止!")
except Exception as e:
print(f"发生错误: {e}", file=sys.stderr)
finally:
print("感谢使用AHT10传感器监测程序。")
保存后执行 python3 aht10_test.py 即可。
终端打印实时温湿度数据,并实现单行覆盖更新

动态效果见顶部视频。
在实现 AHT10 温湿度数据采集打印的基础上,进一步结合 MQTT 协议,实现温湿度数据的云端上传。

终端执行 touch aht10_mqtt.py 新建文件,并添加如下代码
import smbus2
import time
import json
import paho.mqtt.client as mqtt
from datetime import datetime
from aht10 import AHT10
# ===== MQTT配置 =====
MQTT_BROKER = "192.168.1.121" # MQTT服务器地址
MQTT_PORT = 1883
MQTT_TOPIC = "rm/sensor/aht10"
MQTT_USER = "xxx" # MQTT用户名
MQTT_PASS = "xxx" # MQTT密码
def on_connect(client, userdata, flags, rc):
print(f"MQTT连接结果: {mqtt.connack_string(rc)}")
# ===== 主程序 =====
def main():
# 初始化MQTT客户端
client = mqtt.Client()
client.username_pw_set(MQTT_USER, MQTT_PASS)
client.on_connect = on_connect
try:
# 连接MQTT
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.loop_start()
# 初始化传感器
sensor = AHT10()
print("AHT10传感器监测已启动,按Ctrl+C终止...")
while True:
temp, humi = sensor.read_data()
# 构建JSON数据(含时间戳)
payload = {
"timestamp": datetime.now().isoformat(),
"temperature": temp,
"humidity": humi,
"sensor": "AHT10",
"unit": {
"temperature": "°C",
"humidity": "%"
}
}
# 发布数据
client.publish(
topic=MQTT_TOPIC,
payload=json.dumps(payload),
qos=1
)
print(f"已发送: {payload}")
time.sleep(2) # 2秒间隔
except KeyboardInterrupt:
print("\n用户终止程序")
except Exception as e:
print(f"错误: {e}")
finally:
client.disconnect()
client.loop_stop()
print("MQTT连接已关闭")
if __name__ == "__main__":
main()
保存代码,终端执行 python3 aht10_mqtt.py 运行程序。
终端打印 MQTT 服务器连接、JSON 数据上传状态等

使用 MQTTX 软件测试数据接收情况;

数据每 2 秒更新一次。
使用 Docker 部署 HA 平台,并添加 MQTT 集成和传感器,实现 ADC 温度计和电压表的物联网设计。
config/configuration.yaml 文件,添加如下代码mqtt:
sensor:
- name: "Temperature"
state_topic: "rm/sensor/aht10"
suggested_display_precision: 1
unit_of_measurement: "°C"
value_template: "{{ value_json.temperature }}"
- name: "Humidity"
state_topic: "rm/sensor/aht10"
suggested_display_precision: 1
unit_of_measurement: "%"
value_template: "{{ value_json.humidity }}"

动态效果见顶部视频。
HA 部署方案详见:Home Assistant .
为了实现 AHT10 温湿度数据的自动化采集,设计了 LabVIEW 上位机,通过 MQTT 协议,自动捕获信息并提取数据,获得演化曲线以及数据保存等。
前面板的设计主要包括发布和订阅两部分,订阅部分包括控制按钮、主题、保存路径等参数配置、数据指针显示、演化曲线等。


Connect 连接到 EMQX MQTT Broker 服务器,当 subscribe Success 绿灯亮起,表明订阅初始化成功;Subscribe 按钮,此时 RX Value 接收到 json 消息,并成功获得温湿度数据;Quit 按钮结束进程。需安装 VIPM JSONtext 软件库,实现 JSON 条目查找和数字提取。
数据采集完成后,结束程序并自动保存数据至指定文件夹,包括日期、时间、温度值、湿度值。

动态效果见底部视频。
本文介绍了上海晶珩睿莓 1 开发板通过 AHT10 传感器实现环境温湿度采集,结合 WiFi 和 MQTT 协议实现数据实时上传至 Home Assistant 平台,实现物联网温湿度计,并进一步结合 LabVIEW 上位机实现演化曲线分析及数据采集的项目设计,为该开发板在物联网、工业和科研等领域的开发和应用提供了参考。
举报
更多回帖