この記事ではPythonでシリアル通信をする方法について解説をしたいと思います。
pySerialというパッケージを使えば簡単にシリアル通信をすることが出来ます。
PythonでArduinoなどとシリアル通信をしたい。
Pythonでシリアル通信の送受信をしたい。
今回の記事ではこのように思っている方に向けて、
【基礎】シリアル通信とは
【基礎】pySerialとは
【実践】pySerialの使い方(送受信)
について解説をしていきます。
Pythonでシリアル通信をしてみましょう。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
シリアル通信とは
まずはシリアル通信とは何かについて知っておきましょう。
シリアル通信は接続されたコンピュータ同士で、1ビットずつデータを送る通信の方式です。
一本の通信回線を使うので、低コストで配線が簡単なことから電子工作の分野ではよく使われています。
また似た通信の方式にパラレル通信と呼ばれるものもあります。
パラレル通信はデータを複数のビットにまとめて送る通信の方式です。
シリアル通信とは逆に通信回線が多くなり、コストが掛かってしまいますがその分高速にデータを送ることが出来ます。
ちなみにシリアル通信の代表的なものにUSBがあります。
ArduinoとPCのシリアル通信ではUSBを使うことが一般的です。
pySerialとは
PythonとArduinoなどの機器との間でシリアル通信を実現させるのがpySerialというパッケージです。
pySerialを使えば通信の設定からオープン、送受信からクローズまでを簡単に実行させることが出来ます。
標準でプリインストールされているパッケージではないのでpipを使ってインストールをしておきましょう。
pip install pyserial
pySerialの使い方
それでは早速pySerialを使ってみましょう。
シリアル通信を受信する
まずはシリアル通信を受信してみましょう。
こちらのコードをご覧ください。
import serial ser = serial.Serial('/dev/tty.',9600,timeout=None) line = ser.readline() print(line) ser.close()
このコードを実行することで、指定したデバイスから送信されたデータを受信して表示することが出来ます。
まずはデバイス名と通信速度(ボーレート)、タイムアウトの有無を指定しています。
そこでreadline関数で受信したデータをprint関数で表示しています。
最後はcloseすることを忘れないようにしましょう。
ここで出てくるデバイス名はそれぞれの環境で変わってくるので、このコマンドで確認しておきましょう。
ls -l /dev/tty.*
Macであればこのコマンドを、シリアル通信したい機器を接続する前とした後で実行させることで、その差分を確認してデバイス名を確認することが出来ます。
このコマンドでは/dev配下のtty.から始まるファイルをすべて表示させています。
シリアル通信を送信する
次はシリアル通信を送信してみましょう。
こちらのコードをご覧ください。
import serial ser = serial.Serial('/dev/tty.',9600,timeout=None) ser.write("test") ser.close()
このコードを実行することで指定したデバイスにデータ(ここではtest)を送信することが出来ます。
基本的には受信するコードと同じようにデバイス名やボーレート、タイムアウトの有無を指定してインスタンスを作成します。
ここではwrite関数を使ってtestという文字列を送信しています。
最後にcloseする部分は同じですね。
まとめ
この記事ではシリアル通信とは何かから、pySerialを使ったシリアル通信の方法について解説してきました。
pySerialの基本的な使い方については分かっていただけたでしょうか?
デバイスの取得は少しだけ厄介ですが、紹介したコマンドを使えば簡単ですね。
PythonとArduinoの連携をしたい場合はぜひまたこの記事を読み返してみてください!