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

问题描述 投票:10回答:2

我编写了以下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-在此活动呼叫期间是否可以发送/接收某些数据(例如,SMS)?或者至少在此通话期间,我是否可以在该频道的另一侧(即吉米电话的扬声器上)发出声音? (我不想发送可识别的声音,噪声就足够了。尽管有一种方法可以发送可识别的声音确实更好。)

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

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

如您在上面看到的,我收到了没有,而他发送了3条短信!为什么?

python python-3.x gsm at-command pyserial
2个回答
0
投票

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

我过去曾与几个不同的GSM调制解调器品牌成功地做到这一点,并且回想起,尽管有一些设备特定的细节,但您需要发送的一般命令是相同的。

快速搜索使我知道:

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


0
投票

问题1:

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

您可以找到有关它们的组成here的详细描述。

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

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

问题2:

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

© www.soinside.com 2019 - 2024. All rights reserved.