Python to automatically select serial ports (for Arduino)

Nyxynyx picture Nyxynyx · Jun 14, 2014 · Viewed 30.7k times · Source

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

Problem: Whenever the device is plugged out and back in, its COM port changes, so the correct serial port must be given to Python again for it to find the device.

How can Python (using pySerial) automatically search for the correct serial port to use? Is it possible for python to correctly identify the device on a serial port as an Arduino?

Answer

Matt Williams picture Matt Williams · Aug 4, 2014

Use the following code to see all the available serial ports:

import serial.tools.list_ports
ports = list(serial.tools.list_ports.comports())
for p in ports:
    print p

This gives me the following:

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

To work out if it's an Arduino you could do something like:

    if "Arduino" in p.description:
        print "This is an Arduino!"