当前位置: 代码迷 >> Wireless >> 诚心请问关于一个GSM模块接收短信有关问题
  详细解决方案

诚心请问关于一个GSM模块接收短信有关问题

热度:9523   发布时间:2013-02-26 00:00:00.0
诚心请教关于一个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");
}
  相关解决方案