8

我有一个连接到我的计算机的 GSM 调制解调器,我想使用我编写的 python 程序接收发送给它的文本消息,我只是想知道什么是轮询数据的最佳技术。

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

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

4

2 回答 2

3

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

作为参考,我在嵌入式应用程序中使用了Maestro 100 GSM 调制解调器。

首先,您必须正确初始化调制解调器。我使用的是 SMS 的文本模式,但您可能使用了不同的方式。从这些中挑选你想要的。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 分钟左右一次,以防您错过通知。使用串行通讯,您永远无法确定!

于 2009-09-14T19:14:09.457 回答
0

我发现我不记得很多与 SMS 相关的 AT 命令集。安德烈米勒的回答似乎敲响了几个钟声。无论如何,您应该非常仔细地阅读文档,我敢肯定有一些陷阱。

我对轮询的建议是至少每 5 秒一次——这只是为了在断开连接时保持稳健性和响应能力。

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

于 2009-09-14T22:39:19.013 回答