Nyx*_*nyx 19 python serial-port arduino pyserial python-2.7
目前,在Python可以与设备通信之前,python程序必须知道设备(Arduino)所在的端口.
问题:每当设备插入并重新插入时,其COM端口都会发生变化,因此必须再次向Python提供正确的串行端口才能找到该设备.
Python(使用pySerial)如何自动搜索要使用的正确串口?python是否可以将串口上的设备正确识别为Arduino?
Mat*_*ams 27
使用以下代码查看所有可用的串行端口:
import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
print p
Run Code Online (Sandbox Code Playgroud)
这给了我以下内容:
('COM4', 'Arduino Due Programming Port (COM4)', 'USB VID:PID=2341:003D SNR=75330303035351300230')
('COM11', 'RS-232 Port (COM11)', 'FTDIBUS\\VID_0856+PID_AC27+BBOPYNPPA\\0000')
Run Code Online (Sandbox Code Playgroud)
如果它是一个Arduino,你可以做类似的事情:
if "Arduino" in p[1]:
print "This is an Arduino!"
Run Code Online (Sandbox Code Playgroud)
Eri*_*ric 14
使用serial.tools.list_ports.comports,我们可以找到并连接到arduino:
import warnings
import serial
import serial.tools.list_ports
arduino_ports = [
p.device
for p in serial.tools.list_ports.comports()
if 'Arduino' in p.description # may need tweaking to match new arduinos
]
if not arduino_ports:
raise IOError("No Arduino found")
if len(arduino_ports) > 1:
warnings.warn('Multiple Arduinos found - using the first')
ser = serial.Serial(arduino_ports[0])
Run Code Online (Sandbox Code Playgroud)
如果你知道你每次找一模一样的Arduino的,你可以筛选p.serial_number代替
import serial.tools.list_ports
def find_arduino(serial_number):
for pinfo in serial.tools.list_ports.comports():
if pinfo.serial_number == serial_number:
return serial.Serial(pinfo.device)
raise IOError("Could not find an arduino - is it plugged in?")
ser = find_arduino(serial_number='85430353531351B09121')
Run Code Online (Sandbox Code Playgroud)