Help us understand the problem. What is going on with this article?

[Python]ArduinoのCOMポートが変わってもコードを編集せずにポートを開く方法

More than 1 year has passed since last update.

TL;DL Pyseriallist_portsdescriptionを使えばデバイス名でArduinoがどのポートに接続されているかわかる

イントロダクション

Pyserialを使用したシリアル通信を行う場合、COMポートオープンするには以下のようなコードになると思います。

import serial

arduino_ser = serial.Serial('COM5')

この方法だとArduinoのCOMポートが変わってしまった時にエラーが出てしまいます。

また、接続されているCOMポートのリストを取得し、接続する方法もありますが、Arduino以外のCOMポートを利用する機器が接続されている状況では正しく動作しません

import serial
from serial.tools import list_ports

ports=list_ports.comports()
for port in list_ports.comport():
    arduino_ser=serial.Serial(list_ports.device)

私の使用状況では、Arduinoの他にCOMポートを利用する機器が接続されている状況のため、上記コードを利用する事が出来ませんでした。

この記事ではCOMポートが変わった場合でもデバイス名からArduinoのポートを特定し、コードを編集せずにArduinoのポートを開くことが可能なコードを紹介します。

環境

  • Windows10 64bit
  • Python 3.6.3
  • Pyserial 3.4
  • Arduino Uno Rev3

方法

import serial
from serial.tools import list_ports

ports=list_ports.comports()
device=[info for info in ports if "Arduino" in info.description] #.descriptionでデバイスの名前を取得出来る
if not len(device) == 0:
   arduino_ser=serial.Serial(device[0].device)
else:
    print('Ardunoは接続されていません')

注意点

  • デバイス名にArdunoが入っているデバイスが複数個接続されている場合は、一つのArduinoのポートしか開けません

別の方法

StackOverflowでwin32comを利用した方法も見つけたため紹介いたします。

import win32com.client

wmi = win32com.client.GetObject("winmgmts:")
for ser in wmi.InstancesOf("Win32_SerialPort"):
    if "Arduino" in ser.name:
            arduino_ser = serial.Serial(ser.DeviceID)

参考リンク

StackOverflow : python : How to detect device name/id on a serial COM

Gist : pyserialでシリアルポート一覧を表示し選択させて,読み込むプログラム

ronpte1
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした