Python to automatically select serial ports (for Arduino)

前端 未结 4 1589
心在旅途
心在旅途 2020-11-29 23:10

Currently the python program must know which port a device (Arduino) is on before Python can communicate the device.

Problem: Whenever the device is

4条回答
  •  执笔经年
    2020-11-30 00:11

    Using serial.tools.list_ports.comports, we can find and connect to an arduino with:

    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])
    

    If you know you're looking for exactly the same arduino each time, you can filter on p.serial_number instead

    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')
    

提交回复
热议问题