Currently the python program must know which port a device (Arduino) is on before Python can communicate the device.
Problem: Whenever the device is
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')