诚心请教关于一个GSM模块接收短信问题
这几天试着学习使用一块旧的BENQ M22模块。将我的SIM卡插进去并用其他手机发短信给模块之后,用指令AT+CPMS?查询短信发现其短信存储信息不变----收不到短信
上网搜了下,说G网模块收短信,
但首先你要确保如下操作已经完成:
1) 模块上电并且AT命令同你的PC串口通信顺畅。
2) SIM卡没有欠费,并且已经登陆GSM网络(可以使用AT+CREG?查询,如果返回1或者5表示正常)。
步骤1成功,SIM卡没欠费,
但用AT+CREG?查询返回为+CREG: 0, 2
那么模块接收不到短信是否就出在没成功登陆GSM网络上,若是该如何登陆GSM,或是由硬件问题引起的(毕竟是块旧板子了)?
希望各位能帮我解决下,谢谢了
[解决办法]
不知道你是怎么操作的?
有没有设置短信类型和提示类型?
如:
AT+CMGF=1//选择文本格式
AT+CNMI=3,1//设置新消息提示信息,包含存储类型和序号,收到新短消息将提示
另外,你还可以通过
AT+CSQ?查询信号强度来确定模块的好坏!
[解决办法]
at+creg?
+creg:0,2
表示漫游,已经登陆上GPRS了~~
[解决办法]
当一条短信来了会返回+CMTI:XXXX 等消息,然后表明这条短信填到那个坑里 你要做的就是读取这个坑里的短信。
if(strstr(ReadBuff,"+CMTI: \"SM\",") && strlen(ReadBuff) < 18 )//if any sms received!
{
pos1 = 0;
pos2 = strlen(ReadBuff)-12;
for(;pos1 < pos2-1; pos1++)
{
smsposition[pos1] = ReadBuff[12+pos1];
}
printf("\n A Short Message received!");
sendatcommand(fd,"at+cmgf=1","OK") ;
sprintf(order,"%s%s","at+cmgr=",smsposition);
sprintf(sms,"%s",getresult(fd,order,"OK"));
executeflag = smsjob(fd,sms);
if(executeflag == -1 ) printf("\nmessage invalid!");
memset((void *)order,'\0',sizeof(char)* BIG_SIZE);
sprintf(order,"%s%s","at+cmgd=",smsposition);
sendatcommand(fd,order,"OK");
}