本文介绍了 DFRobot FireBeetle 2 ESP32 P4 开发套件通过 ADC 采集温度数据,并结合 MQTT 协议和无线 WiFi 模块实现温度上传至 Home Assistant 平台,实现物联网远程温度计的项目设计。
包括开发环境搭建、硬件连接、工程测试、流程图、代码、MQTTX 测试、HA 测试、运行效果展示等。
项目介绍
环境搭建:Docker、EMQX、HA 部署、MQTT 配置;
工程测试:流程图、MicroPython 代码、MQTTX 通信测试;
HA 测试:配置文件、面板卡片设计、温度显示;
环境搭建
包括 Docker、EMQX、HA 部署、MQTT 通信配置等。
Docker 安装
下载并安装 Docker Desktop 软件;
镜像源更换
为了便于后续 EMQX 和 HA 平台部署,需要添加镜像源以加速下载。
依次进入 设置 - Docker Engine

添加代码如下
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"debug": true,
"experimental": false,
"insecure-registries": [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"registry-mirrors": [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
]
}
选择 Apply 即可。
HA 部署
打开命令行终端并执行指令
docker pull homeassistant/home-assistant:latest
待拉取 HA 镜像完成;
磁盘根目录创建 homeassistant 文件夹,新建 docker-compose.yaml 文件,并添加如下代码
version: '3'
services:
homeassistant:
image: homeassistant/home-assistant:latest
container_name: homeassistant
restart: always
volumes:
- /data/homeassistant/config:/config
environment:
- TZ=Asia/Shanghai
ports:
- "8123:8123"
保存文件,并在终端打开该文件夹,执行 docker compose up -d 指令,完成 HA 容器创建。
进入 Containers 容器页面,点击 homeassistant 端口链接,进入 HA 浏览器页面,创建并登录账户;
EMQX 部署
在添加软件镜像源的基础上,终端执行指令
docker pull emqx/emqx:latest
拉取最新版 emqx 镜像
终端执行指令
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest
创建并运行 emqx 容器;
若提示端口被占用报错,可删除已创建的 emqx 容器,进入 Images 标签页,点击 emqx/emqx 镜像对应的启动按钮,手动配置容器名称、Host端口等参数,端口填写 0 ,系统随机分配可用端口。

配置 EMQX
(1)进入 Containers 容器页面,点击 emqx 端口链接,进入 emqx 浏览器页面,初始登录账户名 admin 密码 public ;
(2)依次打开 访问控制 - 客户端认证 - 创建 - Password-Based - 内置数据库 - (默认配置)- 创建 ;
(3)用户管理 - 新建用户 - 自定义用户名和密码 .
MQTT
(1)命令行终端输入 ipconfig 获取本地计算机 IPv4 地址,如 192.168.31.160
(2)配置 Home Assistant ,依次点击设置 - 设备与服务 - 添加集成 - 搜索 MQTT - 填写代理信息。
代理栏输入计算机 IP 地址,端口 1883,用户名和密码为 EMQX 中创建的用户信息。
(3)进入 HA 所在文件夹,打开 configuration.yaml 配置文件,添加温度传感器设备
mqtt:
sensor:
- name: "Temperature"
state_topic: "esp/adc/temp"
suggested_display_precision: 1
unit_of_measurement: "°C"
value_template: "{{ value_json.temperature }}"
保存更改并 重新加载配置 以应用更改。
(4)进入 HA 概览页面,可见新增的传感器卡片以及 Temperature 项。
硬件连接
该项目使用板载 ADC0 对应引脚为 GPIO16;
Type-C 数据线连接 USB-CDC 实现调试和供电。
工程测试
包括流程图、工程代码、MQTTX 测试、HA 测试等。
流程图

工程代码
数据线连接开发板和电脑;
运行 Thonny IDE 软件,配置解释器和设备端口,新建文件并添加如下代码
#!/usr/bin/env python3
# main.py
import json
import network
import time
import random
from machine import ADC, Pin
from umqtt.simple import MQTTClient
# ========== 用户可改区域 ==========
WIFI_SSID = "xxx"
WIFI_PASS = "xxx"
ADC_PIN = 16 # ESP32-P4 的 ADC0 引脚
MQTT_SERVER = "192.168.31.160"
MQTT_PORT = 32768
MQTT_CLIENT_ID = 'micropython-client-{id}'.format(id=random.getrandbits(8))
MQTT_USER = "xxx"
MQTT_PASS = "xxx"
PUB_TOPIC = "esp/adc/temp"
PUB_INTERVAL = 2 # 发布间隔(秒)
# ===================================
def wifi_connect(ssid, pwd):
sta = network.WLAN(network.STA_IF)
sta.active(True)
if not sta.isconnected():
print("Connecting Wi-Fi...")
sta.connect(ssid, pwd)
for _ in range(20):
if sta.isconnected():
break
time.sleep(1)
print("Wi-Fi connected:", sta.ifconfig())
# --------------- 温度转换 ---------------
def read_temperature():
"""
线性转换:
参考电压 3.3 V,温度传感器输出 10 mV/°C
"""
adc = ADC(Pin(ADC_PIN))
adc.atten(ADC.ATTN_11DB) # 0-3.3 V
raw = adc.read()
volt = raw / 4095 * 3.3 # ADC 电压
temp = (volt - 1.4) * 100 # ADC 温度
return round(temp, 1)
# --------------- MQTT 连接 ---------------
def mqtt_connect():
c = MQTTClient(MQTT_CLIENT_ID, MQTT_SERVER, MQTT_PORT,
MQTT_USER, MQTT_PASS)
c.connect()
print("[MQTT] Connected to", MQTT_SERVER)
return c
def mqtt_publish(client, data: dict):
payload = json.dumps(data)
client.publish(PUB_TOPIC, payload)
print("[MQTT] Sent ->", payload)
# --------------- 主函数 ---------------
def main():
wifi_connect(WIFI_SSID, WIFI_PASS) # 连接 WiFi
client = mqtt_connect()
while True:
temp = read_temperature()
mqtt_publish(client, {"temperature": temp})
time.sleep(PUB_INTERVAL)
if __name__ == "__main__":
main()
保存代码并运行;
终端打印 WiFi 连接信息以及 MQTT 消息发布内容。

MQTTX 测试
下载并安装 MQTTX 软件;
新建连接,输入本地计算机 IP 地址、端口号、MQTT Broker 用户名、密码等;
运行连接,添加订阅主题 esp/adc/temp 获取监听消息;

HA 测试
在 HA 添加 MQTT 集成设备的基础上,在 概览 - 传感器 可获取实时温度更新

此外,结合 HA 智能移动 APP 平台,可远程获取实时温度信息。
总结
本文介绍了 DFRobot FireBeetle 2 ESP32 P4 开发套件通过 ADC 采集温度数据,并结合 MQTT 协议和无线 WiFi 模块实现温度上传至 Home Assistant 平台,实现物联网远程温度计的项目设计,为该开发板在物联网领域的开发设计和应用提供了参考。
评论