【Arduino UNO Q】 物联网IoT应用设计:SoC 温度与智能家居

【Arduino UNO Q】 物联网IoT应用设计:SoC 温度与智能家居

本文介绍了 Arduino UNO Q 开发板通过 MQTT 协议上传 SoC 芯片温度至 Home Assistant 智能家居平台的项目设计。

项目介绍

Arduino UNO Q 开发板结合 MQTT 与 Home Assistant 实现物联网 SoC 温度数据采集和远程监控。

  • 准备工作:硬件连接、环境搭建、安装软件包等;
  • SoC 温度:实时读取 Debian 系统自带的温度记录并终端打印;
  • MQTT:结合 MQTT 协议构建 JSON 温度报文,实现 EMQX 平台的转发与数据读取;
  • Home Assistant:报文添加 HA 标签,使 SoC 温度自动添加至 HA 平台,实现实时温度监控与历史记录查询等。

准备工作

包括硬件连接、系统安装、软件更新等。

详见:Arduino UNO Q 介绍、环境搭建、工程测试 .

硬件连接

这里采用 SSH 远程控制,使用 Type-C 数据线供电并 WiFi 联网即可。

软件更新

更新软件包

bash 复制代码
sudo apt update
sudo apt upgrade

软件包安装

安装 paho-mqtt 软件包,用以简化 MQTT 通信指令;

bash 复制代码
sudo apt install python3-paho-mqtt

SoC 温度

查询并获取 SoC 温度文件路径,终端打印实时温度数据。

传感器路径

板载系统为 Debian 13,温度传感器挂在 hwmon (hardware monitoring) 子系统。

  • 终端执行如下指令,获取 hwmon 所在路径
bash 复制代码
for f in /sys/class/hwmon/hwmon*/name; do
    echo "$f -> $(cat $f)"
done

回复 /sys/class/hwmon/hwmon0/name -> mapss_thermal 即为 SoC 主域温度;

对应文件路径 /sys/class/hwmon/hwmon0/temp1_input

若需要监控其他区域的温度,将路径中的 hwmon0 改为对应序号即可。

代码

python 复制代码
#!/usr/bin/env python3
import time

PATH = '/sys/class/hwmon/hwmon0/temp1_input'

try:
    while True:
        with open(PATH) as f:
            print(f'SoC 温度: {int(f.read()) / 1000:.1f} °C')
        time.sleep(1)
except KeyboardInterrupt:
    pass

保存代码。

效果

终端执行 python3 soc_temp.py 运行程序,终端打印实时温度数据

MQTT

MQTT(Message Queuing Telemetry Transport, MQTT)即消息队列遥测传输,是一种基于发布/订阅范式的轻量级消息协议。

广泛应用于物联网(IoT)、机器与机器(M2M)通信、智能家居、医疗设备等领域。

这里将 SoC 温度数据通过 MQTT 协议上传至云端 MQTT Broker 服务器 EMQX .

代码

终端执行 touch soc_temp_mqtt.py 新建程序并添加如下代码

python 复制代码
#!/usr/bin/env python3
import paho.mqtt.client as mqtt
import time, json, subprocess

broker   = "192.168.31.116"
port     = 1883
topic    = "unoq/soc/temp"
username = "xxx"      # EMQX user name
password = "xxx"      # password
TEMP_FILE = "/sys/class/hwmon/hwmon0/temp1_input"

client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(username, password)   # MQTT Broker Client
client.connect(broker, port, keepalive=60)

def get_soc_temp():
    with open(TEMP_FILE, "r") as f:
        millideg = int(f.read().strip())
    return round(millideg / 1000.0, 1)

try:
    while True:
        temp = get_soc_temp()
        payload = json.dumps({"temp": temp, "unit": "℃", "ts": int(time.time())})
        client.publish(topic, payload, qos=0)
        print(payload)
        time.sleep(2)
except KeyboardInterrupt:
    pass

保存代码。

效果

终端执行 python3 soc_temp_mqtt.py 运行程序,终端打印 MQTT 报文

消息订阅

浏览器访问 http://192.168.31.116:18083 进入 EMQX 控制终端;

左侧工具栏 - 诊断工具 - WebSocket 客户端

  • 填写 ip 地址、端口、用户名、密码,点击 连接 按钮;

  • 订阅 面板中填写主题 unoq/soc/temp

  • 在下方消息框立刻收到 SoC 温度消息;

Home Assistant

Home Assistant 是一个开源的智能家居平台,旨在通过集成各种智能设备和服务,提供一个统一的、可自定义的家庭自动化解决方案。它允许用户监控、控制和自动化家中的各种设备,包括灯光、温度、安全系统、多媒体设备等。

这里将 SoC 温度数据通过 MQTT 协议上传至 Home Assistant 平台,包括流程图、代码、效果演示等。

流程图

开始
初始化
MQTT Broker
连接EMQX
触发HA配置
主循环
读取温度
构建JSON报文
发布主题
终端打印
延时

代码

终端执行 touch soc_temp_mqtt_ha.py 新建程序并添加如下代码

python 复制代码
#!/usr/bin/env python3
import time, json
import paho.mqtt.client as mqtt

# ----------- parameters -----------
MQTT_HOST = "192.168.31.116"
MQTT_PORT = 1883
MQTT_USER = "xxx"
MQTT_PASS = "xxx"
CLIENT_ID = "unoq_soc_temp"
DISCOVERY_PREFIX = "homeassistant"
NODE_ID = "UNO_Q"
OBJECT_ID = "soc_temp"
TEMP_PATH = "/sys/class/hwmon/hwmon0/temp1_input"
SEND_INTERVAL = 2
# -----------------------------------

STATE_TOPIC = f"{DISCOVERY_PREFIX}/sensor/{NODE_ID}/{OBJECT_ID}/state"
CONFIG_TOPIC = f"{DISCOVERY_PREFIX}/sensor/{NODE_ID}/{OBJECT_ID}/config"

def read_temp():
    with open(TEMP_PATH) as f:
        return round(int(f.read()) / 1000, 1)

def on_connect(cli, *_):
    config = {
        "name": "SoC Temp",
        "state_topic": STATE_TOPIC,
        "unit_of_measurement": "°C",
        "device_class": "temperature",
        "value_template": "{{ value_json.temperature }}",
        "unique_id": f"{NODE_ID}_{OBJECT_ID}",
        "device": {
            "identifiers": [NODE_ID],
            "name": "Arduino UNO Q",
            "model": "Arduino UNO Q",
            "manufacturer": "Qualcomm"
        }
    }
    cli.publish(CONFIG_TOPIC, json.dumps(config), retain=True)
    print("MQTT Connected")

def main():
    client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=CLIENT_ID)
    client.username_pw_set(MQTT_USER, MQTT_PASS)
    client.on_connect = on_connect
    client.connect(MQTT_HOST, MQTT_PORT, keepalive=60)
    client.loop_start()

    while True:
        try:
            temp = read_temp()
            client.publish(STATE_TOPIC, json.dumps({"temperature": temp}), qos=1)
            print(f"Send temperature: {temp} °C")
        except Exception as e:
            print("Read/send failed:", e)
        time.sleep(SEND_INTERVAL)

if __name__ == "__main__":
    main()

保存代码。

效果

终端执行 python3 soc_temp_mqtt_ha.py 运行程序,终端打印发送的实时温度数据

  • 进入 HA 主页,刷新概览界面,可自动识别到 MQTT 传感器设备
  • 点击卡片进入详情,可查看历史数据
  • 进入 设置 - 设备与服务 - 打开上方的 设备 标签页,点击目标 Arduino UNO Q 设备,可查看详细信息

总结

本文介绍了 Arduino UNO Q 开发板通过 MQTT 协议上传 SoC 芯片温度至 Home Assistant 智能家居平台的项目设计,为相关产品在物联网 IoT 领域的快速开发和应用设计提供了参考。

相关推荐
freepopo2 小时前
天津商业空间设计:本地团队的美学落地方案 [特殊字符]
大数据·人工智能·python
tudficdew2 小时前
使用Python操作文件和目录(os, pathlib, shutil)
jvm·数据库·python
浒畔居2 小时前
工具、测试与部署
jvm·数据库·python
云和数据.ChenGuang2 小时前
python对接mysql和模型类的故障
数据库·python·mysql·oracle·conda·virtualenv
weixin_433179332 小时前
Python -- 文件和异常
python
数琨创享TQMS质量数智化2 小时前
国有大型交通运输设备制造集团QMS质量管理平台案例
大数据·人工智能·物联网
2301_822382762 小时前
开发一个简单的Python计算器
jvm·数据库·python
ValhallaCoder2 小时前
hot100-子串
数据结构·python·算法
lambert.wang2 小时前
当使用 uv 下载 Python 解释器时出现异常,通常是因为网络连接问题导致无法从 GitHub 下载安装包
python·github·uv