获取设备名称连接到端口/ dev / ttyACM0

时间:2017-01-07 11:40:10

标签: python pyserial

有没有办法让设备名称连接到串口?

这段代码只给出了串口的名称。但我需要连接到它的设备名称,即诺基亚手机

import serial
import time


ser = serial.Serial('/dev/ttyACM0', 
                     460800, 
                     timeout=5, 
                     xonxoff = False, 
                     rtscts = False, 
                     bytesize = serial.EIGHTBITS, 
                     parity = serial.PARITY_NONE, 
                     stopbits = serial.STOPBITS_ONE)
sere = ser.name
print (ser, sere)

我一直在检查像gammu-detect这样的其他可能性,但我希望有一个自立的python脚本来执行此操作。有没有办法用pyserial完成它?

2 个答案:

答案 0 :(得分:1)

是的,当然。

但这与串口本身没有严格的联系。这取决于设备使用的协议。

在必要时,您将一些预设的初始数据发送到设备,它会响应制造商,名称,型号和版本或这些的一些组合。

我不确定这是否标准化,你必须搜索它。

如果它是标准化的,很可能是这样的:

1. Open the port with 9600 baud rate
2. Send the request for info
3. Use info to reset the port etc.

我知道有些程序会这样做。当检测算法询问他们是谁时,您甚至可以听到旧的56K调制解调器对查询作出反应。

现在,您必须搜索这是标准程序还是每个设备都有自己的程序。

如果您正在搜索手机,那么很可能有一款适用于手机版本,也许每台操作系统都有,如iOS,Symbian,Android,Windows * ......

如果在互联网上找不到协议,则在串口安装虚拟卡,在环路端口中间执行man,查看与手机应用程序初始通信时发送的数据。

注意:连接到互联网时请勿查看数据,即将手机用作调制解调器。您将只看到AT& T协议,这对您没什么帮助。

如果您想了解它是如何普遍使用的,请使用与虚拟串行卡相同的技术,但是当新设备向导检测到新硬件时。

P.S。我找到了什么!

尝试发送:

"\x02S\x00\x00\x00\x00\x03"

您应该返回一些包含设备数字标识符的数据。像序列号一样。

答案 1 :(得分:1)

现在情况很好!我不得不输入.read命令。这是解决方案:

import serial
import time

ser = serial.Serial('/dev/ttyACM0', 
                     460800, 
                     timeout=5, 
                     xonxoff = False, 
                     rtscts = False, 
                     bytesize = serial.EIGHTBITS, 
                     parity = serial.PARITY_NONE, 
                     stopbits = serial.STOPBITS_ONE)
#s = input('Enter AT command --> ')
#print ('AT command = ' + s)
ser.write(bytes('AT+CGMI' + '\r\n'))
ser.timeout = 1
response = ser.read(999)
print(response)
ser.close()