轮询调制解调器输入数据的最佳设计是什么?

时间:2009-09-14 18:59:15

标签: python modem gsm at-command

我有一台GSM调制解调器连接到我的电脑,我想接收使用我编写的python程序发送给它的短信,我只是想知道什么是轮询数据的最佳技术。

我应该编写一个具有无限循环的程序,该循环不断检查传入的短信,即在循环内,程序发送AT命令并读取输入数据。或者调制解调器有一种方式来发信号通知传入数据(短信)的应用。

我试图想象手机只是一个GSM调制解调器,当收到短信时,手机就会提醒您这个事件,或者手机软件是否有无限循环来轮询输入数据。

2 个答案:

答案 0 :(得分:3)

我之前写过类似的东西。有一种方法可以使用AT命令告诉调制解调器每次收到短信时都会发出信号。

作为参考,我在嵌入式应用程序中使用Maestro 100 GSM Modem

首先,您必须正确初始化调制解调器。我使用短信的文本模式,但你可能正在使用不同的东西。从这些中挑选你想要的东西。 AT + CNMI是最重要的。

AT&F0 # Restore factory defaults
ATE0  # Disable command echo
AT+CMGF=1 # Set message format to text mode
AT+CNMI=1,1,0,1,0 # Set new message indicator
AT+CPMS="SM","SM","SM" # Set preferred message storage to SIM

然后,您将等待消息通知,如下所示。 (与索引号不匹配,通知之间可能不同)

+CMTI: "SM",0 # Message notification with index

当您收到该通知时,请检索未读短信:

AT+CMGL="REC UNREAD"  # Retrieve unread messages

我建议您也可以每5分钟左右添加一次民意调查,以防您错过通知。使用串行通信,您永远无法确定!

答案 1 :(得分:0)

我发现我记不起与SMS相关的很多AT命令集了。安德烈米勒的回答似乎响了几句。无论如何,你应该仔细阅读文档,我确信有一些问题。

我对轮询的推荐至少每5秒钟一次 - 这只是为了在断开连接时的稳健性和响应性。

我使用状态机在初始化,读取和删除消息之间导航。