SIM900+Arduino执行AT+CMGL="REC UNREAD"返回302错误求助
SIM900模块搭配Arduino读取短信出现+CMS ERROR:302的解决方案
问题描述
我正尝试使用SIM900模块搭配Arduino读取短信,编写的代码如下:
Serial.println("Initializing..."); delay(1000); SIM900.println("AT"); //Handshaking with SIM900 updateSerial(); SIM900.println("AT+CPIN?"); updateSerial(); SIM900.println("AT+IPR?"); updateSerial(); SIM900.println("AT+CSQ"); //Signal quality test, value range is 0-31 , 31 is the best updateSerial(); SIM900.println("AT+CCID"); //Read SIM information to confirm whether the SIM is plugged updateSerial(); SIM900.println("AT+CREG?"); updateSerial(); SIM900.println("AT+CPMS=?"); updateSerial(); SIM900.println("AT+CSCA?"); updateSerial(); SIM900.println("AT+CSMS=?"); updateSerial(); SIM900.println("AT+COPS?"); updateSerial(); SIM900.println("AT+CFUN?"); updateSerial(); SIM900.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); SIM900.println("AT+CNMI=2,2,0,0,0"); updateSerial(); SIM900.println("AT+CMGL=\"REC UNREAD\""); updateSerial();
执行代码后得到如下输出:
AT OK AT+CPIN? +CPIN: READY OK AT+IPR? +IPR: 0 OK AT+CSQ +CSQ: 14,0 OK AT+CCID 8950201021034280272F OK AT+CREG? +CREG: 2,1,"0115","2CA1" OK AT+CPMS=? +CPMS: ("SM"),("SM"),("SM") OK AT+CSCA? +CSCA: "+50255300222",145 OK AT+CSMS=? +CSMS: (0,1) OK AT+COPS? +COPS: 0,0,"Claro GTM" OK AT+CFUN? +CFUN: 1 OK AT+CMGF=1 OK AT+CNMI=2,2,0,0,0 OK AT+CMGL="REC UNREAD" +CMS ERROR: 302
执行AT+CMGL="REC UNREAD"指令时返回+CMS ERROR: 302,怀疑CNMI或COPS设置存在问题,寻求修复方法。
解决方案
+CMS ERROR: 302通常表示无效的内存索引或短信存储配置错误,结合你的模块输出,给出以下修复步骤:
- 明确短信存储位置:从
AT+CPMS=?的输出可知,你的SIM900模块仅支持SIM卡(SM)作为短信存储介质,执行指令AT+CPMS="SM","SM","SM",将短信的读写存储位置都指定为SIM卡,确保返回OK。 - 调整CNMI设置:当前
AT+CNMI=2,2,0,0,0会让新短信直接主动推送到串口,可能干扰AT+CMGL的读取操作。先执行AT+CNMI=0,0,0,0,0关闭主动推送,完成短信读取后再重新开启即可。 - 重新执行读取指令:完成上述配置后,再次发送
AT+CMGL="REC UNREAD",查看是否能正常返回未读短信。 - 额外排查:如果仍报错,可先执行
AT+CMGL="ALL"确认SIM卡内是否存在短信,同时检查SIM卡是否有足够的存储空间(通过AT+CPMS?查看已用/可用存储数量)。
分步验证指令
- 发送
AT+CPMS="SM","SM","SM",确认返回OK - 发送
AT+CNMI=0,0,0,0,0,关闭主动推送 - 发送
AT+CMGL="REC UNREAD",验证读取结果
内容的提问来源于stack exchange,提问作者QLands - Carlos Quiros
相关产品推荐
相关产品推荐

