Tag Archives: シリアル通信

はじめに

Pythonを使って、UART等のシリアル通信を行う場合、PySerialを使うと簡単に実現できます。
その際、PySerialを使う前の初期設定で、COMポートを指定する必要があります。

COMポートはデバイス毎に番号が変わってしまいます。
デバイスが変わる度に、デバイスマネージャからCOMポートを調べるのは面倒です。

そこで今回は、COMポートを自動的に取得するサンプルプログラムをご紹介します。
ついでに、PySerialを使ったシリアル通信のサンプルプログラムも掲載しています。
サンプルプログラムはご自由にお使いください。

私の環境は以下の通りです。

  • Windows 10 64bit
  • Anaconda3 5.3.0
  • Python 3.7.0

 

サンプルコード

まずはMain関数を説明します。

ヘッダに”serial”をimportすることで、PySerialを使用することができます。
search_com_port()は私が作成した関数です。
後ほど説明しますが、この関数は有効なCOMポートを返します。

serial.Serial関数は、serというインスタンスを作成しています。
この関数の引数には、有効なCOMポートを指定する必要があります。
その他、baundrateや、通信のタイムアウト時間を設定しています。

w_dataは、送信するデータです。
r_sizeは、受信するデータのサイズです。
uart_write_read関数は、私の作成した関数です。この中でデータの送受信を行います。

 

次に、search_com_port関数を説明します。

serial.tools.list_ports.comports関数は、PCに接続されているCOMポートをすべて返します。
それをcomlistというリストにいったん格納(append)します。

私の使用しているPCでは、使いたいCOMポートがcomlist[0]に格納されていたため、それを一旦、use_portに格納します。関数の最後で、use_portを戻り値として返しています。

 

次に、uart_write_read関数を説明します。

ser.write関数は、データを送信する関数です。これはPySerialで用意している関数です。

ser.read_until関数は、データを受信する関数です。これはPyserialで用意している関数です。
この関数の引数に、受信サイズを指定すると、指定サイズが受信されるまで待ってくれます。

最後に受信データを返しています。

 

最後に今までのソースコードをまとめて記載すると、以下のようになります。

以上です。

この記事がいいねと思ったら、以下のいいねボタンを押してください。
管理人のモチベーションがあがります(笑)

いいね! (11いいね!)
Loading...