WiFi 覆盖不足?无 WiFi 也能控!用4G 模块 CT11-B&C 实现全域远程控制教程
本文详细介绍了如何利用DX-CT11-B&C 4G模块实现无WiFi场景下的远程设备控制方案。重点包括:硬件准备(模块、单片机、继电器等)、AT指令配置MQTT服务器连接、单片机代码开发及调试流程。通过MQTT协议实现服务器指令下发,控制继电器动作,并提供了低流量优化、稳定性提升等实用技巧。该方案特别适用于智慧农业、户外监控等无网络覆盖场景,具有广覆盖、高稳定性的特点,为物联网开发者提供了
工业级4G远程控制:CT11-B&C模块全域覆盖实战指南
在户外、偏远地区等 WiFi 信号覆盖不足的场景中,传统 WiFi 模块常因通信中断无法实现远程控制,而 4G 模块凭借广覆盖、高稳定性的核心优势,成为物联网远程控制的理想解决方案。
本文聚焦这一痛点,以大夏龙雀 CT11-B&C 高性价比 CAT1 4G 模块为核心,手把手教你实现 MQTT 协议远程控制设备。内容涵盖硬件接线(模块 + 单片机 + 继电器)、AT 指令配置 MQTT 服务器接入、单片机代码开发、低流量优化等全流程,同时提供故障排查与功能扩展技巧,适配智慧农业、户外监控、共享设备等无 WiFi 场景,充分发挥 4G 模块在无网络覆盖场景下的通信价值。
一、教程前置准备
1. 硬件清单
| 硬件名称 | 规格要求 | 核心作用 |
|---|---|---|
| DX-CT11-B&C 模块 | CT11-B(5~16V 供电)/ CT11-C(3.4~4.5V 锂电池供电) | 4G 通信核心,实现 MQTT 数据传输 |
| STC89C52 单片机 | 5V 供电 | 接收模块消息,控制执行机构 |
| 继电器模块 | 5V 触发 | 隔离控制,驱动大功率设备(LED 灯) |
| 外置 4G 天线 | IPEX-1 接口,增益≥5dBi | 保证射频信号稳定,提升通信可靠性 |
| NANO SIM 卡 | SIM0 支持 1.8V/3V,SIM1 仅 1.8V | 提供 4G 数据链路,建议选择低流量物联网套餐 |
| 电平转换芯片 | TXB0108RGYR | 解决模块 1.8V 与单片机 5V 串口电平不匹配问题 |
| 电源适配器 | 输出电流≥1.2A | 满足模块射频发射时的瞬态电流需求 |
| 面包板 + 杜邦线 | 通用规格 | 快速搭建电路,方便调试 |
| 被控设备 | LED 灯 | 验证控制效果 |
2. 软件工具
- 串口调试工具:SSCOM5.13.1(支持自动回车、多字符串发送,适配 AT 指令调试)
- MQTT 服务器工具:MQTT.fx(免费开源,快速模拟服务器下发控制指令)
- 单片机编程工具:Keil C51(编写控制逻辑代码)
- 代码烧录工具:STC-ISP(将程序烧录至 STC89C52 单片机)
3. 硬件接线步骤
(1)模块与单片机串口连接
| DX-CT11-B&C 模块引脚 | 电平转换芯片 | STC89C52 单片机引脚 |
|---|---|---|
| UART0_TXD(18 脚,1.8V) | A1 端口 | P3.0(RXD) |
| UART0_RXD(17 脚,1.8V) | B1 端口 | P3.1(TXD) |
| GND(任意 GND 脚) | GND | GND |
| VDD_EXT(24 脚,1.8V 输出) | VCCA | -(可选,为芯片供电) |
| - | VCCB | 5V(单片机电源) |
(2)单片机与继电器连接
- 单片机 P1.0 引脚 → 继电器模块 IN 引脚
- 继电器 VCC → 5V 电源
- 继电器 GND → GND
- 继电器 COM 端 → 被控设备正极
- 继电器 NO 端 → 电源正极
- 被控设备负极 → 电源负极
(3)模块基础接线
- 模块供电:CT11-B 接 5V 电源(VIN 脚),CT11-C 接 3.8V 锂电池(VBAT 脚)
- 4G 天线:IPEX 接头插入模块 ANT_MAIN(35 脚)
- SIM 卡:按模块标签指示插入 NANO SIM 卡(注意缺口方向)
关键提醒:模块 EN 引脚(硬件使能)默认高电平有效,无需额外接线;射频线走线尽量短且包地,避免干扰通信。
4. 串口参数配置
- 模块默认串口参数:115200bps、8 数据位、无校验、1 停止位
- SSCOM 工具设置:勾选 “加回车换行”,选择对应串口端口
二、核心实现流程(分两步:模块接入 MQTT + 单片机控制)
第一步:DX-CT11-B&C 模块接入 MQTT 服务器(官方已封装AT 指令)
步骤 1:模块初始化与网络验证
| 操作目的 | AT 指令 | 预期响应 | 异常排查 |
|---|---|---|---|
| 测试串口通信 | AT | OK | 1. 检查接线是否松动;2. 串口参数是否匹配;3. 电平转换芯片是否供电正常 |
| 查询网络注册状态 | AT+CREG? | +CREG:0,1 或 +CREG:0,5 | 返回 0,0:SIM 卡未识别,检查插卡方向;返回 0,3:注册被拒,确认 SIM 卡有效 |
| 查询信号质量 | AT+CSQ | +CSQ:18,99 | 第一个参数<10:信号弱,调整天线位置;返回 99,99:无信号,检查天线是否插紧 |
| 查询 SIM 卡 ICCID | AT+QCCID | +QCCID:89860xxxxxx | 返回空值:SIM 卡未检测到,重新插卡或更换 SIM 卡 |

步骤 2:配置 MQTT 客户端参数
| 操作目的 | AT 指令示例 | 预期响应 | 参数说明 |
|---|---|---|---|
| 配置客户端信息 | AT+QMTCFG="CT11_Control","iot_user","123456" | OK | clientid:CT11_Control(最大 256 字符);用户名 / 密码:自定义,适配服务器认证 |
| 查询配置结果 | AT+QMTCFG? | +QMTCFG:CT11_Control,iot_user,123456 + OK | 验证配置是否生效,避免参数输入错误 |
步骤 3:配置 MQTT 服务器参数(使用公网快速测试)
| 操作目的 | AT 指令示例 | 预期响应 | 关键设置 |
|---|---|---|---|
| 配置服务器信息 | AT+QMTCONNCFG="broker.emqx.io",1883,1 | OK + MQTTCONNECT | 服务器地址:broker.emqx.io(免费公共服务器);端口:1883(TCP 默认);reconnect=1(开启自动重连) |
| 查询服务器配置 | AT+QMTCONNCFG? | +QMTCONNCFG:broker.emqx.io,1883,1 + OK | 确认服务器地址、端口无误 |
步骤 4:建立 MQTT 连接
| 操作目的 | AT 指令示例 | 预期响应 | 注意事项 |
|---|---|---|---|
| 配置会话与心跳 | AT+QMTSTART=1,300 | OK | clean_session=1(临时会话);keepalive=300 秒(降低心跳流量消耗) |
| 查询连接状态 | AT+QMTSTATU | +QMTSTATU:1 + OK | 返回 1:连接成功;返回 0:连接失败,检查网络或服务器参数 |
步骤 5:订阅控制主题
| 操作目的 | AT 指令示例 | 预期响应 | 主题设计 |
|---|---|---|---|
| 订阅控制主题 | AT+QMTSUB="sulingkai",0 | OK | 主题名称:sulingkai(自定义,与服务器下发主题一致);QoS=0(最多一次,适配控制场景) |

日志参考(SSCOM 工具输出):
[15:30:22.123]发→◇AT
[15:30:22.189]收←◆OK
[15:30:35.456]发→◇AT+CREG?
[15:30:35.512]收←◆+CREG:0,1
OK
[15:30:48.789]发→◇AT+QMTCFG="CT11_Control","iot_user","123456"
[15:30:48.856]收←◆OK
[15:31:02.123]发→◇AT+QMTCONNCFG="broker.emqx.io",1883,1
[15:31:02.189]收←◆OK
MQTTCONNECT
[15:31:15.456]发→◇AT+QMTSTART=1,300
[15:31:15.512]收←◆OK
[15:31:28.789]发→◇AT+QMTSTATU
[15:31:28.856]收←◆+QMTSTATU:1
OK
[15:31:42.123]发→◇AT+QMTSUB="sulingkai",0
[15:31:42.189]收←◆OK
第二步:单片机解析 MQTT 消息并控制设备
1. 核心逻辑:
单片机通过串口接收模块转发的 MQTT 消息(如 “relay:1”→ 打开继电器,“relay:0”→ 关闭继电器),解析消息后控制 GPIO 引脚电平,驱动继电器动作,进而控制被控设备。
2. 单片机代码(核心示例)
#include <reg52.h>
#include <string.h>
#define RELAY_PIN P1_0 // 继电器控制引脚
#define BUF_LEN 32 // 接收缓冲区长度
char recv_buf[BUF_LEN]; // 串口接收缓冲区
unsigned int buf_idx = 0; // 缓冲区索引
// 串口初始化(9600bps,适配模块默认115200bps,需统一波特率)
void uart_init() {
TMOD = 0x20; // 定时器1工作模式2
TH1 = 0xFD; // 9600bps初值(11.0592MHz晶振)
TL1 = 0xFD;
TR1 = 1; // 启动定时器1
SCON = 0x50; // 串口工作模式1,允许接收
EA = 1; // 开启总中断
ES = 1; // 开启串口中断
}
// 串口发送字符
void uart_send_char(char c) {
SBUF = c;
while (!TI); // 等待发送完成
TI = 0; // 清除发送标志位
}
// 串口发送字符串
void uart_send_str(char *str) {
while (*str != '\0') {
uart_send_char(*str);
str++;
}
}
// 解析MQTT消息,控制继电器
void parse_mqtt_msg() {
// 消息格式:+MQTTSUBRECV:sulingkai,7,relay:1
if (strstr(recv_buf, "relay:1") != NULL) {
RELAY_PIN = 1; // 继电器吸合,打开设备
uart_send_str("Relay ON\r\n");
} else if (strstr(recv_buf, "relay:0") != NULL) {
RELAY_PIN = 0; // 继电器断开,关闭设备
uart_send_str("Relay OFF\r\n");
}
memset(recv_buf, 0, BUF_LEN); // 清空缓冲区
buf_idx = 0;
}
// 串口中断服务函数(接收模块消息)
void uart_isr() interrupt 4 {
if (RI) { // 接收中断标志位
recv_buf[buf_idx] = SBUF;
RI = 0; // 清除接收标志位
buf_idx++;
// 消息结束标志:换行符,或缓冲区满
if (recv_buf[buf_idx-1] == '\n' || buf_idx >= BUF_LEN-1) {
recv_buf[buf_idx] = '\0'; // 添加字符串结束符
parse_mqtt_msg(); // 解析消息
}
}
}
void main() {
RELAY_PIN = 0; // 初始状态:继电器断开
uart_init(); // 初始化串口
uart_send_str("MQTT Control Ready\r\n");
while (1) {
// 主循环空转,依赖中断处理
}
}
3. 代码烧录步骤
- 打开 STC-ISP 工具,选择单片机型号 “STC89C52RC”;
- 点击 “打开程序文件”,选择编译生成的.hex 文件;
- 选择对应串口端口,设置波特率为 “115200bps”;
- 单片机断电后重新上电,点击 “下载 / 编程”,等待烧录完成。
三、效果演示与验证
1. 服务器下发指令
- 打开 MQTT.fx,点击 “设置”,输入服务器地址 “broker.emqx.io”,端口 “1883”;
- 点击 “连接”,成功后在 “Publish” 界面输入主题 “sulingkai”;
- payload 输入 “relay:1”,点击 “Publish” 下发打开指令;
- 观察到继电器吸合,被控设备( LED 灯)点亮;
- payload 输入 “relay:0”,点击 “Publish” 下发关闭指令,设备熄灭。
2. 关键日志验证
- 模块接收日志(SSCOM 工具):
[15:40:12.345]收←◆+MQTTSUBRECV:sulingkai,7,relay:1
[15:40:15.678]收←◆Relay ON
[15:40:30.123]收←◆+MQTTSUBRECV:sulingkai,7,relay:0
[15:40:33.456]收←◆Relay OFF
- 单片机串口输出:
MQTT Control Ready
Relay ON
Relay OFF
四、进阶优化
1. 低流量优化
- 调大 MQTT 心跳间隔:
AT+QMTSTART=1,600(从 300 秒延长至 600 秒,减少心跳流量); - 精简消息体:将 “relay:1” 简化为 “1”,“relay:0” 简化为 “0”,单条消息节省 5 字节;
- 关闭指令回显:
ATE0(减少串口冗余数据传输,降低模块功耗)。
2. 稳定性提升
- 开启 MQTT 自动重连:
AT+QMTCONNCFG="broker.emqx.io",1883,1(断网后自动恢复连接); - 增加消息校验:在单片机代码中添加 CRC 校验,避免误触发;
- 电源防干扰:在模块电源输入端并联 1000uF 电解电容 + 0.1uF 陶瓷电容,防止电压波动。
五、常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 模块无响应,AT 指令返回空 | 1. 电源未接通;2. 串口接线错误;3. 电平转换芯片未供电 | 1. 检查电源适配器输出;2. 重新核对串口引脚;3. 为电平转换芯片提供 1.8V/5V 电源 |
| MQTT 连接失败(返回 203 错误) | 1. 网络未注册;2. 服务器地址 / 端口错误;3. SIM 卡无流量 | 1. 确保 AT+CREG? 返回 1 或 5;2. 验证服务器地址可 ping 通(AT+QPING="broker.emqx.io");3. 充值 SIM 卡流量 |
| 单片机无法接收消息 | 1. 波特率不匹配;2. 缓冲区溢出;3. 消息解析逻辑错误 | 1. 统一模块与单片机波特率(如均设为 9600bps);2. 增大接收缓冲区;3. 在解析函数中添加调试日志 |
| 继电器不动作 | 1. 控制引脚接线错误;2. 继电器电源未接通;3. 消息格式错误 | 1. 重新检查 P1.0 引脚接线;2. 确认继电器 VCC 接 5V 电源;3. 确保消息格式与解析逻辑一致(如 “relay:1”) |
六、项目总结
DX-CT11-B&C 模块以其简洁的 AT 指令接口、稳定的通信性能和高性价比,完美适配 MQTT 远程控制场景。本文实现的方案不仅完成了 “服务器 - 模块 - 单片机 - 设备” 的全链路控制,还通过低流量优化、稳定性提升等设计,满足物联网开发的实际需求。

更多推荐




所有评论(0)