MCU控制GPRS模块(M23G)收发短信接打电话-开发总结解决办法
发布时间:2010-06-14 16:52:35 文章来源:www.iduyao.cn 采编人员:星星草
MCU控制GPRS模块(M23G)收发短信接打电话-开发总结
源码:http://download.csdn.net/source/2286092
这两天用MCU控制GPRS模块(M23G)收发短信接打电话碰到了一些问题,也走了一些弯路,总的看来用AT命令控制GPRS算是比较简单,不过要注意的是一些细节问题,如果没注意到这些问题将会耗费很多时间。
网上相关的资料有很多,但感觉比较杂,一些细节问题没有强调清楚。先看下发短信的几个AT命令。
直接在pc上面串口操作的命令如下:
依次执行下列命令,
AT+CMGF=1 //文本方式
AT+CSCS="GSM" //字符模式
AT+CSMP=17,168,0,0 //字符编码
AT+CSCA="+8613800791500",145 //短信中心号码
AT+CMGS="136********" //发短信命令 接收短信的号码
//当命令AT+CMGS="136********"执行后超级终端出现>(大于号),提示用户在大于号后面输入短信内容。
短信内容输入完毕后直接按键盘上的Ctrl+z确认发送。除命令“AT+CMGS="136********"”执行成功后是返回“>”,其它命令执行成功后都直接返回“OK”,当然“AT+CMGS="136********"”这条命令执行完后是等待用户的输入,用户按
Ctrl+z发送后,发送成功依然会返回“OK”。
接收短信的操作更简单,只要通过执行AT+CMGF=1命令选择文本方式后就能通过读取命令读取收到的短信,收短信我们不用设置GPRS怎样接收短信,因为GPRS接收短信的操作是内部完成的,我们不用去理会。当然如果之前你发短信的操作已经执行了AT+CMGF=1命令的话,那你收短信的时候就没必要重复操作了。
收短信的操作如下:
1.列举所有短信:
AT+CMGF=1
AT+CMGL="ALL" //读取所有短信
2.列举未读的短信:
AT+CMGF=1
AT+CMGL=”REC UNREAD”
3.列举已读的短信:
AT+CMGF=1
AT+CMGL=”REC READ”
其实叫列举,也就是读取的意思,只是读取的是多条短信,是所有的短信内容的列表。
4.读取短信:
AT+CMGF=1
AT+CMGR=短信索引号
删除短信的操作:
按索引号删除:
AT+CMGF=1
AT+CMGD=短信存储索引号 //当读出所有短信时,每条短信前面都对应了本条//短信的索引编号
删除已读短信:
AT+CMGF=1
AT+CMGD=1,2
接听电话:
简单的一个ATA就搞定。
拨打电话:
ATD136********; //别漏掉了“;”
挂电话命令:
ATH
以上所讲的都是直接通过超级终端或串口调试平台进行的命令操作。在编程应用这些命
令时还要注意一些细节问题。
编程中注意除了确认短信发送的这条指令0X1A(对应ctrl+z的十六进制表示)外每条命令结尾都要加上“\r\n”。
具体发短信的操作可以参考我的代码:
//发送短信
//参数 1短信号码 2短信内容
void SendMessage(unsigned char *num,unsigned char *massge)
{
unsigned char instuct[]="AT+CMGS=\"";
unsigned char numinstuct[27];
strcpy(numinstuct,instuct);
strcat(numinstuct,num);
strcat(numinstuct,"\"\r\n");
USART1_Write_DR(numinstuct);//AT+CMGS=\"13607088025\"
USART1_Write_DR(massge);
UART1_SendByte(0x1a);
}
调用该函数:
SendMessage("15870020706","test!\r\n"); //发送短信 注意加\r\n
我做本程序所要实现的是从短信的内容中提取相关的控制命令,MUC根据相关命令执行对应的操作,一开始我想从GPRS通过串口返回的字符串中提取相关的命令字符,由于GPRS通过串口返回的字符有其特殊的格式,提取比较麻烦,而且提取得按一定的格式来操作,显然操作起来不灵活,而用户也得按这种格式来发命令显然不方便用户操作,并且使得用户的操作更为复杂。
折腾了好一阵子后我突然意识到直接用strstr(char *str1, char *str2)(未检测到str2则返回NULL,检测到了就返回从str2开始到后面的字符)函数检测字符更方便,而且可以实现短信内容的智能识别,这样我只要判断短信中存不存在相应的命令字符就可以,没必要考虑繁杂的字符串提取问题。而且用户发命令可以相对自由,只要单个命令不出错,多个命令之间可以自由排列,甚至可以出现不相关的字符,当然前提是这些不相关的字符的组合不会出现用户命令协议中的命令字符。
编写AT命令时大家还得注意确保字符是在英文输入法下输入的。
就总结到这里了,大家可以参考我的代码,进一步分析我以上总结的。
资源刚上传,csdn真正审核中,下次附上源码地址。
------解决方案--------------------
呵呵。。。刚开学
顶楼主
------解决方案--------------------
正在学这个,谢谢
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
关于3G模块上网速率的疑问
模块通过的是串口和主板连接,串口最高的波特率是115200bps,那市场上的上网卡是如何实现14Mbps的速率的?
...
-
如何window xp 或win7下的蓝牙编程
想编写一个window xp 或win7下的蓝牙小程序,却无从下手,网上找到的例子,都是在window mobie上的,...
-
有没集成wifi功能的单片机或处理器件芯片
有没集成wifi功能的单片机或处理器件芯片. 我想将该处理器做一个WIFI终端设备来用. 芯...
-
求 一种3G无线路由器,有两个SIM卡插槽,
有没有 一种3G无线路由器,有两个SIM卡插槽,同时支持联通和电信两种3G模式,同时有RJ45接口作为...
-
3G视频服务器
公司开发IPCAM,希望视频可以通过3G无线网络发送,让外访问。
已经开发了相关的板子,让联通的3G卡可以拔号上网,拔号很成...
-
GPRS模块和电脑通信
由于电脑是动态IP的,所以不知道要怎么下手!不可能每次都手动设置IP!
------解决方案--------------------
只...
-
SIM900发送AT+SAPBR=1,1返回错误!!!
用单片机给SIM900发送指令和结果返回如下,到第三条AT+SAPBR=1,1时,就返回+CME ERROR: operation n...
-
不同接口wifi的问题
wifi模块的的接口有很多比如SPI、SDIO、USB等,它们的传输数据的速率(M/S)是一样的吗?能达到多少?如果是要实时传输...
-
PC做服务端,GPRS模块做客户端,PC要配置什么才能与GPRS通信?
我们在做一个智能公交站牌,公交站牌上能显示某一站车的预计到达时间,现在...
-
【求教】华为3G模块EM770W,有哪位高人使用过或了解的吗?
EM770W无线通信模块支持WCDMA 3G
现在EM770W这个模块拿到手了,用串口连接,给...