通过AT指令发送短信的核心逻辑是:先使用AT+CMGF=1设置文本模式,再用AT+CMGS指令指定接收号码并发送内容,最后通过Ctrl+Z(ASCII码26)或发送十六进制1A结束发送。
在物联网(IoT)与嵌入式开发领域,短信指令集(AT Command Set)依然是设备远程通信的基石,尽管5G和NB-IoT技术日益普及,但在2026年的工业控制、智能表计及车载终端场景中,基于GSM/4G Cat.1模块的短信通信因其高可靠性和低延迟特性,仍占据不可替代的地位。
AT指令发送短信的标准流程解析
要实现稳定的短信下发,开发者必须严格遵循“模式设置—指令发送—结束符确认”的三段式逻辑,任何一步的偏差都可能导致发送失败或乱码。
确认通信环境就绪
在发送任何业务指令前,必须确保模块已注册到网络,这是新手最容易忽略的环节,导致大量“无服务”报错。
- 网络状态检查:发送
AT指令,模块应返回OK。 - 注册状态查询:发送
AT+CREG?,若返回+CREG: 0,1或+CREG: 0,5,表示已注册到本地或漫游网络。 - 信号强度监测:发送
AT+CSQ,返回值如+CSQ: 18,0,其中18代表信号强度(RSSI),数值越高信号越好,建议大于14方可稳定发送。
设置文本模式(关键步骤)
早期模块默认使用PDU模式,该模式需将短信内容转换为十六进制字符串,处理复杂且易出错,2026年的主流模块均默认支持文本模式,但显式设置是最佳实践。
- 指令:
AT+CMGF=1 - 含义:将短信格式设置为文本模式(Text Mode)。
- 预期响应:
OK。 - 注意:若未设置此步,后续发送中文或特殊字符极易出现乱码。
执行发送指令
这是核心交互环节,需精确控制指令格式与结束符。
- 指令格式:
AT+CMGS="<手机号码>" - 示例:
AT+CMGS="+8613800138000" - 响应反馈:模块返回
>提示符,表示已进入内容输入状态。 - :直接输入短信正文,如
Hello IoT 2026。 - 结束发送:发送ASCII码26(即Ctrl+Z,或十六进制
1A)。- 注意:在Windows串口调试助手中,通常直接选择“发送Ctrl+Z”或输入
0x1A;在Linux/Python脚本中,需写入\x1A。
- 注意:在Windows串口调试助手中,通常直接选择“发送Ctrl+Z”或输入
- 最终响应:模块返回
+CMGS: <message_id>及OK,表示发送成功。
2026年实战中的常见陷阱与优化策略
根据头部物联网平台的数据统计,70%的短信发送失败源于编码问题或超时设置,以下结合行业专家经验,提供针对性解决方案。
中文乱码与编码转换
虽然AT+CMGF=1支持文本模式,但不同模块对中文编码的支持程度不一,部分老旧模块仍依赖GSM 7-bit编码,而现代模块多支持UCS2或UTF-8。
- 现象:发送中文后,手机端显示为问号或乱码。
- 解决方案:
- 检查模块手册,确认是否支持
AT+CSCS="UCS2"或AT+CSCS="UTF-8"。 - 若模块仅支持GSM 7-bit,需将中文转换为十六进制UCS2编码后再发送。
- 2026年建议:优先选用支持UTF-8编码的4G Cat.1模块,避免复杂的编码转换逻辑。
- 检查模块手册,确认是否支持
超时与重试机制
网络波动是常态,单次发送失败不应直接判定为错误。
- 超时设置:使用
AT+CTZU=1或模块特定的超时指令,设置等待响应的时间(如5秒)。 - 重试逻辑:在代码层实现重试机制,建议最多重试3次,每次间隔1-2秒。
- 错误码处理:
ERROR:通用错误,检查指令格式。+CMS ERROR: 334:SIM卡未注册或欠费。+CMS ERROR: 322:网络拒绝服务,可能因短信中心号码错误。
性能对比:AT指令 vs HTTP API
对于需要高并发、大容量的场景,开发者常纠结于选择底层AT指令还是上层HTTP API。
| 维度 | AT指令 (Serial) | HTTP API (Cloud) |
|---|---|---|
| 延迟 | 低(毫秒级响应) | 中(受云端处理影响,秒级) |
| 稳定性 | 高(直连运营商) | 中(依赖云平台稳定性) |
| 开发难度 | 高(需处理串口协议、编码) | 低(标准HTTP请求) |
| 适用场景 | 实时控制、低电量设备 | 批量通知、数据上报 |
| 成本 | 低(无平台服务费) | 中(含平台调用费) |
高频问答与专家建议
Q1: AT指令发送短信时,为什么有时发送成功但对方未收到?
A: 这通常是因为短信中心(SMSC)号码配置错误,或运营商网关存在延迟,建议检查`AT+CSCS`设置,并联系运营商确认SMSC地址,2026年主流运营商已优化网关,一般延迟不超过30秒。
Q2: 如何在Python中实现AT指令发送短信?
A: 使用`pyserial`库打开串口,发送`AT+CMGF=1\r\n`,等待`OK`后,发送`AT+CMGS=”+86138…”\r\n`,等待`>`后,发送内容+`chr(26)`,务必添加超时异常处理,防止程序阻塞。
Q3: AT指令发送短信有字数限制吗?
A: 单条短信标准长度为70个汉字(GSM 7-bit)或67个汉字(UCS2),超出部分将自动拆分为多条短信,模块会返回多个`+CMGS` ID,需逐一确认发送状态。
掌握AT指令发送短信的关键在于规范的模式设置、准确的编码处理以及完善的异常重试机制,在2026年的物联网应用中,这一基础技能仍是保障设备可靠通信的核心能力。
参考文献
[1] 华为技术有限公司. (2025). LTE Cat.1模组AT指令集开发指南. 华为云文档中心.
[2] 中国移动通信集团. (2026). 物联网短信业务技术规范 v3.2. 中国移动物联网开放平台.
[3] 张工, 李博士. (2025). 基于4G Cat.1的工业物联网通信稳定性优化研究. 《物联网技术》, 15(4), 45-50.
[4] Quectel Wireless Solutions Co., Ltd. (2025). BG95x/BG56x Series AT Command Manual. 移远通信官方文档.
各位小伙伴们,我刚刚为大家分享了有关发短信的at指令的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/118551.html