Pythonでserial(シリアル)通信!Read/Writeの波形を見てみた

Python

uartのシリアル通信でRead/Write・ボーレート変更時の波形をアナライザで確認しました。Pythonとraspberry piでテストして測定動画を撮っており、シリアル通信の使い方・基礎を確認したい方におすすめです。

 

以前はPCでusb-シリアル変換の波形を確認

以前の記事でuartのシリアル波形の解析記事を上げましたが、その際はPC側からusb-シリアル変換ケーブルを使い波形を確認していました。(リンク先はこちらから)

UART通信のシリアル波形をアナライザで解析してみた
今回は簡単にアナライザでラズベリーパイ(raspberry pi)のUART通信のシリアル波形を確認するまでの手順を紹介していきます。 I2CやSPIも同様にアナライザで波形確認していますのでよろしければ下記記事もご覧ください。 ...

 

今回はラズベリーパイ(raspberry pi)単体で「PythonでRead/Write」「ボーレート変更」をしてみたとき波形がどのようになるか確認していきます。

 

pyserialをインストールしてシリアル通信

Pythonでシリアル通信するために「pyserial」のパッケージをインストールします。下記コマンドで簡単にインストールできました

pip3 install pyserial

 

シリアル通信のRead/writeをPythonで行う

Pythonでシリアル通信のプログラミングを行っていきます。

ラズベリーパイ(raspberry pi)ならばデフォルトの環境でエディタまで入っているので簡単にPythonが触れます。

 

実際使ったPythonプログラム

実際作成したプログラム内容も非常に簡単です。下記の3手順となっています

①「pyserial」のパッケージをインストールしてusb-シリアル変換(/dev/ttyUSB0)を使うように定義します

②シリアル通信で「Hello World」とWrite(出力)します。

③シリアル通信でRead(入力)させて結果をprint文で表示させます

 

プログラムは下記に張り付けておきます

import serial
ser = serial.Serial('/dev/ttyUSB0', 1)
ser.write(b'Hello World')
c =ser.read(11)
print(c)
ser.close()

 

ちなみに筆者も少し前までPython初心者でした

ちなみに筆者は少し前までPython初心者でしたが、下記記事で紹介しているUdemy で勉強することで今回のレベルのことは出来るようになりました。

未経験・社会人向け! Pythonと機械学習の勉強方法・始め方
未経験で社会人である筆者がPythonと機械学習を学ぶにあたって「今回の勉強方法はかなり実用的かつ効率的!」と強く実感した内容でしたので紹介したいと思います。 UdemyがPythonと機械学習の始め方に最適! 結論から言いますとの講座...

 

初心者が高い参考書を買って一人でPython勉強するよりは「非常に分かりやすく」「費用が抑えられる」はずですのでご参考ください。リンク先はこちらから

 

シリアル通信をループバックさせる

今回はラズベリーパイ(raspberry pi)単体でRead/Writeさせるので、usb-シリアル変換ケーブルのRX(受信)とTX(送信)をショートさせてシリアル通信をループバックさせます。

 

ループバックさせますのでシリアル通信のuartのRead(RX(受信))とWrite(TX(送信))は同じ波形になります。

 

シリアル通信のReadとWriteをLEDとリンク

単純にアナライザで波形を確認するだけでは面白くないため、シリアル通信のRead/Writeの動作をリンクさせたLEDを実装します。

 

今回ボーレートを落として(通信速度を遅くして)シリアル通信させますので、普段ならば目で見れないシリアル通信の波形をLEDでも見れるように改造しました。

 

直接uartからLEDを駆動することは難しいのでバッファIC(TC74HC4050AP)を一つ噛まして対応します。

 

そのため今回のテストの全体構成としては下記のようになります。シリアル通信確認用の黄色LEDがWrite,赤LEDがReadになりますがループバックしているので同じ光り方です。

 

アナライザを用意する

今回はシリアル通信(uart)の「Read/Write」「ボーレート」をアナライザを使って確認していきます。

最近はI2CやSPIなど数MHz,数十MHz程度の解析するアナライザが1000円足らずで買えます。

 

筆者は色々触りたかったのでモジュール化されていないアナライザの開発ボードを買いました。

(値段は一番安く多くのピンで遊べますが、EEPROMなどの設定が必要ですのでマイコン初心者は少し難しいかもしれません)

 

但し数百円の差ですので下記のようなモジュールになっているアナライザを買った方が直ぐに測定できて楽できるかと思います。

 

回路図・配線

今回の回路図としては下記形です。どの部品も汎用的なデバイスで対応してますので誰でも同様に組むことができます。

電子工作セットブレッドボードのみで配線が可能です。

 

 

ボーレートを変更してシリアル通信する

最初にボーレートを落として(通信速度を遅くして)テストをしていきます。

 

変更の仕方は簡単です。Pythonのプログラムでよく使う「115200」bpsになっている箇所を任意の値に変更するだけです。今回筆者は「1」bpsにしてみました。

 

プログラムを実行するとシリアル通信が動き、「Read/write」・LED点滅していることが確認できました。

 

ボーレートが1bpsにはならなかった

テスト後にボーレートが1bps(1bit辺り約1Hz)の波形になっているか確認しましたがアナライザの波形の周波数は約46Hzでした。

 

ボーレートを落とす(通信速度を遅くする)にも限界があるようです。

 

ボーレート変更後のPythonでシリアル通信した動画

実際にボーレート変更後にPythonでシリアル通信させて、アナライザとLED動作を確認する動画が下記となっています。

 

~3秒  アナライザ起動・Pythonプログラム実行

~7秒  Read/Write・LED動作を確認。Pythonプログラムが終了

~12秒  アナライザの波形を見やすい位置に移動

 

115200bpsのシリアル通信の波形をテストする

同様に115200bpsのシリアル通信をテストしました

 

今回はアナライザの機能を使って「Hello World」シリアルでRead/Writeされているのを確認しました。

ASCIIコード表通りに「Hello World」となっています

 

多くの箇所でデフォルトで使われている115200bpsの設定ですが、プログラム終了後アナライザで1bit辺り約115200Hzになっていることを無事確認できました。

 

ボーレート115200bpsでシリアル通信した動画

実際にボーレート115200bpsでPythonでシリアル通信させて、アナライザの波形を確認する動画が下記となっています。

 

~3秒  アナライザ起動・Pythonプログラム実行

~7秒  Read/Writeを確認。Pythonプログラムが終了

~13秒 「Hello World」がシリアル通信でRead/Writeされているのを確認

~30秒 波形を拡大して1bit辺り約115200Hzを確認

 

まとめ・感想

Pythonでプログラミングすることによりシリアル(uart)通信のテストを色々と試すことができました。

やはりPythonを使えるようになると色々なデバッグ・テストが捗ります。筆者は下記記事で紹介しているUdemy で勉強することで今回のレベルのことは出来るようになりました。

未経験・社会人向け! Pythonと機械学習の勉強方法・始め方
未経験で社会人である筆者がPythonと機械学習を学ぶにあたって「今回の勉強方法はかなり実用的かつ効率的!」と強く実感した内容でしたので紹介したいと思います。 UdemyがPythonと機械学習の始め方に最適! 結論から言いますとの講座...

 

初心者が高い参考書を買って一人でPython勉強するよりは「非常に分かりやすく」「費用が抑えられる」はずですのでご参考ください。リンク先はこちらから

 

コメント