如何使用 Python 中的 AT 命令拒绝或接受对我的 GSM 调制解调器的来电?
How to reject or accept an incoming call to my GSM modem using AT commands in Python?
我编写了下面的 Python 程序来等待来电并接听或拒绝来电。根据 this document and this 文档,接受来电的适当 AT 命令是 ATA
或 ATS0
或 ATS0<n>
。并且拒绝来电的适当命令是ATH
或AT H
。
以上命令我都试过了,来电既没有接听也没有拒接!
我的Python程序:
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'AT H') # I replaced this 'AT H' with all the above
# commands, but nothing changed about the
# incoming call. It always ringing.
time.sleep(2)
finally:
phone.close()
AT H
的结果:
>>> ================================ RESTART ================================
>>>
b''
b''
b'\r\n'
b'RING\r\n'
b'AT H\r\n'
b'RING\r\n'
b'AT H\r\n'
b'RING\r\n'
b'AT H\r\n'
b'RING\r\n'
b'AT H\r\n'
b'RING\r\n'
ATH
的结果:
>>> ================================ RESTART ================================
>>>
b''
b''
b''
b'\r\n'
b'RING\r\n'
b'ATH\r\n'
b'RING\r\n'
b'ATH\r\n'
b'RING\r\n'
b'ATH\r\n'
b'RING\r\n'
ATA
的结果:
>>> ================================ RESTART ================================
>>>
b''
b''
b''
b'\r\n'
b'RING\r\n'
b'ATA\r\n'
b'RING\r\n'
b'ATA\r\n'
b'RING\r\n'
b'ATA\r\n'
b'RING\r\n'
ATS0
的结果:
>>> ================================ RESTART ================================
>>>
b''
b''
b''
b'\r\n'
b'RING\r\n'
b'ATS0\r\n'
b'RING\r\n'
b'ATS0\r\n'
b'RING\r\n'
正如你在上面看到的,无论我发送给它的 AT 命令如何,GSM 调制解调器都会继续响铃。我的程序有什么问题?
请注意,我的调制解调器是 D-Link DWM-156,我可以在 Python 中使用它成功发送短信或拨打电话。
提前致谢。
在每个 AT
命令的末尾添加一个 CR 使其成为有效的 AT
命令
我们无法直接拒接来电。要拒绝来电,我们应该配置语音挂断控制命令,
AT+CVHU(语音挂断指令)
ATH指令依赖于AT+CVHU
phone = serial.Serial("/dev/ttyAMA0", baudrate=9600, timeout=1)
try:
time.sleep(1)
while(1):
x = phone.readline()
print(x)
if (x == b'RING\r\n'):
phone.write('ATH'+'\r\n')
time.sleep(2)
finally:
phone.close()
我编写了下面的 Python 程序来等待来电并接听或拒绝来电。根据 this document and this 文档,接受来电的适当 AT 命令是 ATA
或 ATS0
或 ATS0<n>
。并且拒绝来电的适当命令是ATH
或AT H
。
以上命令我都试过了,来电既没有接听也没有拒接!
我的Python程序:
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'AT H') # I replaced this 'AT H' with all the above
# commands, but nothing changed about the
# incoming call. It always ringing.
time.sleep(2)
finally:
phone.close()
AT H
的结果:
>>> ================================ RESTART ================================
>>>
b''
b''
b'\r\n'
b'RING\r\n'
b'AT H\r\n'
b'RING\r\n'
b'AT H\r\n'
b'RING\r\n'
b'AT H\r\n'
b'RING\r\n'
b'AT H\r\n'
b'RING\r\n'
ATH
的结果:
>>> ================================ RESTART ================================
>>>
b''
b''
b''
b'\r\n'
b'RING\r\n'
b'ATH\r\n'
b'RING\r\n'
b'ATH\r\n'
b'RING\r\n'
b'ATH\r\n'
b'RING\r\n'
ATA
的结果:
>>> ================================ RESTART ================================
>>>
b''
b''
b''
b'\r\n'
b'RING\r\n'
b'ATA\r\n'
b'RING\r\n'
b'ATA\r\n'
b'RING\r\n'
b'ATA\r\n'
b'RING\r\n'
ATS0
的结果:
>>> ================================ RESTART ================================
>>>
b''
b''
b''
b'\r\n'
b'RING\r\n'
b'ATS0\r\n'
b'RING\r\n'
b'ATS0\r\n'
b'RING\r\n'
正如你在上面看到的,无论我发送给它的 AT 命令如何,GSM 调制解调器都会继续响铃。我的程序有什么问题?
请注意,我的调制解调器是 D-Link DWM-156,我可以在 Python 中使用它成功发送短信或拨打电话。 提前致谢。
在每个 AT
命令的末尾添加一个 CR 使其成为有效的 AT
命令
我们无法直接拒接来电。要拒绝来电,我们应该配置语音挂断控制命令,
AT+CVHU(语音挂断指令)
ATH指令依赖于AT+CVHU
phone = serial.Serial("/dev/ttyAMA0", baudrate=9600, timeout=1)
try:
time.sleep(1)
while(1):
x = phone.readline()
print(x)
if (x == b'RING\r\n'):
phone.write('ATH'+'\r\n')
time.sleep(2)
finally:
phone.close()