工业树莓派制造商-上海晶珩
直播中

jf_07365693

1年用户 379经验值
擅长:嵌入式技术 控制/MCU
私信 关注
[讨论]

【上海晶珩睿莓1开发板试用体验】Home Assistant 物联网温湿度计

aht10-print

【上海晶珩睿莓1开发板试用体验】Home Assistant 物联网温湿度计

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

项目介绍

  • 硬件连接:通过开发板 IIC 引脚定义,连接 AHT10 传感器;
  • 环境配置:安装 Python 工具库,包括 i2c-tools 和 smbus2 ;
  • AHT10 驱动:驱动 AHT10 传感器、温湿度数据打印;
  • MQTT 上传:联网并结合 MQTT 协议,实现温湿度数据的上传;
  • Home Assistant (HA) 测试:分别添加温度和湿度传感器卡片,实现远程物联网设计;
  • LabVIEW 上位机:自动捕获 JSON 消息,采集、分析和保存数据。

硬件连接

睿莓 1 40-Pin AHT10
3 (SDA) SDA
5 (SCL) SCL
9 (GND) GND
3.3V VIN

实物连接

aht10-connect.jpg

环境配置

设备已支持两路 i2c 总线,终端执行 ls /dev/i2c* 查询 IIC 总线接口

/dev/i2c-0    /dev/i2c-1

若未显示,则执行 sudo raspi-config 进入图形配置界面使能 IIC 总线,依次选择 Interfacing Options - I2C - Enable 并退出保存;

执行 ls /dev/i2c* 重新验证。

安装 i2c-tools

安装 i2c-tools (系统默认已安装)

sudo apt-get update
sudo apt-get install i2c-tools python3-smbus

根据 IIC 总线的引脚对应关系,连接 AHT10 传感器与开发板

i2c-device-pin.jpg

使用 i2cdetect 查看 i2c 总线上的设备

i2cdetect -y 0  #查看 i2c-0 总线上的设备
i2cdetect -y 1  #查看 i2c-1 总线上的设备

这里将 AHT10 接入 i2c-1 总线,因此执行 i2cdetect -y 1 显示 0x38

i2cdetect.jpg

安装 smbus2

系统管理总线(System Management Bus,SMBus)是一种基于 IIC(Inter-Integrated Circuit)通信协议的子集,由 Intel 和 Duracell 共同制定,主要用于移动 PC 和桌面 PC 系统中的低速率通讯。

使用 pip 安装 smbus2 ,终端执行安装指令

pip install smbus2

等待安装完成即可。

pip-install-smbus2.jpg

工程代码

代码包括 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_print.jpg

动态效果见顶部视频。

MQTT 上传

在实现 AHT10 温湿度数据采集打印的基础上,进一步结合 MQTT 协议,实现温湿度数据的云端上传。

流程图

flowchart_aht10_mqtt.jpg

代码

终端执行 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 数据上传状态等

aht10-mqtt-print.jpg

测试

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

  • 新建连接
  • 配置 MQTT Broker 信息,如 ip 地址、MQTT 账户密码等 -
  • 添加订阅主题,实现数据监听;

mqttx-aht10.jpg

数据每 2 秒更新一次。

Home Assistant 测试

使用 Docker 部署 HA 平台,并添加 MQTT 集成和传感器,实现 ADC 温度计和电压表的物联网设计。

  • 进入 HA 界面,依次打开设置 - 设备与服务 - 添加集成 - MQTT;
  • 输入 MQTT 配置信息,包括 ip 地址、MQTT 账户密码等;
  • 打开 HA 目录下的 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 概览界面添加温度和电压表传感器卡片即可。

ha_aht10.jpg

动态效果见顶部视频。

HA 部署方案详见:Home Assistant .

LabVIEW 上位机

为了实现 AHT10 温湿度数据的自动化采集,设计了 LabVIEW 上位机,通过 MQTT 协议,自动捕获信息并提取数据,获得演化曲线以及数据保存等。

前面板

前面板的设计主要包括发布和订阅两部分,订阅部分包括控制按钮、主题、保存路径等参数配置、数据指针显示、演化曲线等。

aht10-mqtt-labview-front-panel.jpg

程序面板

aht10-mqtt-labview-block-panel.jpg

使用方法

  1. 填写 MQTT 连接信息,包括 IP 地址、用户名、密码、订阅主题等;
  2. 运行程序,点击 Connect 连接到 EMQX MQTT Broker 服务器,当 subscribe Success 绿灯亮起,表明订阅初始化成功;
  3. 点击 Subscribe 按钮,此时 RX Value 接收到 json 消息,并成功获得温湿度数据;
  4. 采集完成后,点击 Quit 按钮结束进程。

需安装 VIPM JSONtext 软件库,实现 JSON 条目查找和数字提取。

数据保存

数据采集完成后,结束程序并自动保存数据至指定文件夹,包括日期、时间、温度值、湿度值。

labview-aht10-data-save.jpg

动态效果见底部视频。

总结

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

aht10-ha-labview

回帖(1)

无垠的广袤

2025-8-19 16:22:58
哇,睿莓1资源挺丰富啊,用来实现物联网应用开发再合适不过啦~
举报

更多回帖

发帖
×
20
完善资料,
赚取积分