目录
一、CAT.1 核心功能与应用场景
1. 核心能力(深度挖掘点)
2. 典型应用场景
二、硬件与开发环境准备
1. 硬件选型(主流 CAT.1 模块)
2. 开发环境
三、完整例程详解(STM32+EC200U)
(一)基础:CAT.1 初始化与网络连接(AT 指令流程)
1. 硬件连接
2. 初始化 AT 指令序列(核心流程)
(二)应用 1:MQTT 数据上报(温湿度 + 设备状态)
1. MQTT 连接与发布流程(EC200U AT 指令)
2. 主函数调用
(三)应用 2:LBS 基站定位(低成本定位方案)
1. LBS 定位 AT 指令(EC200U)
2. 定位数据上报
(四)应用 3:OTA 远程固件升级(设备远程维护)
1. OTA 升级流程(EC200U AT 指令)
2. 核心 AT 指令
(五)应用 4:TCP 透明传输(数据透传场景)
1. TCP 连接与透传
四、深度优化与注意事项
1. 低功耗优化(电池供电设备)
2. 稳定性优化
3. 安全优化
4. 常见问题排查
五、总结
CAT.1(LTE Cat.1)是面向中低速物联网的 4G 通信技术,具备低时延、广覆盖、低成本、低功耗优势,支持 TCP/UDP/MQTT/HTTP/SSL、LBS 定位、短信、OTA 远程升级、透传等核心能力,广泛用于工业监控、智能表计、车载追踪、智慧照明、电梯物联等场景。以下从核心功能、典型应用、完整例程、深度优化四方面详解,覆盖 AT 指令、MCU 驱动、云对接全流程。
一、CAT.1 核心功能与应用场景
1. 核心能力(深度挖掘点)
- 基础通信:TCP/UDP 透明传输、HTTP/HTTPS 数据上报、MQTT 物联网协议、SSL/TLS 加密通信
- 定位能力:LBS 基站定位(无需 GPS,低成本)、GNSS 双模定位(户外高精度)
- 设备管理:OTA 远程固件升级、远程参数配置、信号 / 网络状态监控、故障告警
- 低功耗:PSM/DRX 省电模式、休眠唤醒、按需联网(适合电池供电设备)
- 扩展接口:UART/USB 透传、GPIO 控制、蓝牙辅助通信、RS485/Modbus 对接
2. 典型应用场景
- 智能表计(水 / 电 / 气):CAT.1+RS485/Modbus,远程抄表、异常告警、数据上报云平台
- 车载 / 资产追踪:CAT.1+GNSS/LBS,实时定位、轨迹回放、电子围栏、超速告警
- 智慧照明:单灯远程控制、亮度调节、故障上报、能耗统计
- 电梯物联网:运行状态监控、故障预警、远程调试、OTA 升级
- 工业监控:传感器数据采集、设备远程控制、数据透传、边缘计算
二、硬件与开发环境准备
1. 硬件选型(主流 CAT.1 模块)
- 移远:EC200U/EC800G/EC600N(性价比高,支持 MQTT/HTTP/OTA)
- 合宙:Air724UG/Air780E(开源生态好,适合快速开发)
- 广和通:L610/L716(支持 OpenCPU,可内置业务逻辑)
- 芯讯通:SIM7600G/SIM7070G(支持 GNSS,适合定位场景)
2. 开发环境
- 主控:STM32F103/HC32L130(嵌入式)、ESP32(开源)、树莓派(Linux)
- 工具:串口调试助手、MQTT.fx(MQTT 测试)、OneNET / 阿里云 / 华为云(物联网平台)
- 协议:AT 指令集(通用)、MQTT 3.1.1/5.0、HTTP/HTTPS、TCP/UDP
三、完整例程详解(STM32+EC200U)
以STM32F103 + 移远 EC200U为例,实现MQTT 数据上报、LBS 定位、OTA 升级、TCP 透传四大核心功能,代码基于标准 AT 指令,可直接移植到其他 MCU/CAT.1 模块。
(一)基础:CAT.1 初始化与网络连接(AT 指令流程)
1. 硬件连接
- STM32 USART2 ↔ EC200U UART(TX/RX 交叉,共地)
- EC200U PWRKEY → STM32 GPIO(控制模块开关机)
- EC200U NETLIGHT → 指示灯(网络状态)
- 供电:3.8V~4.2V(CAT.1 模块功耗较高,需保证供电稳定)
2. 初始化 AT 指令序列(核心流程)
// CAT.1 初始化与网络连接函数 en_result_t CAT1_Init_Network(void) { // 1. 模块开机(拉低PWRKEY 1s) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET); HAL_Delay(3000); // 等待模块启动 // 2. 测试AT通信(返回OK表示正常) if(CAT1_Send_ATCmd("AT", "OK", 1000) != Ok) return Error; // 3. 检查SIM卡状态(READY表示正常) if(CAT1_Send_ATCmd("AT+CPIN?", "READY", 2000) != Ok) return Error; // 4. 检查网络注册(0,1表示已注册) if(CAT1_Send_ATCmd("AT+CREG?", "0,1", 3000) != Ok) return Error; // 5. 附着网络(CGATT=1) if(CAT1_Send_ATCmd("AT+CGATT=1", "OK", 2000) != Ok) return Error; // 6. 设置APN(移动:CMNET;联通:UNINET;电信:CTNET) if(CAT1_Send_ATCmd("AT+CGDCONT=1,\"IP\",\"CMNET\"", "OK", 2000) != Ok) return Error; // 7. 激活PDP上下文 if(CAT1_Send_ATCmd("AT+CGACT=1,1", "OK", 5000) != Ok) return Error; // 8. 获取IP地址(验证网络连通) CAT1_Send_ATCmd("AT+CGPADDR", "", 2000); return Ok; } // 辅助:AT指令发送与响应检查函数 en_result_t CAT1_Send_ATCmd(char *cmd, char *resp, uint16_t timeout) { uint8_t buf[128] = {0}; uint16_t len = 0; HAL_UART_Transmit(&huart2, (uint8_t*)cmd, strlen(cmd), timeout); HAL_UART_Transmit(&huart2, (uint8_t*)"\r\n", 2, timeout); // 指令结尾必须加\r\n HAL_Delay(100); len = HAL_UART_Receive(&huart2, buf, 127, timeout); buf[len] = '\0'; // 检查响应是否包含预期字符串 if(strstr((char*)buf, resp) != NULL) return Ok; return Error; }(二)应用 1:MQTT 数据上报(温湿度 + 设备状态)
1. MQTT 连接与发布流程(EC200U AT 指令)
// MQTT 初始化与连接(OneNET平台为例) en_result_t CAT1_MQTT_Connect(void) { // 1. 启动MQTT服务 if(CAT1_Send_ATCmd("AT+CMQTTSTART", "OK", 2000) != Ok) return Error; // 2. 配置MQTT参数(客户端ID、用户名、密码、保活时间) // 格式:AT+CMQTTACCQ=客户端ID,清理会话,用户名,密码,保活时间 char mqtt_cfg[128]; sprintf(mqtt_cfg, "AT+CMQTTACCQ=0,\"CAT1_001\",0,\"产品ID\",\"设备密钥\",60"); if(CAT1_Send_ATCmd(mqtt_cfg, "OK", 3000) != Ok) return Error; // 3. 连接MQTT服务器(OneNET:183.230.40.39:1883) if(CAT1_Send_ATCmd("AT+CMQTTCONNECT=0,\"tcp://mqtt.heclouds.com\",1883,60", "CONNACK OK", 5000) != Ok) return Error; return Ok; } // MQTT 发布数据(温湿度+信号强度) en_result_t CAT1_MQTT_Publish(float temp, float humi, uint8_t csq) { char payload[128], topic[64]; // 1. 构造JSON payload sprintf(payload, "{\"temp\":%.1f,\"humi\":%.1f,\"csq\":%d,\"time\":\"%s\"}", temp, humi, csq, "2026-04-16"); // 2. 构造发布指令(AT+CMQTTTOPIC=0,主题; AT+CMQTTPAYLOAD=0,长度; AT+CMQTTPUB=0,QoS) sprintf(topic, "AT+CMQTTTOPIC=0,\"$sys/产品ID/设备ID/dp/post/json\""); if(CAT1_Send_ATCmd(topic, "OK", 1000) != Ok) return Error; sprintf(payload, "AT+CMQTTPAYLOAD=0,%d,%s", strlen(payload), payload); if(CAT1_Send_ATCmd(payload, "OK", 2000) != Ok) return Error; if(CAT1_Send_ATCmd("AT+CMQTTPUB=0,0,0", "OK", 3000) != Ok) return Error; return Ok; }2. 主函数调用
int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); // CAT.1串口 MX_USART1_UART_Init(); // 调试串口 float temp = 25.5, humi = 60.0; uint8_t csq = 25; // 1. 初始化CAT.1网络 if(CAT1_Init_Network() == Ok) { // 2. 连接MQTT if(CAT1_MQTT_Connect() == Ok) { // 3. 循环上报数据 while(1) { CAT1_MQTT_Publish(temp, humi, csq); HAL_Delay(10000); // 10s上报一次 temp += 0.1; humi += 0.5; // 模拟数据变化 } } } while(1); }(三)应用 2:LBS 基站定位(低成本定位方案)
1. LBS 定位 AT 指令(EC200U)
// LBS 基站定位(获取经纬度、基站信息) en_result_t CAT1_LBS_GetLocation(float *lat, float *lon, char *lbs_info) { uint8_t buf[256] = {0}; uint16_t len = 0; // 1. 发送LBS定位指令 CAT1_Send_ATCmd("AT+CLBS=1,1", "", 5000); HAL_Delay(2000); // 2. 读取响应(格式:+CLBS: 0,纬度,经度,精度,时间,基站数,基站信息) len = HAL_UART_Receive(&huart2, buf, 255, 3000); buf[len] = '\0'; // 3. 解析经纬度(简化示例,实际需用sscanf解析) if(strstr((char*)buf, "+CLBS: 0") != NULL) { sscanf((char*)buf, "+CLBS: 0,%f,%f", lat, lon); strcpy(lbs_info, (char*)buf); return Ok; } return Error; }2. 定位数据上报
// 主函数中调用 float lat, lon; char lbs_info[256]; if(CAT1_LBS_GetLocation(&lat, &lon, lbs_info) == Ok) { // 上报定位数据到MQTT CAT1_MQTT_Publish_Location(lat, lon); }(四)应用 3:OTA 远程固件升级(设备远程维护)
1. OTA 升级流程(EC200U AT 指令)
- 云平台上传固件包,生成下载链接
- 设备通过 MQTT 接收升级指令与 URL
- CAT.1 模块通过 HTTP 下载固件到 Flash
- 固件校验(MD5)、升级、重启
2. 核心 AT 指令
// OTA 固件下载(HTTP) en_result_t CAT1_OTA_Download(char *url) { char cmd[128]; // 1. 配置HTTP参数 sprintf(cmd, "AT+HTTPINIT"); if(CAT1_Send_ATCmd(cmd, "OK", 1000) != Ok) return Error; sprintf(cmd, "AT+HTTPPARA=\"URL\",\"%s\"", url); if(CAT1_Send_ATCmd(cmd, "OK", 1000) != Ok) return Error; // 2. 发起HTTP GET下载 if(CAT1_Send_ATCmd("AT+HTTPACTION=0", "OK", 10000) != Ok) return Error; // 3. 读取下载结果(简化,实际需处理文件存储与校验) CAT1_Send_ATCmd("AT+HTTPREAD", "", 5000); // 4. 关闭HTTP服务 CAT1_Send_ATCmd("AT+HTTPTERM", "OK", 1000); return Ok; }(五)应用 4:TCP 透明传输(数据透传场景)
1. TCP 连接与透传
// TCP 连接服务器 en_result_t CAT1_TCP_Connect(char *ip, uint16_t port) { char cmd[128]; sprintf(cmd, "AT+QIOPEN=1,0,\"TCP\",\"%s\",%d,0,0", ip, port); return CAT1_Send_ATCmd(cmd, "+QIOPEN: 0,0", 5000); } // TCP 数据发送 en_result_t CAT1_TCP_Send(char *data, uint16_t len) { char cmd[32]; sprintf(cmd, "AT+QISEND=0,%d", len); if(CAT1_Send_ATCmd(cmd, ">", 2000) != Ok) return Error; HAL_UART_Transmit(&huart2, (uint8_t*)data, len, 3000); return CAT1_Send_ATCmd("", "SEND OK", 3000); }四、深度优化与注意事项
1. 低功耗优化(电池供电设备)
- 启用 PSM 模式:
AT+CPSMS=1,休眠电流降至 μA 级 - 按需联网:数据上报完成后断开网络,
AT+CGATT=0 - 定时唤醒:用 RTC 定时唤醒 MCU,启动 CAT.1 上报数据
2. 稳定性优化
- 网络重连机制:检测到网络断开时,重新执行初始化流程
- 指令超时重试:AT 指令失败时,重试 2~3 次
- 数据缓存:网络异常时,将数据缓存到 Flash,恢复后补发
3. 安全优化
- 启用 SSL/TLS 加密:
AT+QSSLOPEN,保护数据传输 - 设备鉴权:MQTT/HTTP 接入时,使用设备密钥 / Token 鉴权
- 固件签名:OTA 升级时,校验固件签名,防止恶意升级
4. 常见问题排查
- 模块无响应:检查供电、PWRKEY、串口接线、波特率(默认 115200)
- 网络注册失败:检查 SIM 卡、APN 设置、信号强度(CSQ<10 表示信号差)
- MQTT 连接失败:检查服务器地址、端口、客户端 ID、鉴权信息
- 定位失败:LBS 需网络注册成功,GNSS 需在户外空旷环境
五、总结
CAT.1 凭借低成本、广覆盖、多功能的优势,已成为物联网中低速场景的主流通信方案。通过MQTT 数据上报、LBS 定位、OTA 升级、TCP 透传四大核心功能的完整例程,可快速实现各类物联网设备的联网与云对接。实际开发中,需结合场景优化低功耗、稳定性、安全性,并利用 CAT.1 的扩展能力(蓝牙、GPIO、OpenCPU)进一步挖掘功能,打造更智能的物联网设备。