import serial.tools.list_ports ports = list(serial.tools.list_ports.comports()) for p in ports: print("Port:" + str(p.device)) print("VID:0x{:x}".format(int(0 if p.vid is None else p.vid))) print("PID:0x{:x}".format(int(0 if p.pid is None else p.pid))) print("")
とりあえずPythonでシリアルポートの一覧を作成して各ポートのUSBのVIDとPIDを表示してみる。ラズパイはデフォルトでGPIOにシリアルポートが付いてるのでUSBじゃないシリアルポートに関しては0x0になる。
ためしにこれをこちらの環境で実行すると
Port:/dev/ttyUSB0 VID:0x10c4 PID:0xea60 Port:/dev/ttyAMA0 VID:0x0 PID:0x0
となった。
ttyUSB0は対象のArduinoの情報。ttyAMA0はUSBじゃないのでVIDとPIDが出ない。
というわけでこれを利用して
import serial import serial.tools.list_ports ports = list(serial.tools.list_ports.comports()) for p in ports: print("Port:" + str(p.device)) print("VID:0x{:x}".format(int(0 if p.vid is None else p.vid))) print("PID:0x{:x}".format(int(0 if p.pid is None else p.pid))) print("") if(p.vid == 0x10C4 and p.pid == 0xEA60): print("Device found") ser = serial.Serial(p.device, baudrate=115200,timeout=0.05) break print(ser.readline())
これで特定のVIDとPIDのデバイスを自動で選んで接続してくれるようになった。
これ便利なんだけどVIDとPIDがかぶってたりするとあんまり使えないかも…
listには他にも情報が格納されてるようなのでその中で判別に使えるものがあればよいのだが…(未確認
0 件のコメント:
コメントを投稿