如何在活动呼叫期间通过GSM调制解调器发送和接收一些数据(Python和AT命令)

时间:2015-06-20 12:38:56

标签: python python-3.x gsm at-command pyserial

我编写了以下Python程序来与我的D-Link DWM-156 GSM modem进行通信。此程序等待来电,当收到 RING 提醒时,它会接受该来电。

幸运的是它工作正常;)

该计划:

import time
import serial

phone = serial.Serial("COM10",  115200, timeout=5)

try:
    time.sleep(1)
    while(1):
        x = phone.readline()
        print(x)
        if (x == b'RING\r\n'):
            phone.write(b'ATA\r')
            time.sleep(0.5)

finally:
    phone.close()

在运行期间输出:

>>> ================================ RESTART ================================
>>> 
b''
b''
b''
b'\r\n'
b'RING\r\n'   #Here, my friend (named "Jimmy",for example), called me.
b'OK\r\n'
b''
b''
b''
b''
b''

如上所示,接到来电后,GSM调制解调器立即接受,并从那一点到最后,我们有一个有效的电话。

我的问题:

1 - 在此有效通话期间是否可以发送/接收某些数据(例如短信)?或者至少我可以在这个有效通话期间在这个频道的另一侧(即吉米电话的扬声器)发出噪音吗? (我不想发出可识别的声音,噪音就足够了。虽然有一种方法可以发送可识别的声音,但确实更好。)

2 - 为什么此程序检测到来电,但未检测到来电短信?往下看。当Jimmy向我的GSM调制解调器发送3条短信时,你可以看到我程序的输出(并且他在我的手机上收到了所有发送的“已发送”通知)。

>>> ================================ RESTART ================================
>>> 
b''
b''
b''
b''
b''
b''
b''

如上所述,我收到没有,而他发送了3条短信!为什么呢?

2 个答案:

答案 0 :(得分:0)

大多数GSM调制解调器需要一些初始化,以便它们发送传入的短信。 我相信这是Khalil所指的。这些是在进入循环之前应该发送的一组AT命令。

我过去已经成功完成了几个不同的GSM调制解调器品牌,并且回想一下,即使有一些特定于设备的细节,您需要发送的一般命令也是相同的。

快速搜索引导我:

也许您可以将它们作为起点。

答案 1 :(得分:0)

问题1:

我认为您需要的是 DTMF铃声。 DTMF音是与好友Jimmy交谈并按数字按钮时可以听到的声音。每个按钮([0-9],#,*,[A-D],P)都有其特定的音调。

您可以找到关于它们的组成here的神性描述。

我只是在这里报告说,有两个标准命令可让您处理DTMF音调:

  • AT + VTD =持续时间-设置音调持续时间
  • AT + VTS = dtmfSequence -发送一系列音调

问题2:

如上面的一条评论所述,可以通过AT+CNMI命令启用传入短信的URC(未经请求的结果代码),该命令的描述可以在here中找到。