Python で、センサーからの信号を、シリアル通信で、Windows PCに取り込む方法

Python
YOU
YOU

センサーを使ったアプリ開発したいのだけど、
PCとセンサをつなげるのってどうやるの?

けんろう
けんろう

センサーの出力は、SPI通信とかシリアル通信の場合が多いので、
今回は、Windows PCにて、Pythonでシリアル通信する方法を紹介します。

今回は、Windows PCにて、Pythonでシリアル通信する方法を紹介します。

Pythonでは、シリアル通信ライブラリが用意されていますので、これを使うことで、簡単にシリアル通信を制御できます。

スポンサーリンク

構成

センサーの代わりとして、M5 ATOMを使いました。

M5ATOMとPCは、もともとArduino IDEのシリアルモニターを使えば、
シリアル通信をモニターすることができますが、

また、TeraTermというターミナルソフトを使う手もあります。

私は、センサーから取得したデータをWindows PC側で、様々な処理をしたかったので、
Pythonでのシリアル通信データを送受信するプログラムを用意しました。

Windows PCに、Python3をインストールする

まずは、WindowsでPythonを動かす環境の準備が必要です。

Windowsで、Python3をインストールするには、

・Anacondaをインストールする

・Pythonパッケージをインストールする

等のやり方がありますが、

今回は、Pythonパッケージをインストールする方法を紹介します。

Python3のパッケージをダウンロードします。

以下のサイトから、ご自分のPCにあったものをダウンロードしてください。

Welcome to Python.org
The official home of the Python Programming Language

「ダウンロード」をクリックして、自分のWindowsにあったものをダウンロードしてください

Windows PCに、Python3をインストールする

やり方は、以下のHPを参照してください。

Windows版Pythonのインストール - python.jp
以下の手順で、Pythonのインストールを行います。 Python公式サイトから、Pythonパッケージをダウンロードします ダウンロードしたパッケージをインストールします。 PowerShellでPythonを実行するときに必要となる、スクリプトの実行許可を設

pySerialのインストール

Pythonで、シリアル通信を扱うためのパッケージをインストールします。

コンソールを開いて、以下のコマンドを入力すると、インストールが始まります。

$ pip3 install pyserial

サンプルコード

次に、pythonコードを書いていきます。

以下のコードを作成します。

このコードでは、シリアル通信の受信処理と送信処理を別々のスレッドで実行することで、送受信処理を同時に実行できます。

サンプルコード内のCOM3は、ご使用するPC環境により異なります。

シリアル通信ケーブルを差したり、抜いたりして、該当するCOM番号を見つけてください。

import serial
import time
import concurrent.futures
 
ser = serial.Serial('COM3',9600,timeout=None) 
 
def func1():
    while True:
        line = ser.readline()
        print(line)
 
def func2():
    while True:
        flag=bytes(input(),'utf-8')
 
        #シリアル通信で文字を送信する際は, byte文字列に変換する
        #input()する際の文字列はutf-8
 
        ser.write(flag)
 
        #シリアル通信:送信
 
        if(flag==bytes('a','utf-8')):
            break;
 
        time.sleep(1)
 
    ser.close()
 
if __name__ == "__main__":
    executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
    executor.submit(func1)
    executor.submit(func2)

func1関数は、受信したシリアルデータをそのままコンソールに表示します。

func2関数は、入力した文字列をシリアル通信で相手へ送信します。
また、”a”を入力すると、処理を停止します。

動かし方

動かし方は、いつものように、

python3 app.pu

まとめ

今回は、Windows PCで、シリアル通信を扱う方法を紹介しました。

コメント

タイトルとURLをコピーしました