我想知道如何在python中执行此操作:
在串口com中识别名为特定名称的端口(\ Device \ VCP0和\ Device \ VCP1,这些是通过在regedit窗口中浏览获得的)
获取插入设备的ID
我已经可以通过这个扫描活动串口COM
的pySerial代码识别出可用的COMimport serial
def scan():
"""scan for available ports. return a list of tuples (num, name)"""
available = []
for i in range(256):
try:
s = serial.Serial(i)
available.append( (i, s.portstr))
s.close() # explicit close 'cause of delayed GC in java
except serial.SerialException:
pass
return available
if __name__=='__main__':
print "Found ports:"
for n,s in scan():
print "(%d) %s" % (n,s)
提前致谢
答案 0 :(得分:4)
我不确定您使用的操作系统,但这是在Win7-x64
中import win32com.client
wmi = win32com.client.GetObject("winmgmts:")
for serial in wmi.InstancesOf("Win32_SerialPort"):
print (serial.Name, serial.Description)
使用此信息,您可以解析它并获取COM编号。 您可以在此处获取Serial实例的其他属性: http://msdn.microsoft.com/en-us/library/aa394413(v=vs.85).aspx
答案 1 :(得分:1)
两个回答
1)因为这依赖于可用的硬件,所以测试代码完全可以在其编写的环境中工作,但在您的环境中不起作用 - 如果您在Windows上,则可能很有可能这是在Linux上编写的。代码使用端口0 - 不知道如何映射到COM1等。
2)在Windows上,COM端口曾经有DOS名称,如COM1,COM2 - 即一个字符串,而不是一个int(它们不像TCP / IP端口号)。最近在Windows中有\。\ COMnotanumber格式,允许更通用的名称,我已经看到这些由USB转串口转换器使用。在serialutil.py中快速查看了pyserial SerialBase的源代码,它有点奇怪的IMO,因为只有在通过调用self.port(portname)使用显式端口设置时才会设置AFAICT self.name。您可能希望尝试使用serport = Serial(0)初始化串行端口实例,然后显式调用serport.port(' COM1')(或者您的端口名称而不是COM1)。
刚刚更正了代码。它的工作正常...... :)
import serial
def scan():
available = []
for i in range(256):
try:
s = serial.Serial('COM'+str(i))
available.append( (s.portstr))
s.close() # explicit close 'cause of delayed GC in java
except serial.SerialException:
pass
for s in available:
print "%s" % (s)
if __name__=='__main__':
print "Found ports:"
scan()
答案 2 :(得分:1)
如果您使用的是USB转TTY串行适配器,则设备驱动程序文件的唯一符号链接将显示在/ dev / serial / by-id中。只有在插入串行设备时才会显示该文件夹。显示的文件名是根据设备上USB接口芯片中的产品信息创建的,对于该设备而言是唯一的。 例如,Korad KD3005P可编程电源将显示为usb-Nuvoton_USB_Virtual_COM_A92014090305-if00。符号链接将解析为'/../../ttyACM0'。然后,所需的设备驱动器文件为“/ dev / ttyACM0”。