前提・実現したいこと
シリアル通信により受信したデータをリアルタイムでグラフ表示したい
条件
送信側:マイコンボード
受信側:PCのcomポート
下記問題が発生しました。
発生している問題・エラーメッセージ
グラフwindowがデータ受信事に更新されない
該当のソースコード
import serial
from serial.serialutil import *
from matplotlib import pyplot
from matplotlib import animation
import numpy
com03 = serial.Serial('COM3', 9600, bytesize = EIGHTBITS,timeout=100)
nucreo_data_list = []
cnt_list = []
for cnt in range(100):
tmp_nucreo_data = com03.read(1) nucreo_data_int = int.from_bytes( tmp_nucreo_data, 'little' ) cnt_list.append(cnt) nucreo_data_list.append(nucreo_data_int) print("y = ",nucreo_data_list) print("x = ",cnt_list) pyplot.cla() pyplot.plot(cnt_list,nucreo_data_list) pyplot.show()
com03.close()
#試したこと
animation関数を試してみましたが、forループとanimationをうまく組み合わせることができなかったので
上記のようなコードを書いてしまいました。
#コメント
データ受信事にリアルタイムでグラフ表示させるために何かヒントとなる情報があれば幸いです。よろしくお願いします。
とりあえず、グラフは想定どおりに表示されているのでしょうか? 質問のコードでは、「シリアルから100個の値を読みだして、それをグラフ表示する」という動作が一度行われて終わってしまっています。リアルタイムでグラフ表示というのは、どのように表示されることを意味していますか?シリアルの通信速度は9600bpsになっていますから、1秒間に最大で約100バイトのデータを読み出せます。100点のデータのグラフに必要なデータが1秒でシリアル通信から取得できるなら、1秒ごとにグラフを書き換えるという事ですか?(人間が1秒ごとに書き換わってしまうグラフをちゃんと読み取るのは、かなり厳しいですよ。ぼんやり眺めるだけなら良いでしょうが、異常が起きている個所を見つけて、その値を把握するつもりで見つめるのは)
回答2件
あなたの回答
tips
プレビュー
