模组通信概览:常见无线模组类型与AT指令集基础
做嵌入式开发这么多年,我接触过的无线模组少说也有几十款。从最早的GSM/GPRS,到现在的Wi-Fi、BLE、LoRa、NB-IoT,每种模组都有自己的脾气。说白了,选模组就像选工具——你得知道它擅长什么,不擅长什么。
这一章,我带大家把常见的无线模组类型捋一遍,再聊聊AT指令集这个“通用语言”。嗯,这些都是后续联调的基础,得打好。
常见无线模组类型
目前市面上主流的无线模组,我按应用场景分了四大类。咱们一个一个看。
| 模组类型 | 工作频段 | 典型速率 | 通信距离 | 功耗 | 典型场景 |
|---|---|---|---|---|---|
| Wi-Fi | 2.4GHz / 5GHz | 11Mbps ~ 1Gbps | 室内 30~100m | 高 | 智能家居、摄像头、网关 |
| BLE | 2.4GHz | 125Kbps ~ 2Mbps | 10~100m | 极低 | 穿戴设备、传感器、信标 |
| LoRa | Sub-1GHz | 0.3Kbps ~ 50Kbps | 2~15km | 低 | 远距离传感器、智慧农业 |
| NB-IoT | 授权频段(LTE) | ~250Kbps | 10~15km | 低 | 水表、气表、资产追踪 |
我的经验:选型时别只看参数表。Wi-Fi虽然快,但功耗高,电池供电的设备慎用。LoRa距离远,但速率低,传不了图片。NB-IoT需要SIM卡和运营商支持,部署成本要考虑进去。
Wi-Fi模组
Wi-Fi模组应该是大家最熟悉的。ESP8266、ESP32这些芯片,几乎成了物联网入门的标配。我个人习惯把Wi-Fi模组分成两类:
- 透传型:比如ESP-01S,出厂自带AT固件,你发AT指令它就干活。适合快速原型验证。
- SDK型:比如ESP32,你可以用ESP-IDF或Arduino写代码,自由度更高。适合量产产品。
我在项目中遇到过一个问题:用ESP8266做OTA升级,结果模组内存不够,升级到一半就挂了。后来换了ESP32,才搞定。你想想看,选型时留点余量,真的很重要。
BLE模组
BLE(低功耗蓝牙)这几年发展很快。它的核心优势是功耗极低,一颗纽扣电池能跑好几年。常见的BLE模组有Nordic的nRF51/nRF52系列、TI的CC254x系列,还有国产的DA14580。
BLE的通信模型是“主机-从机”模式。从机广播数据,主机扫描并连接。我建议初学者先搞清楚GATT(通用属性协议)的概念——它定义了服务和特征值,说白了就是数据怎么组织、怎么读写。
小技巧:调试BLE时,用手机上的nRF Connect或LightBlue工具扫描广播包,能快速验证模组是否在工作。我曾经靠这个工具,半小时就定位了一个广播间隔配置错误的问题。
LoRa模组
LoRa是一种扩频调制技术,主打远距离和低功耗。它工作在Sub-1GHz频段(中国是470~510MHz),穿透能力强,郊区环境下通信距离能到10公里以上。
常见的LoRa模组有Semtech的SX127x系列,以及集成了MCU的ASR650x。LoRa本身只定义了物理层,上层协议通常用LoRaWAN。嗯,这里要注意:LoRaWAN有Class A/B/C三种模式,Class A最省电,Class C延迟最低。
我记得有一次做智慧农业项目,传感器放在大棚里,用Wi-Fi覆盖不了,用NB-IoT又嫌贵。最后选了LoRa,一个网关覆盖了十几个大棚,效果很好。
NB-IoT模组
NB-IoT(窄带物联网)是3GPP定义的蜂窝物联网标准。它直接跑在运营商的授权频段上,不需要自己搭网关。常见的模组有移远BC95、BC26,中移物联M5310等。
NB-IoT的优势是覆盖深、安全性高、运营商级管理。但缺点也很明显:有流量费,而且不支持移动性(不能跨基站切换)。所以它最适合静态、低速率、小数据量的场景,比如智能水表、烟雾报警器。
避坑指南:我曾经在一个项目中用了NB-IoT模组,结果发现模组在弱信号下频繁重连,功耗反而比正常通信还高。后来加了信号强度判断逻辑,信号太差时就进入深度睡眠,问题才解决。
模组AT指令集基础
AT指令,说白了就是“Attention”的缩写。它最早用于调制解调器控制,后来被无线模组广泛采用。你通过串口发一串ASCII字符,模组就执行对应的操作。
AT指令的格式很简单:
AT+<命令名>=<参数1>,<参数2>,...
常见的AT指令分类:
- 基础控制:AT(测试)、AT+RST(重启)、AT+GMR(查看版本)
- 网络配置:AT+CWMODE(设置Wi-Fi模式)、AT+CWJAP(连接Wi-Fi)
- 数据传输:AT+CIPSTART(建立TCP连接)、AT+CIPSEND(发送数据)
- MQTT相关:AT+MQTTUSERCFG(配置MQTT)、AT+MQTTCONN(连接MQTT服务器)
我的习惯:拿到一个新模组,第一件事就是看它的AT指令集文档。我会把常用的指令整理成一个表格,贴在工位上。联调时遇到问题,先查指令格式对不对,能省很多时间。
AT指令通信流程
下面这张图展示了典型的AT指令交互流程。主控MCU通过UART发送指令,模组解析后返回响应。
流程很简单:MCU发指令 → 模组执行 → 返回结果。但实际联调时,有几个坑要注意:
- 回车换行:AT指令必须以
\r\n结尾,少一个都不行。我见过有人用\n代替,模组死活没反应。 - 响应超时:有些指令执行时间长(比如连接Wi-Fi),MCU要设置合理的超时等待,别发完指令就急着读响应。
- URC处理:模组可能随时主动上报数据(比如收到TCP数据),MCU的串口接收要能处理这种“异步消息”。
AT指令调试技巧
调试AT指令时,我建议先用串口助手(比如SSCOM、Putty)手动发指令,确认模组能正常响应。这一步能排除很多硬件连接问题。
调试步骤:
- 用USB转TTL工具连接模组,波特率通常设为115200或9600。
- 发
AT指令,看是否返回OK。 - 发
AT+GMR查看固件版本,确认模组正常。 - 逐步测试网络连接、数据传输等指令。
嗯,这里还要提一句:不同厂商的AT指令集有差异。比如乐鑫的ESP8266用AT+CWJAP连接Wi-Fi,而移远的EC200用AT+QICSGP配置APN。联调前一定要看对应的AT指令手册,别想当然。
本章小结
这一章我们聊了四种常见无线模组的特点和选型思路,也讲了AT指令集的基础用法。说白了,模组就是MCU和网络之间的“翻译官”,而AT指令就是你和翻译官沟通的“暗号”。