mcommit's message

大阪でソフトウェア開発の仕事をしている simotinといいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

raspberry pi シリアル通信の動作確認

土曜日はGDB京都さんとの共催という形での第4回組込みこぞう勉強会でした。


今回の勉強会もわたしにとっては本当に有意義な時間となり開催できて本当に
よかったです。

最近仕事がドタバタしていたせいもあり、あまり勉強会の準備等できていなかったのですが
やはりたくさんの方に参加して頂き、また参加された皆さんにとって有益な時間になったようで
本当に嬉しいです。※KRP様にも勉強会場を提供頂き助かりました。KRPさんに行くのは2回目ですが
本当にきれいで、設備の充実ぶりに驚かされます。


さてさて、土曜日の勉強会では私自身もたくさんいいことを教えて貰いました。ウシシ。

Raspberrypiと超音波センサをつないで遊ぼうとしているのですが、センサとのIFであるシリアル通信が上手く動いていなかったのでどうしたものかと悩んでいたのですが、日曜エレクトロニクスで有名な@yishiiさんに簡単なシリアル通信動作確認のやり方を教えて頂きました。

■動作確認方法
教えて頂いた動作確認の方法ですが、簡単にいうと、
arduinoのシリアル通信機能を使ってPCと通信させてみるという方法でした。


■接続構成
 ・PCとarduinoをUSBでつなぎます。
 ・arduinoとraspberrypiはTX/RX/GNDをジャンパワイヤで繋ぎます。


arduino-raspberrypi.jpg

arduinoスケッチ


void setup()
{
// 何もしない
}

void loop()
{
// 何もしない
}

■Raspberry pi側コード(python:uart.py)


import serial
import time

def main():
con=serial.Serial('/dev/ttyAMA0', 9600 )
print con.portstr
while 1:
c = con.read(1)
print c
print "recv!"

if __name__ == '__main__':
main()

■確認実施
PCからarduinoのスケッチをアップロードし、PC側からシリアル通信でデータを送ります。

Raspberry pi側では受信スクリプトを動かします。


sudo python uart.py

※私はteratarmからデータを送りました。送ったデータがRapberry側で表示されればOK!


なぜこんなことができるかというと、arduinoのUSBシリアル通信は何もしない状態だと、
TXとRXの端子にそのまま入出力されるからだそうです。
※私もこの機能知りませんでした、
(そういえばよく考えると、arduinoのtutorialとかにそういうことを書いてあった気もする)

このとき気を付けないといけないのは、arduinoのTXとRXピンはあくまでarduinoに対してのTX/RX
になるという点です。
今回の接続構成はarudinoを使ったシリアル通信のバイパスになるので
arduinoのTX⇔RasberrypiのTX
arduinoのRX⇔RasberrypiのRX
と繋ぎます。


さてさて、pythonを使った動作確認では無事PCから送ったデータがRaspberry piに届いていました。
そこで、今度は私がセンサとの通信で試していたRubyのSerialportを使った方法でPCとの通信を試して
みたのですが、これがなんと

うまく動かない

ではありまえせんか!

というわけで@yishiiさんのおかげで1つ問題の切り分けができました。

でもRuby使いたいなぁ。
拡張モジュール作るの慣れてきたしいっそ自分でシリアル通信のライブラリかいたろかぁ!
ていうかserialportのコンパイルの仕方とかがよくなかっただけかも。。。

う〜ん明日以降はRubyのSerialportの問題を少し調査したいと思います。

※ところで今回ブログを書くのに、これまた勉強会で教えて頂いた
Fritzingを使ってみましたがこれは神ツールです!
raspberrypiの基板のアイコンはhttps://github.com/adafruit/Fritzing-Library
から入手できました。素晴らしすぎます!このツールがあるおかげで回路の説明がどれだけ分かり易くなることか!!

今夜は女房と子供に内緒で、fritzingを抱いて眠ることにします。