特别感谢文章作者:无垠的广袤 / 李金磊,辛苦制作的教程,非常适合新人及树莓派爱好者学习使用!如果你想了解更多教程,可以查看下面的内容:
树莓派 CM0 Dev Kit:
我用树莓派CM0做了一个非常有趣的网页手写数字识别功能!
我用树莓派CM0做了一个数字识别!
新品树莓派CM0,用于智能家居?
用树莓派CM0做物体识别,小白一键跑通!
我用树莓派CM0做了个人脸检测,结果大家全在要代码和模型!
赛博养娃:和树莓派CM0进行AI对话!
树莓派 CM0 NANO:
树莓派 CM0 NANO 入门教程:镜像烧录、系统测试!
内存仅占用 260 MB?我在树莓派CM0 NANO上跑通了Home Assistant!
本文介绍了树莓派 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 软件实现网络加速。
执行如下执行,获取安装包并安装软件
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
若报错或提示缺失文件,可通过补全缺失包的方法解决
sudo apt updatesudo apt -f installsudo dpkg -l dev-sidecar
执行 ping docker.com 测试网络连接;
部署方案
使用官方脚本安装,终端执行指令
curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh
安装完成后,查询 Docker 版本号
docker -v
详见:树莓派 CM0 NANO 单板计算机 本地部署 Home Assistant 智能家居平台
若报错,可更换国内软件源
# 添加 Docker 官方 GPG key:sudo apt-get updatesudo apt-get install ca-certificates curlsudo install -m 0755 -d /etc/apt/keyringssudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/debian/gpg -o /etc/apt/keyrings/docker.ascsudo 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/nullsudo apt-get update
详见:https://pidoc.cn/docs/pidoc/install_docker/
EMQX
EMQX 是全球领先的开源分布式云原生 MQTT 物联网接入平台,支持单机千万级并发、毫秒级延迟,为万物互联提供高可靠、高可用的消息总线底座。
详见:https://www.emqx.com/zh
在前面完成 Docker 安装的基础上,这里进一步介绍了部署 EMQX 容器的主要流程,包括镜像源更换、镜像拉取、容器启动、个性化配置等。
部署方案
在添加软件镜像源的基础上,终端执行如下指令,拉取最新版 emqx 镜像
sudo docker pull emqx/emqx:latest
实测部署 EMQX 需要至少 400MB 存储空间。
启动容器
终端执行如下指令,启动 EMQX 容器
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,则执行指令
sudo docker stop emqx # STOPsudo docker start emqx # RUNsudo 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 服务器并实现消息转发。
流程图
代码
终端执行 touch mqtt_temp.py 指令新建 python 文件,并 nano mqtt_temp.py 添加如下代码
#!/usr/bin/env python3import paho.mqtt.client as mqttimport time, json, subprocessbroker = "localhost" # ipport = 1883 # porttopic = "rpi/cm0/temp" # topicusername = "xxx" # EMQX user namepassword = "xxx" # passwordclient = mqtt.Client(callback_api_version=mqtt.CallbackAPIVersion.VERSION2)client.username_pw_set(username, password) # user infoclient.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 等相关产品在工业物联网领域的快速开发和应用设计提供了参考。
198