【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 领域的快速开发和应用设计提供了参考。