気ままにIoTメモ

色々なこと備忘録

シリアル通信から標準出力へ

Arduinoやmbedなどでセンシングした値をシリアル通信で確認するのは簡単なのですが、保存に少しつまづいたのでメモ。

シリアル通信で送られてきた値を確認する方法はArduino IDEのSerial Monitorやscreenコマンドを使う方法など色々あります。
Mac の screen コマンドでシリアル通信 - Qiita
Arduinoでシリアル(serial)通信をしてみよう

screenコマンドでも-Lオプションを追加すれば標準出力出来るらしいのですが、screenコマンドの使い勝手が少々ややこしい。
macos - How can I redirect the output of screen to a file? - Ask Different
Linux screen コマンド 使い方 - Qiita

結局、pySerialを使った方法が一番しっくり来ました。
Arduino Playground - Python

import sys, serial
ser = serial.Serial('/dev/tty.usbserial', 9600)
while (1):
    sys.stdout.write(ser.readline())

実行してあげれば受信したデータを標準出力に流せます。
後はリダイレクトしてcsv保存すればグラフに使えるし、 パイプでつないであげればC言語などでリアルタイム処理なんて事にも使えそうです。

※screenやpySerialのボーレートは標準の値が決まってるので注意

2017年1月21日追記
Arduinoではうまくいかなかったため、

import time
time.sleep(5)
ser.write('5')

whileの前に入れることで動作しました。

/dev/tty.usbserialは環境によって異なります。ArduinoIDEで確認するかls /dev/ |grep usbコマンドで確認できます。