用python中的PySerial与GSM调制解调器进行通信

2024-10-02 08:23:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个DWM-156 GSM modem。在下面,您可以看到将GSM调制解调器插入USB端口后添加到我的计算机的设备列表:

enter image description here请注意,每次将调制解调器连接到计算机时,它都使用不同的COM端口号。

现在我想用Python或任何其他语言向这个调制解调器发送一些AT命令。实际上,我想从拨号电话接听/拨打电话,并记录在通信过程中传输的原始数据。搜索之后,我在SO中找到了this问题。其中一位回答者建议使用以下代码:

import serial

serialPort = serial.Serial(port=PORT_NUMBER,baudrate=115200,timeout=0,rtscts=0,xonxoff=0)
def sendatcmd(cmd):
    serialPort.write('at'+cmd+'\r')

print 'Loading profile...',
sendatcmd('+npsda=0,2')

我将端口号替换为9、10和12。结果如下:

^{pr2}$

我的问题:

  1. 而我没有收到任何回应?在
  2. 为什么在第三个程序中,它throw无法打开端口“COM13”,而我正试图连接到COM12?在
  3. 有没有更有效和更好的方法来使用GSM调制解调器监听电话?(我想用拨号电话拨打插入GSM调制解调器的SIM卡,并记录在通信过程中传输的原始数据。)

Tags: 端口cmd调制解调器原始数据过程计算机记录serial
1条回答
网友
1楼 · 发布于 2024-10-02 08:23:49
  1. While I don't receive any response?

您永远不会调用serialPort.read()来读取任何响应。在

  1. Why in the third program it throw could not open port 'COM13' while I am trying to connect to COM12?

Serial类来自lib\site-packages\serial\serialwin32.py,是Win32Serial类的包装器。在

Win32Seriallib\site-packages\serial\serialutil.py中的SerialBase继承,并通过调用SerialBase初始化器来初始化自身。在

SerialBase通过将给定的端口值分配给port属性来设置其端口值,该属性调用SerialBase.setPort(port)。在

setPort(port)检查传入的值是字符串还是数字。它是一个数字,因此它调用Win32Serial类中的makeDeviceName(port)。在

makeDeviceName(port)调用device(port)。在

device(port)是一个函数,它将1加到一个数的前面,并将COM放在前面:

def device(portnum):
    """Turn a port number into a device name"""
    return 'COM%d' % (portnum+1) # numbers are transformed to a string

为什么?我不知道。但是如果你传递一个字符串,它不会改变它。试着给它一个字符串:serial.Serial(port="COM12"...而不是serial.Serial(port=12-但我怀疑这是后台干扰,这与设备管理器屏幕截图中描述的“调试”端口有关,可能无法正常打开。在

  1. Is there any more efficient and better way to use GSM modem to sniff a call? (I want to call to the SIM card that I inserted in my GSM modem using a dial up phone set and log the raw data that transfers during this communication.)

我不明白。“拨打SIM卡”是什么意思?什么原始数据?你不能用串行链接来记录电话通话的音频数据。。。你可能无法记录其他东西发送的调制解调器数据,因为Python将打开串行端口,而其他程序无法打开它。在

相关问题 更多 >

    热门问题