如何在通话期间通过 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 上发送/接收短信?