同题,采用quecpthon库中的atcmd.sendSync(atcmd,resp,expect,timeout)函数发送短信,函数的atcmd变量应该如何组织?atcmd=‘AT+CMGS=“13800000000”\r\nsendSync test\r\n\x1a\r\n’,还是其他方式?
该场景建议按短信 AT 命令的交互流程分两步发送,不建议把 AT+CMGS、短信正文、\x1A 一次性拼成一个 atcmd 发送。
示例写法如下:
import atcmd
resp = []
# 1. 设置短信文本模式
atcmd.sendSync('AT+CMGF=1\r\n', resp, 'OK', 1000)
# 2. 发送 CMGS,等待模块返回 > 提示符
resp = []
atcmd.sendSync('AT+CMGS="13800000000"\r\n', resp, '>', 5000)
# 3. 发送短信内容,并以 Ctrl+Z 结束,即 \x1A
resp = []
atcmd.sendSync('sendSync test\x1A', resp, 'OK', 60000)
注意点:
AT+CMGS="号码"\r\n发送后,需要等待返回>。- 短信正文后面追加
\x1A表示结束并发送。 - 正文后一般不需要再追加
\r\n,除非短信内容本身需要换行。 - 若发送中文短信,还需要根据 AT 手册配置字符集或使用 UCS2 编码,不能直接按普通字符串发送。
所以您示例中的:
AT+CMGS="13800000000"\r\nsendSync test\r\n\x1a\r\n
不推荐作为一次 sendSync 的 atcmd 参数发送,应拆成等待 > 后再发送正文。
本回答仅供参考。若问题已解决,可标记为
解决方案 ;若仍有疑问,请等待官方技术人员回复,最终请以专业解答为准。