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

Posted

技术标签:

【中文标题】如何在通话期间通过 GSM 调制解调器发送和接收一些数据(Python 和 AT 命令)【英文标题】:How to send and receive some data via a GSM modem during an active call (Python and AT Command) 【发布时间】:2015-09-06 09:07:15 【问题描述】:

我编写了下面的 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 条短信!为什么?

【问题讨论】:

我还是不明白你想在通话期间发送什么样的数据?...你说“噪音”就足够了...有什么目的? 数据类型无关紧要。在第一步中,我只想看看是否可以在活动通话期间接收一些数据。例如,当您使用手机给您的朋友打电话时,如果您的朋友突然按下其中一个键(1,2 ....),您会听到哔声,对吗?我想收到这个哔声!目的是什么?目的是编写一个程序来处理这种命令(呼叫后的命令)。你有没有经历过对方女人说“按 1 表示 x,按 2 表示 y”等等的那些自动答案?我几乎想写这样的程序(不完全是) @KhalilAmmour-خليلعمور 我说我想发送“噪音”,因为:1- 这个命令对我们来说不是真正可识别的声音,这些只是一些数字。 2- 我不想让问题复杂化。 关于您的第二个问题...您需要检查您的 "3.5.3.3.1 +CNMI - 终端设备的新消息指示" 配置,从“@ 987654322@" sparkfun.com/datasheets/Cellular%20Modules/… 【参考方案1】:

问题 1:

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

你可以找到关于它们是如何组成的很好的描述here。

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

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

问题 2:

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

【讨论】:

【参考方案2】:

大多数 GSM 调制解调器需要进行一些初始化,以便向传入的 SMS 发出信号。 我相信这就是哈利勒所指的。这些是您应该在进入循环之前发送的一组 AT 命令。

我过去曾使用几个不同品牌的 GSM 调制解调器成功地做到了这一点,并记得即使有一些特定于设备的详细信息,但您需要发送的一般命令是相同的。

快速搜索将我带到:

http://www.testech-elect.com/enfora/tutorial_send_receive_sms_using_gsm_modem.htm http://www.smssolutions.net/tutorials/gsm/receivesmsat/

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

【讨论】:

以上是关于如何在通话期间通过 GSM 调制解调器发送和接收一些数据(Python 和 AT 命令)的主要内容,如果未能解决你的问题,请参考以下文章

Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

如何通过USB GSM调制解调器从VB应用程序发送短信(华为E1731)

GSM调制解调器的反应太迟了

编写 GSM 调制解调器驱动程序?

如何在 Windows 中获取 COM 端口的友好名称?

向 USB GSM 调制解调器发送“AT”命令在 Python 中返回空字符串