今回の趣旨
Arduinoで工作してるとログを取ってみたくなったのですが、Arduino開発環境にVScode拡張機能をつかっており、せっかくならVScode内で完結したいなぁという事でやってみました。
VSCodeでArduino開発環境
こちらのサイトを参考に構築しました。
また、VSCodeでPythonを利用する場合、拡張機能を導入する必要があります。
こちらの記事を参考に、Pythonの拡張機能を導入しています。
実現したい(できた)こと
CSV形式で気圧センサのログを保存!
プロジェクトフォルダに直で出力してくれるので楽ちん&すっきり!
スプレッドシートで開いてみた!おおお、なんかそれっぽい!
いざ実装
今回はPythonを使って実現しました。
ラズパイやってる方には馴染みの深い言語ですね。
かくいう私もラズパイのおかげで多少読み書き出来る程度の知識です。
Pythonの導入方法はGoogle先生に聞けば素晴らしい記事を紹介してくれます。
では早速pyserial
というシリアル通信を行う為のライブラリを導入します。
私の環境はWindowsなのでコマンドプロンプトから。
pip3 install pyserial
ライブラリのインストールが完了したら、作業中のディレクトリにlog_test.py
を新規作成します(名前は何でもOK、拡張子は.pyで宜しく!)
import serial
import datetime
import csv
com = serial.Serial("COM7", 9600)
while True:
val = str(com.readline().decode("utf-8").rstrip("\n"))
date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open("test.csv", "a") as f:
print("{},{}".format(date, val), file=f)
com = serial.Serial("COM7", 9600)
の第一引数にArduinoを接続しているポートを記述、第二引数にシリアル通信のボーレートを指定します。
このプログラムを実行する前に予めシリアルモニターの接続は切っておいて下さい。
com.readline()
でArduino上に書き込んだSerial.print()
から文字列を取得します。そのままだと改行コード\r\n
が最後にくっついてくるので、
.rstrip("\n")
で対応しています。
val = str(com.readline().decode("utf-8").rstrip("\n"))
今回は以前作った気圧センサのソースからデータ取ってるので、ここで文字列として扱っていますがグラフ化したりするなら生の値取った方がいいかもです。
データ型についてはまだまだ知識不足なので、この辺りは追って学習したいと思います。
終わりに
今回は初めてPythonを使ってログの取得と保存に挑戦してみました。
気温や気圧の変化を実際の天候と照らし合わせて、セルフ天気予報なんてできたら面白そうです。