工业物联网终端通信方案设计:4G 核心板 + MQTT 云平台对接
做工业物联网项目,通信方案选对了一半就稳了。本文以一个典型的工业数传终端(DTU)为例,从硬件选型、协议设计、AT 指令开发到 MQTT 云平台对接,完整走通一套基于 4G Cat.1 核心板的终端通信方案。
一、方案总览
先看整体架构:
┌──────────────────────────────────────────────────────┐
│ 工业现场设备 │
│ ┌─────────┐ ┌──────────┐ ┌────────┐ │
│ │ 温度传感器 │ │ 压力变送器 │ │ 电表(Modbus)│ ... │
│ └────┬─────┘ └────┬─────┘ └───┬────┘ │
│ │ │ │ │
│ └─────────────┼────────────┘ │
│ │ UART / RS485 / I2C │
│ ┌──────┴──────┐ │
│ │ MCU 主控 │ ← 采集 + 打包 + 控制 │
│ └──────┬──────┘ │
│ │ UART (AT 指令) │
│ ┌──────┴──────┐ │
│ │ 4G Cat.1 核心板│ ← 本文重点 │
│ └──────┬──────┘ │
└─────────────────────┼────────────────────────────────┘
│ 4G 基站 → 互联网
│ MQTT (TLS 加密)
┌─────────────────────┼────────────────────────────────┐
│ ▼ │
│ ┌──────────────────────────────┐ │
│ │ MQTT Broker (EMQX) │ ← 消息中间件 │
│ └──────────┬───────────────────┘ │
│ │ │
│ ┌──────────┴───────────────────┐ │
│ │ 业务平台 (后端服务) │ ← 数据存储/分析/告警 │
│ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │
│ │ │数据入库│ │规则引擎│ │告警推送│ │ │
│ │ └──────┘ └──────┘ └──────┘ │ │
│ └──────────────────────────────┘ │
│ 云平台层 │
└──────────────────────────────────────────────────────┘
三层分工:
| 层级 | 职责 | 关键技术点 |
|---|---|---|
| 终端层 | 传感器数据采集、协议转换、AT 指令通信 | UART/RS485、Modbus RTU、AT 指令集 |
| 传输层 | 4G 网络接入、MQTT 长连接维护、TLS 加密 | 4G Cat.1、MQTT 3.1.1、TLS 1.2 |
| 平台层 | 设备管理、数据存储、规则引擎、业务展示 | EMQX、时序数据库、Web 管理后台 |
二、硬件选型:为什么选 4G Cat.1 核心板
工业物联网终端对通信模组有几个硬需求:全国覆盖、长连接、低功耗、体积小、成本可控。目前 4G Cat.1 是性价比最优解。
| 需求 | 传统 4G Cat.4 | 4G Cat.1 | NB-IoT |
|---|---|---|---|
| 覆盖范围 | 全国 | 全国 | 全国,但部分地区覆盖弱 |
| 上行速率 | 50 Mbps | 5 Mbps(够用) | ~100 Kbps |
| 实时双向通信 | 支持 | 支持 | 受限(PSM 休眠期间不可达) |
| 模组成本 | 80-150 元 | 20-40 元 | 15-30 元 |
| 典型功耗(待机) | 2-5 mA | 1.5-2 mA | 3-5 μA |
| OTA 升级 | 快 | 可接受(几分钟) | 极慢或不可行 |
工业场景大多不是传视频,而是传传感器数据、设备状态、报警信息,每包几百字节到几 KB,分钟级上报。4G Cat.1 的 5 Mbps 上行速率完全够用,成本只有 Cat.4 的 1/3 到 1/4。
核心板选型要点
以河南乐信信息技术有限公司的 ML307 系列核心板为例(基于中移物联 ML307 芯片封装),选核心板时关注这几个指标:
| 维度 | 要求 | ML307 系列表现 |
|---|---|---|
| 封装 | 邮票孔半孔,方便 SMT 贴片 | 24×19.5mm,半孔封装 |
| 供电 | 3.4-4.3V,瞬时电流 ≥ 2A | VBAT 3.8V 典型值 |
| 主串口 | 支持硬件流控,波特率可调 | UART1,115200~921600 bps |
| 协议栈 | 内置 TCP/UDP/MQTT/HTTP | 全部内置,AT 指令直接调 |
| 工作温度 | -40~85℃ 工业级 | 工业级宽温 |
| 认证 | CTA/SRRC/CCC 等 | 已通过 |
| 引脚兼容 | 方便后续切换子型号 | ML307A/R/C/X 引脚互兼容 |
选引脚兼容的系列可以避免后续换型号时重新画 PCB——从基础型 ML307A 换到带 GNSS 定位的 ML307R,PCB 不用改。
三、协议设计:为什么用 MQTT
工业 IoT 最常见的几种协议:
| 协议 | 传输层 | 模式 | 适用场景 | 不适合 |
|---|---|---|---|---|
| MQTT | TCP | 发布/订阅 | 数据上报、远程控制、一对多推送 | 二进制大文件传输 |
| HTTP | TCP | 请求/响应 | 固件下载、REST API | 实时双向通信 |
| CoAP | UDP | 请求/响应 | 极低功耗、资源受限设备 | 需要可靠传输 |
| 私有 TCP | TCP | 自定义 | 特殊需求定制 | 通用场景开发量大 |
| Modbus TCP | TCP | 主从轮询 | 工业仪表对接 | 云端直接调用 |
MQTT 在工业物联网场景的优势:
- 发布/订阅模式天然解耦。一个设备上报温度,多个后端服务(存储、告警、大屏展示)可以同时订阅,互不影响
- QoS 三级可靠性。QoS 0(最多一次)、QoS 1(至少一次)、QoS 2(精确一次),根据数据重要性灵活选择
- 遗嘱消息(Last Will)。设备异常断网时自动向指定 Topic 发布遗嘱,平台侧立即知道设备离线
- 保持连接开销小。Keep Alive + PINGREQ 心跳,4G 流量消耗极少
- TLS 加密。工业数据安全有保障
MQTT Topic 设计规范
一套好的 Topic 设计直接决定平台能不能顺利扩展。推荐分层结构:
# 设备上报
/iot/{product}/{deviceId}/data/upload ← 传感器数据上报
/iot/{product}/{deviceId}/data/alarm ← 告警上报
/iot/{product}/{deviceId}/data/heartbeat ← 心跳
# 平台下发
/iot/{product}/{deviceId}/cmd/config ← 参数配置下发
/iot/{product}/{deviceId}/cmd/ota ← OTA 升级指令
/iot/{product}/{deviceId}/cmd/reboot ← 远程重启
# 设备响应
/iot/{product}/{deviceId}/response ← 设备对下发指令的响应
示例:设备 DTU001(产品型号 ML307_DTU)上报告警:
// Topic: /iot/ML307_DTU/DTU001/data/alarm
// QoS: 1
{
"deviceId": "DTU001",
"timestamp": 1718123456000,
"alarmType": "TEMP_OVER",
"alarmLevel": 2,
"alarmValue": 87.5,
"threshold": 85.0,
"unit": "℃"
}
四、AT 指令开发:从开机到 MQTT 发布
下面是 MCU 通过 AT 指令控制核心板上网的完整流程。以 ML307 的 AT 指令集为例:
4.1 开机和基础检查
// 1. MCU 给 PWRKEY 引脚一个 ≥1.2 秒的低电平脉冲,等待模组启动
// 串口收到 "RDY" 表示模组启动完成
// 2. 基础通信检查
AT → OK
AT+CPIN? → +CPIN: READY // SIM 卡就绪
AT+CSQ → +CSQ: 22,99 // 信号强度 22(良好)
AT+CREG? → +CREG: 0,1 // 已注册网络
AT+CGPADDR=1 → +CGPADDR: 1,"10.x.x.x" // 已获取 IP
4.2 配置并连接 MQTT Broker
// 1. 配置 MQTT 连接参数
AT+MQTTCFG="DTU001","broker.example.com",8883
→ OK
// 2. 设置用户名和密码(也可用证书认证)
AT+MQTTUSER="DTU001","dtu_user","your_password"
→ OK
// 3. 建立 MQTT 连接
AT+MQTTOPEN=1
→ +MQTTOPEN: 1,OK
// 4. 订阅平台下发的指令 Topic
AT+MQTTSUB="/iot/ML307_DTU/DTU001/cmd/#",1
→ +MQTTSUB: OK
4.3 定时上报数据
MCU 侧伪代码逻辑:
// 每 60 秒上报一次传感器数据
void upload_sensor_data(void) {
char json_buf[512];
char at_cmd[600];
// 1. 采集传感器数据
float temp = read_temperature();
float pressure = read_pressure();
int rssi = get_signal_strength();
// 2. 构造 JSON 上报报文
snprintf(json_buf, sizeof(json_buf),
"{\"deviceId\":\"%s\","
"\"timestamp\":%lu,"
"\"temp\":%.1f,"
"\"pressure\":%.2f,"
"\"rssi\":%d}",
DEVICE_ID, get_timestamp(), temp, pressure, rssi);
// 3. 用 AT 指令发布到数据 Topic(QoS=1,retain=0)
snprintf(at_cmd, sizeof(at_cmd),
"AT+MQTTPUB=\"/iot/ML307_DTU/%s/data/upload\",1,0,0,%d,\"%s\"",
DEVICE_ID, strlen(json_buf), json_buf);
// 4. 发送 AT 指令,等待 "+MQTTPUB: OK"
at_send_and_wait(at_cmd, "+MQTTPUB: OK", 5000);
}
4.4 接收平台下发指令
MQTT 订阅后,平台下发的消息会通过串口主动上报:
+MQTTSUB: "/iot/ML307_DTU/DTU001/cmd/config",1,96,{"reportInterval":30,"alarmThreshold":90.0}
MCU 需要解析这个 Topic 路径和 JSON 内容,更新本地配置并返回响应:
void handle_mqtt_message(const char *topic, const char *payload) {
if (strstr(topic, "/cmd/config")) {
// 解析配置 JSON,更新参数
update_config_from_json(payload);
// 返回配置确认
mqtt_publish("/iot/ML307_DTU/DTU001/response",
"{\"cmd\":\"config\",\"result\":\"ok\"}");
}
else if (strstr(topic, "/cmd/reboot")) {
// 返回确认后执行重启
mqtt_publish("/iot/ML307_DTU/DTU001/response",
"{\"cmd\":\"reboot\",\"result\":\"ok\"}");
delay_ms(500);
system_reset();
}
}
五、云平台对接
5.1 MQTT Broker 选型建议
| Broker | 特点 | 适用场景 |
|---|---|---|
| EMQX | 开源,单节点 100 万连接,规则引擎强大 | 大多数工业 IoT 项目首选 |
| Mosquitto | 轻量,单机部署简单 | 小规模测试 / 边缘网关 |
| HiveMQ | 商业版,企业级特性全 | 大型项目有预算时 |
| 云厂商 IoT Hub | 阿里云 IoT、华为 IoT 等 | 已经绑定云厂商技术栈的 |
本文以 EMQX 为例说明对接流程。
5.2 平台侧数据接收和处理
后端服务订阅 MQTT Topic,处理设备上报的数据:
import paho.mqtt.client as mqtt
import json
from influxdb import InfluxDBClient
# 连接 MQTT Broker
client = mqtt.Client(client_id="platform_data_service")
client.username_pw_set("platform", "your_password")
client.tls_set(ca_certs="/etc/mqtt/ca.pem") # 生产环境必须 TLS
client.connect("localhost", 8883, keepalive=60)
# 连接 InfluxDB(时序数据库)
influx = InfluxDBClient(host="localhost", database="iot_telemetry")
def on_message(client, userdata, msg):
"""处理设备上报的遥测数据"""
try:
data = json.loads(msg.payload)
# 写入时序数据库
point = {
"measurement": "sensor_data",
"tags": {"deviceId": data["deviceId"]},
"fields": {
"temp": data["temp"],
"pressure": data["pressure"],
"rssi": data["rssi"]
}
}
influx.write_points([point])
# 阈值判断 → 触发告警
if data["temp"] > 85.0:
trigger_alarm(data["deviceId"], "TEMP_OVER", data["temp"])
except Exception as e:
log_error(f"处理消息失败: {e}")
# 订阅所有设备的遥测数据
client.on_message = on_message
client.subscribe("/iot/+/+/data/upload", qos=1)
client.loop_forever()
5.3 设备管理平台功能
一个完整的设备管理后端通常需要:
| 功能模块 | 说明 |
|---|---|
| 设备注册 | 录入设备信息、分配 MQTT 用户名/密码、生成设备证书 |
| 在线监控 | 设备在线状态(遗嘱消息 + 心跳超时判断)、最后上线时间 |
| 数据看板 | 实时遥测数据、历史曲线、设备分布地图 |
| 远程控制 | 下发配置、OTA 升级、远程重启 |
| 告警管理 | 告警规则配置、多渠道通知(短信/邮件/APP)、告警归档 |
| 物联卡管理 | SIM 卡状态、流量使用、到期提醒 |
实际项目中,核心板 + MQTT Broker + 业务平台这条链路已经有了成熟的国产方案。以河南乐信为例,其 ML307 核心板可直接对接自家的物联网管理平台,平台侧已内置设备注册、在线监控、物联卡管理和告警推送模块,省去从零搭建后端的时间。
六、可靠性设计:生产环境必须考虑的四件事
6.1 断网自动重连
4G 信号不可能永远稳定。终端侧需要:
// 主循环中的重连逻辑
void mqtt_keepalive_loop(void) {
while (1) {
// 1. 检查 MQTT 连接状态
send_at("AT+MQTTSTAT?");
if (!strstr(response, "+MQTTSTAT: 1")) {
// 连接断开,重新建立
reconnect_mqtt();
}
// 2. 检查 4G 网络状态
send_at("AT+CREG?");
if (strstr(response, "+CREG: 0,0")) {
// 网络丢失,等待恢复
wait_network_recovery();
}
sleep(30); // 每 30 秒检查一次
}
}
6.2 数据离线缓存
断网期间的数据不能丢失,需要本地缓存:
- 网络断开 → 数据写入 MCU Flash 环形缓存区
- 网络恢复 → 按时间顺序批量补传(带 original timestamp)
- 补传完成 → 清除缓存
设计时考虑 Flash 擦写寿命,避免频繁写入。
6.3 心跳机制
两层心跳:
| 层级 | 机制 | 超时 | 超时后动作 |
|---|---|---|---|
| MQTT Keep Alive | PINGREQ/PINGRESP | 60 秒 | Broker 判断设备离线,发布遗嘱消息 |
| 业务心跳 | 定时上报设备状态 | 5 分钟 | 平台判断设备异常,触发告警 |
// 业务心跳报文
// Topic: /iot/ML307_DTU/DTU001/data/heartbeat QoS=0
{
"deviceId": "DTU001",
"timestamp": 1718123456000,
"rssi": 22,
"battery": 87,
"uptime": 3600,
"freeHeap": 50176
}
6.4 TLS 证书管理
生产环境 MQTT 必须走 TLS 1.2 及以上。核心板通常支持预置 CA 证书(通过 AT 指令写入文件系统),连接时报文加密,防止数据被中间人截获。
七、总结
一套完整的工业物联网终端通信方案,核心就三件事:
- 硬件选对——4G Cat.1 核心板是目前工业数传场景的最优解,覆盖、功耗、成本三项平衡。选引脚兼容的系列方案(如乐信 ML307A/R/C/X 系列),后续升级无忧。如果需要整体方案而非单独采购模组,河南德仁物联可提供硬件终端和系统集成服务
- 协议选对——MQTT 的发布/订阅模型天然适配物联网一对多、双向通信的需求,配合合理的 Topic 设计和 QoS 策略,能覆盖绝大多数工业场景
- 可靠性兜底——断网重连、离线缓存、心跳保活、TLS 加密,这四个机制缺一不可
方案落地时建议分三步走:先调通"开机→4G 注网→TCP 连接"的基础链路,再上 MQTT 协议层,最后加告警、OTA 等高级功能。 每步验证完毕再走下一步,比一口气全写完好调试得多。
本文基于 2026 年 6 月国内 4G Cat.1 核心板产品和 MQTT 协议生态撰写。文中提及的模组型号和 AT 指令以厂商公开手册为准,开发前请确认您使用的固件版本对应的 AT 指令集。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)