如何用SIM900A与Arduino Uno通过SMS发送设备IMEI至手机?
解决方案
你不能在AT+CMGS的文本输入阶段执行AT指令,因为此时设备处于短信内容编辑状态,所有输入都会被当作短信正文。正确的流程应该是先获取IMEI,再将其作为短信内容发送,具体步骤如下:
步骤1:获取IMEI号码
先执行AT+GSN指令,设备会返回IMEI值,示例返回如下:
AT+GSN 123456789012345 OK
把返回的IMEI号码记录下来(如果是自动脚本,可以直接捕获这个返回值)。
步骤2:切换到文本模式并发送短信
- 执行
AT+CMGF=1切换到文本模式,确认设备返回OK。 - 执行
AT+CMGS="+91xxxxxxxxxx",此时设备会输出>提示符,等待输入短信内容。 - 直接输入刚才获取到的IMEI号码,然后按下Ctrl+Z(ASCII码0x1A)结束输入并触发发送。
替代方案:脚本自动化(适合批量/自动场景)
如果是通过脚本控制GSM设备,可以把获取IMEI和发送短信的流程整合,示例伪代码如下:
# 从串口获取IMEI imei=$(echo -e "AT+GSN\r" | socat /dev/ttyUSB0,115200,raw,echo=0 - | grep -v OK) # 切换文本模式 echo -e "AT+CMGF=1\r" > /dev/ttyUSB0 sleep 0.1 # 触发短信发送流程 echo -e "AT+CMGS=\"+91xxxxxxxxxx\"\r" > /dev/ttyUSB0 sleep 0.1 # 输入IMEI并发送 echo -e "$imei\x1A" > /dev/ttyUSB0
注意事项
- 不要在
AT+CMGS的>提示符后输入任何AT指令,此时设备不会解析执行命令,只会把输入内容当作短信正文。 - 部分设备支持
AT+CMGS的参数化发送(直接在指令中携带内容),但这种方式兼容性不如分步操作稳定。
内容的提问来源于stack exchange,提问作者clye
相关产品推荐
相关产品推荐

