使用 python 进行 DTMF 解码
DTMF decode using python
我正在尝试使用 python 脚本解码接收到 SIM-800
模块的 DTMF 代码。
我的代码:
import serial,time
serialport = serial.Serial("/dev/ttyS0", 115200,timeout=1)
while True:
command = serialport.read(10)
ring = "RING"
ring_command = command.decode('utf-8')
ring_command = ring_command.strip()
if ring_command == ring:
serialport.write("ATA"+"\r")
print serialport.read(20)
serialport.write("AT+DDET=1"+"\r\n") # enable DTMF
time.sleep(2)
while True:
dtmf = serialport.read(20)
if dtmf != "":
dtmf_new = dtmf.strip('+DTMF:')
print dtmf_new
time.sleep(1)
else:
print "There were notthing"
但我仍然得到输出:+DTMF: B
。
为了解码 RING
命令,我使用了 raspberry-exchange 中给出的说明。
在这里,我也在 strip()
之前尝试过 decode('utf-8')
,但仍然是相同的答案。
DTMF 代码由另一个 SIM-800
和 Raspberry-pi 发送。
提前致谢。
在@stovfl 和我办公室的一些同事的帮助下,我已经解决了我的问题。
我刚刚更改了如何去除从 DTMF 接收到的结果代码。
import serial,time
serialport = serial.Serial("/dev/ttyS0", 115200,timeout=1)
while True:
command = serialport.read(10)
print(command)
ring = "RING"
ring_command = command.decode('utf-8') # Incoming call
ring_command = ring_command.strip() # Decoding incoming RING message
print("Ring decoded : "+ ring_command)
if ring_command == ring:
serialport.write("ATA"+"\r")
print serialport.read(10)
serialport.write("AT+DDET=1"+"\r\n") # enable DTMF
print serialport.read(10)
while True:
dtmf = serialport.read(20)
if len(dtmf) > 8:
print dtmf[9] # Just print the code we sent, Original -> `+DTMF: C`
time.sleep(1)
else:
print "DTMF is less than 8 char"
time.sleep(1)
我上面的代码,我试图从我的字符串中删除 +DTMF:
,这里我只是从接收字符串中得到第 [9]
个元素。
这是现在 100% 有效的代码,经过多次测试。
我正在尝试使用 python 脚本解码接收到 SIM-800
模块的 DTMF 代码。
我的代码:
import serial,time
serialport = serial.Serial("/dev/ttyS0", 115200,timeout=1)
while True:
command = serialport.read(10)
ring = "RING"
ring_command = command.decode('utf-8')
ring_command = ring_command.strip()
if ring_command == ring:
serialport.write("ATA"+"\r")
print serialport.read(20)
serialport.write("AT+DDET=1"+"\r\n") # enable DTMF
time.sleep(2)
while True:
dtmf = serialport.read(20)
if dtmf != "":
dtmf_new = dtmf.strip('+DTMF:')
print dtmf_new
time.sleep(1)
else:
print "There were notthing"
但我仍然得到输出:+DTMF: B
。
为了解码 RING
命令,我使用了 raspberry-exchange 中给出的说明。
在这里,我也在 strip()
之前尝试过 decode('utf-8')
,但仍然是相同的答案。
DTMF 代码由另一个 SIM-800
和 Raspberry-pi 发送。
提前致谢。
在@stovfl 和我办公室的一些同事的帮助下,我已经解决了我的问题。
我刚刚更改了如何去除从 DTMF 接收到的结果代码。
import serial,time
serialport = serial.Serial("/dev/ttyS0", 115200,timeout=1)
while True:
command = serialport.read(10)
print(command)
ring = "RING"
ring_command = command.decode('utf-8') # Incoming call
ring_command = ring_command.strip() # Decoding incoming RING message
print("Ring decoded : "+ ring_command)
if ring_command == ring:
serialport.write("ATA"+"\r")
print serialport.read(10)
serialport.write("AT+DDET=1"+"\r\n") # enable DTMF
print serialport.read(10)
while True:
dtmf = serialport.read(20)
if len(dtmf) > 8:
print dtmf[9] # Just print the code we sent, Original -> `+DTMF: C`
time.sleep(1)
else:
print "DTMF is less than 8 char"
time.sleep(1)
我上面的代码,我试图从我的字符串中删除 +DTMF:
,这里我只是从接收字符串中得到第 [9]
个元素。
这是现在 100% 有效的代码,经过多次测试。