人気ブログランキング | 話題のタグを見る

LabVIEW info. Sharing 新館

labview.exblog.jp
ブログトップ
2014年 05月 03日

Raspberry PiのGPIOの8ピン10ピンでシリアル通信

簡単だろうと始めてみると、そう事は単純ではないようです。
コンソール用に設定されているのでそのままでは通信には使えないということのようで各所で情報がまとめられていますが、とりあえず以下を参考に対処しました。
備忘録[Raspberry PiでUART、シリアル通信]

minicomというターミナルソフトをインストールして通信できることを確認しました。受信だけなのにこのような作業がいるのかどうか良くは分かりませんが、XBeeからの文字列がRaspberry Piに入ってきています。
Raspberry PiのGPIOの8ピン10ピンでシリアル通信_c0023764_1315207.png


次はPythonで受信プログラムを書いてみたいと思いますが、シリアルのライブラリをインストールする必要があるということです。
とりあえず以下を参考にPythonプログラムを動かしてみました。
Chick Lab[Raspberry Pi でシリアル通信]

さて、以下のプログラムで受信することができました。
---------------------------------------------------
import serial
import time

def main():
con=serial.Serial('/dev/ttyAMA0', 9600, timeout=120)
print con.portstr
while 1:
str=con.readline()
print str,

if __name__ == '__main__':
main()
---------------------------------------------------
print strとすると文字列strの後ろに改行コードを付けてしまいます。送信する際に改行コードも送っているので1行空白が生じます。この空白行は数日謎だったのですが、
print str,というふうに","を付けると改行コード無しでプリントしてくれるのだそうです。

/dev/ttyAMA0
20.53,54.07,1019.86,191.27
20.60,54.25,1020.31,201.60
20.56,54.16,1020.28,201.60
20.57,54.09,1020.42,201.60
20.51,54.07,1019.88,201.60
20.51,53.97,1020.06,201.60
20.54,53.99,1019.94,201.60
20.44,54.04,1020.12,201.60
20.56,54.02,1020.10,201.60

これをプリントの代わりにファイルに書き出せば良いはずです。
それにしても、exblogでは空白が無視されるのでPythonのプログラムは読めないですね。どうにかならないでしょうか。

さて、次は時刻の追加です。datetimeをインポートしてraspberry piの現在時刻(時差が9時間みたいなので9時間を足しています)から時間と分を取り出してデータの先頭に追加しました。

import serial
import time
import datetime

def main():
con=serial.Serial('/dev/ttyAMA0', 9600, timeout=120)
print con.portstr
while 1:
str=con.readline()
dt = datetime.datetime.now()+datetime.timedelta(hours=9)
dts=dt.strftime('%H:%M,')
print dts+str,


if __name__ == '__main__':
main()



sudo python get_zb03.py /dev/ttyAMA0
/dev/ttyAMA0
22:10,20.62,51.89,1020.11,196.44
22:11,20.59,51.87,1019.87,0.00
22:12,20.58,51.90,1020.09,0.00
22:13,20.53,51.90,1020.16,0.00
22:14,20.57,51.80,1020.18,0.00
22:15,20.54,51.79,1020.41,0.00
22:16,20.52,51.75,1020.67,0.00
22:17,20.49,51.90,1020.40,0.00
22:18,20.52,51.73,1020.55,0.00
22:19,20.52,51.70,1020.37,0.00
22:20,20.43,51.87,1020.28,0.00
22:21,20.48,51.75,1020.85,0.00
22:22,20.38,51.46,1020.58,0.00
22:23,20.39,51.51,1020.43,0.00
22:24,20.39,51.74,1020.66,0.00
22:25,20.38,51.83,1020.46,0.00
22:26,20.39,51.57,1020.37,0.00
22:27,20.36,51.81,1020.75,0.00
22:28,20.39,51.82,1020.31,0.00
22:29,20.36,51.88,1020.75,0.00
22:30,20.34,51.90,1020.83,0.00
22:31,20.35,51.87,1020.50,0.00
22:32,20.34,51.55,1020.59,0.00
22:33,20.29,51.81,1020.78,0.00
22:34,20.30,51.59,1020.39,0.00
22:35,20.31,51.74,1020.71,0.00
22:36,20.25,51.79,1020.58,0.00
22:37,20.26,51.80,1021.01,0.00
22:38,20.27,51.83,1020.56,206.77
22:39,20.27,51.91,1020.56,206.77

せいかくに1分ごとにデータを送っているわけではありませんので時刻はそのうちダブルか飛ぶかすると思います。

とりあえずファイルには記録できそうな気配です。

(140507)

by wire_works | 2014-05-03 13:23 | 電子工作


<< Raspberry Piで受信...      XBeeの設定 >>