目次

2009年2月12日木曜日

Rails + フィジカルコンピューティング ~WiPortやXportを使って、マイコンとrailsを連携~

前回のblogでも長々とMuliusの制作の上でたどった手順を書きましたが、もうちょっと簡潔にまとめて置いて、他のrailsプロジェクトと連携させるときや、Arduinoやその他自作のマイコンと連携させるときの為に役立てようと思います。

手順:
[1]Xport/WiPortの設定
[2]XPort/WiPortをシリアル接続で、TeraTerm等から操作する。
[3]Proce55ingから、シリアル経由でHTTPリクエストを行う。
[4]マイコンにリクエスト用のコードを書き込む。

こんな手順でいけば大丈夫かと思われます。

[1]Xport/WiPortの設定
このblogでもこちらこちらでちょこっと書いてあり、もっと詳しく解説しているサイトもあるので、詳しくは書きませんが注意すべき点があります。ActiveConnectionの設定を、Manual Connectionにしておく事です。

「TeraTermでリクエスト文を打っても、一行にCが出てこない」という場合は、ここの設定が原因の場合が多いようです。
[2]XPort/WiPortをシリアル接続で、TeraTerm等から操作する。
railsプロジェクトの場合、以下のようなリクエスト文になると思われます。
C192.168.0.111:3000
GET /main HTTP/1.1<^M^J>
HOST: 192.168.0.111<^M^J><^M^J>

Winでは\を¥に変える場合もあるようです。確かめてください。
TeraTermの設定で変えられるらしいのですが、Cでサーバーに接続した後はCtrl+M/Ctrl+Jが改行/復帰(復帰=キャリッジリターン:CR/改行=ラインフィード:LF)になります。

キャリッジリターン:CR/ラインフィード:LFは、とっても重要です!


どこに使ったか、何回使ったかを必ず確認しましょう。CRのみの場合や、LFのみの場合、CRLF両方の場合があります。1つのリクエストの中で、CRのみを使う箇所と、CRLFを使う箇所がある場合もあります。1つでも違うと、リクエストは通りません。きちんと把握しましょう。
[3]Proce55ingから、シリアル経由でHTTPリクエストを行う。
お世話になりっぱなしのMakingThingsTalkのサイトに載っているプログラム(Lantronix serial-to-ethernet HTTP request tester)を使いましょう。
CRとLFに注意して、
myPort.write("C192.168.0.111:3000\n");//ここはCRのみ

myPort.write("GET /main HTTP/1.1\r\n");//こちらはCRLFを一回
myPort.write("HOST: 192.168.0.111\r\n\r\n");//CRLFを二回

Railsの場合、接続は復帰=CR一回になります。改行=LFを足すと失敗します。接続した後は、CRLFにしないとまた失敗します。
注意しましょう。
ここで上手くいかなければ、TeraTermからやり直して、もう一度確認です。
このときCR/LFだけでなく、記号(:や/)にも注意してください。:を/に変えたり、\を¥にしたりなど。
成功したら、いよいよマイコンからHTTPリクエスト文をXPort/WiPortに送ります。
[4]マイコンにリクエスト用のコードを書き込む。

Proce55ingで書いたものに忠実に、リクエスト文を出力するようにする。

これを守りましょう。どこから失敗するようになったか分からなくなってしまいますよ。以前のblogにも書いたので、かんたんに説明します。
serialSend("c192.168.0.111:3000" + "\n");
serialSend("GET /main HTTP/1.1\r\n" + "\r\n");
serialSend("HOST: 192.168.0.111"+ "\r\n\r\n");

ほとんどproce55ingで使ったリクエスト文のまんまです。プリント用のメソッド名がそれぞれのマイコンによって違うので合わせてください。未確認ですが、Arduinoだったらこんな感じ?
Serial.print("c192.168.0.111:3000" + "\n");
Serial.print("GET /main HTTP/1.1\r\n" + "\r\n");
Serial.print("HOST: 192.168.0.111"+ "\r\n\r\n");

マイコンによっては、アスキー表のコード番号からCRとLFを引っ張ってくる必要があったりもします。とりあえずは、Proce55ingで上手くいったコードをそのまま流用してからです。

こちらも参考にしながら、Rails + Xport/Wiport + マイコン によるフィジカルコンピューティングライフを楽しんでみてください。

0 件のコメント: