【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
本文介绍了树莓派 CM0 NANO 单板计算机通过 Docker 容器实现 EMQX 的本地部署,包括 Docker 安装、EMQX 镜像拉取、容器启动、客户端配置、MQTT 测试等流程。
项目介绍
该项目通过 Docker 软件实现 EMQX 平台在树莓派 CM0 NANO 单板计算机的本地部署。
- Docker 安装:网络加速、安装脚本执行、软件源更换和版本检测等;
- EMQX 部署:更换镜像源、镜像获取、容器启动、创建用户以及参数配置等;
- 通信测试:MQTT 消息转发、芯片温度上报测试等流程。

应用
EMQX 作为高并发 MQTT 接入层,在工业场景主要承担 设备-边缘-云端 实时数据总线角色,应用场景包括且不限于
- 智能家居终端控制与数据采集;
- 工业自动化数据采集与远程控制;
- 边缘 IIOT 工业物联网;
- 工业环境监测,历史数据转发与存储;
- ......
配合规则引擎与流计算,实现设备互联、生产监控、能耗优化,逐渐成为智能制造与数字化转型的核心数据底座。
硬件连接
- 若采用 SSH 远程登录方式,需连接 5V 3A 电源和网线;
- 若采用本地连接方式,需增加 HDMI 数据线连接显示器、USB 键盘及鼠标。

Docker
这里介绍树莓派 CM0 NANO 实现 Docker 部署的主要流程,包括更换软件源、安装脚本获取与执行、版本检测等。

网络加速
使用 Dev-Sidecar 软件实现网络加速。
- 执行如下执行,获取安装包并安装软件
bash
wget "https://bgithub.xyz/docmirror/dev-sidecar/releases/download/v2.0.0.2/DevSidecar-2.0.0.2-linux-arm64.deb"
sudo dpkg -i DevSidecar-2.0.0.2-linux-arm64.deb
- 若报错或提示缺失文件,可通过补全缺失包的方法解决
bash
sudo apt update
sudo apt -f install
sudo dpkg -l dev-sidecar
- 执行 ping docker.com 测试网络连接;
部署方案
- 使用官方脚本安装,终端执行指令
bash
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
- 安装完成后,查询 Docker 版本号
bash
docker -v
详见:【工业树莓派 CM0 NANO 单板计算机】本地部署 Home Assistant 智能家居平台 .
- 若报错,可更换国内软件源
bash
# 添加 Docker 官方 GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 添加仓库到 Apt 源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] http://mirrors.aliyun.com/docker-ce/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker_aliyun.list > /dev/null
sudo apt-get update
详见:树莓派安装Docker .
EMQX
EMQX 是全球领先的开源分布式云原生 MQTT 物联网接入平台,支持单机千万级并发、毫秒级延迟,为万物互联提供高可靠、高可用的消息总线底座。

详见:EMQX:MQTT 与 AI 一体化平台 .
在前面完成 Docker 安装的基础上,这里进一步介绍了部署 EMQX 容器的主要流程,包括镜像源更换、镜像拉取、容器启动、个性化配置等。
部署方案
在添加软件镜像源的基础上,终端执行如下指令,拉取最新版 emqx 镜像
bash
sudo docker pull emqx/emqx:latest

实测部署 EMQX 需要至少 400MB 存储空间。
启动容器
终端执行如下指令,启动 EMQX 容器
bash
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest

- 浏览器输入网址
http://<树莓派IP>:18083,如http://192.168.1.115:18083; - 进入 EMQX 界面,初始账号
admin密码public; - 首次登录会提示更新密码并进入概览界面

- 运行过程占用内存约 310MB

- 若要停止/启动/重启 EMQX,则执行指令
bash
sudo docker stop emqx # STOP
sudo docker start emqx # RUN
sudo docker restart emqx # Restart
创建用户
创建客户端
- 依次打开
访问控制-客户端认证-创建-Password-Based-内置数据库- (默认配置)-创建;

创建用户
用户管理-新建用户- 自定义用户名和密码 - 保存.

至此,完成 EMQX 在树莓派 CM0 NANO 单板计算机的本地部署。
通信测试
这里介绍了基于 EMQX 服务器和 MQTT 协议的通信测试,包括 MQTT 消息转发、芯片温度上报等。
MQTT 转发
通过 MQTTX 软件向 EMQX 服务器发送消息,并订阅相同主题,实现消息接收。
- 打开 MQTTX 软件,新建连接;
- 输入 EMQX 服务器 IP 地址,用户名和密码等信息,连接服务器;
- 添加订阅主题和发送主题,如
rpi/cm0/demo; - 在发送框内输入任意 JSON 消息并点击发送,如
{"temp": 27.8, "humi": 42.6},立即接收到相同消息;

- 在 EMQX 服务器后台可以看到消息的流入流出、在线会话数量、主题等信息

芯片温度上报
在前面本地测试通过的基础上,将芯片温度上传至 EMQX 服务器并实现消息转发。
流程图
1883 订阅主题 开始 初始化 读取 CPU 温度 构建 JSON 发布消息 EMQX 服务器 MQTTX
代码
终端执行 touch mqtt_temp.py 指令新建 python 文件,并 nano mqtt_temp.py 添加如下代码
python
#!/usr/bin/env python3
import paho.mqtt.client as mqtt
import time, json, subprocess
broker = "localhost" # ip
port = 1883 # port
topic = "rpi/cm0/temp" # topic
username = "xxx" # EMQX user name
password = "xxx" # password
client = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(username, password) # user info
client.connect(broker, port, keepalive=60)
def get_cpu_temp():
raw = subprocess.check_output(["vcgencmd", "measure_temp"]).decode()
return float(raw.split("=")[1].split("'")[0])
while True:
temp = get_cpu_temp()
payload = json.dumps({"temp": temp, "unit": "℃", "ts": int(time.time())})
client.publish(topic, payload, qos=0)
print(payload)
time.sleep(2)
- 保存代码;
终端执行指令 python mqtt_temp.py 运行程序;
- 终端打印上报消息

- 打开 MQTTX 软件,接收到 EMQX 服务器转发的 CM0 芯片温度信息

总结
本文介绍了树莓派 CM0 NANO 单板计算机通过 Docker 容器实现 EMQX 的本地部署,包括 Docker 安装、EMQX 镜像拉取、容器启动、客户端配置、MQTT 测试等流程,为树莓派 CM0 等相关产品在工业物联网领域的快速开发和应用设计提供了参考。