Raspberry Piでシリアルデータ受信
久しぶりにうちのPaspberry Piを引っ張り出してきてシリアルのデータの読み取りをやってみました。
私が好きな測定では、ハードに密着した部分はArduinoで処理した方がやり易いと思います。でも、人間とのインターフェイスはラズパイを使った方が断然有利になるはずです。うまくやればかっこいいグラフをWebサーバー経由で表示とかが簡単に出来ちゃうような気がします。
ということで、ラズパイを使ったデーター加工の勉強を始めます。
なお、以下の記事は、Chick Labさんの Raspberry Piでシリアル通信を参考、というかほとんどそのまま追試したものです。
まずはUSBシリアル変換アダプタを使う方法。
おなじみFDTIのUSBシリアル変換アダプタをRaspberry PiのUSBポートに接続してpythonで以下のプログラムを実行します。
▼実行結果。プログラム名はusbSerialRead.pyです。

このデーターは自作のグリッドタイインバーターが1秒間隔で吐き出しているもの。MPPTのレベルや電圧、電流などのデーターがだらだらと流れています。
USBシリアルのアダプタが必要になりますが、コネクタを刺すだけで出来るのでお手軽な方法です。
で次にやったのはGPIOコネクタのUART端子を使う方法。
ラズパイの機能をちゃんと使うならこっちのやり方が王道なのでしょう。但し、この場合は配線する必要があります。Raspberry PiとArduinoでは信号のレベルが違うので抵抗でレベル変換も必要になります。
▼接続回路図(クリックで別窓に拡大)

こういう状態を説明するのには、回路図が一番だと思います。
▼Raspberry PiのGPIOコネクタ

熱収縮チューブの中にレベル変換回路の抵抗を入れています。
▼相手側

これはこのあいだ作った高度計。
Pythonのプログラム
▼実行結果 プログラム名は gpSerialRead.pyです

気圧や標高などのデータが流れています。
説明が後になりましたが、Raspberry PiはSSH経由のキャラクタベースで動かしています。また、シリアルポートはそのままではコンソールとして動作してしまうので修正が必要です。そのためにはこの記事に書いた以外にいろんな修正が必要になります。
そのあたりは以下のWebを参考にさせていただきました。ありがとうございます。
・Raspberry PiとArduinoでシリアル通信 (with Python)
・Raspberry PiでUART、シリアル通信
私が好きな測定では、ハードに密着した部分はArduinoで処理した方がやり易いと思います。でも、人間とのインターフェイスはラズパイを使った方が断然有利になるはずです。うまくやればかっこいいグラフをWebサーバー経由で表示とかが簡単に出来ちゃうような気がします。
ということで、ラズパイを使ったデーター加工の勉強を始めます。
なお、以下の記事は、Chick Labさんの Raspberry Piでシリアル通信を参考、というかほとんどそのまま追試したものです。
まずはUSBシリアル変換アダプタを使う方法。
おなじみFDTIのUSBシリアル変換アダプタをRaspberry PiのUSBポートに接続してpythonで以下のプログラムを実行します。
import serial
import time
def main():
# USB:ttyUSB0
# GPIO:ttyAMA0
con=serial.Serial('/dev/ttyUSB0', 9600, timeout=10)
# con=serial.Serial('/dev/ttyAMA0', 19200, timeout=10)
print con.portstr
while 1:
str=con.readline()
print str
con.write(str)
if __name__ == '__main__':
main()
▼実行結果。プログラム名はusbSerialRead.pyです。

このデーターは自作のグリッドタイインバーターが1秒間隔で吐き出しているもの。MPPTのレベルや電圧、電流などのデーターがだらだらと流れています。
USBシリアルのアダプタが必要になりますが、コネクタを刺すだけで出来るのでお手軽な方法です。
で次にやったのはGPIOコネクタのUART端子を使う方法。
ラズパイの機能をちゃんと使うならこっちのやり方が王道なのでしょう。但し、この場合は配線する必要があります。Raspberry PiとArduinoでは信号のレベルが違うので抵抗でレベル変換も必要になります。
▼接続回路図(クリックで別窓に拡大)

こういう状態を説明するのには、回路図が一番だと思います。
▼Raspberry PiのGPIOコネクタ

熱収縮チューブの中にレベル変換回路の抵抗を入れています。
▼相手側

これはこのあいだ作った高度計。
Pythonのプログラム
mport serial
import time
def main():
con=serial.Serial('/dev/ttyAMA0', 9600, timeout=10)
print con.portstr
while 1:
str=con.readline()
print str
con.write(str)
if __name__ == '__main__':
main()
▼実行結果 プログラム名は gpSerialRead.pyです

気圧や標高などのデータが流れています。
説明が後になりましたが、Raspberry PiはSSH経由のキャラクタベースで動かしています。また、シリアルポートはそのままではコンソールとして動作してしまうので修正が必要です。そのためにはこの記事に書いた以外にいろんな修正が必要になります。
そのあたりは以下のWebを参考にさせていただきました。ありがとうございます。
・Raspberry PiとArduinoでシリアル通信 (with Python)
・Raspberry PiでUART、シリアル通信