日新システムズさん、ごめんなさい。この場であやまっても仕方ないのですが、WiPortの問題は解決しました。
今日、DNPでWiPortを使おうとした所、まったく接続出来なくなってしまい、あわてて日新システムズに問い合わせのメールを送りました。
(問い合わせは二回目。しかも回答をもらう前に、こちらで解決してしまいました。)そして今回もまた、WiPortのせいではなく、DNPのネット環境で使えなくなっていただけだと判明しました。今日はDNPのネットワークはちょっと不安定だったようです。数時間後、問題なく使えていました。
そういえばXportを使っていたときも、なんで接続できないんだ!と数日間悩んだあげく、ネットワーク環境のせいだったと分かって拍子抜けしたことがあったな〜。。。。
でも、WiPort使うのは結構シビアになってまいりました。ネットがかなり安定してないとダメなのに、本番は未知のネットワークですからねー。ドキドキだ
目次
2009年2月21日土曜日
2009年2月16日月曜日
リチウムイオン充電池 LI-355SP を使ってみた
このリチウムイオン充電池 LI-355SP かなり小さくていい感じ!
3.7vということで、このまま使ってしまってもWiPortは大丈夫なんじゃないかと思いつつも、三端子レギュレーターを通して置きました。LEDも鮮やかに光り、大変満足です。
しかし、昨日はこれが出来なかった。。。専用充電器というのが、隣に並べて千石で売られていたので購入した所、とてもファジーな代物でした。
充電が完了したら、LEDの色が赤から緑にかわる、と書いてあり、そのLEDの色に従うとまず充電は完了していません。
LEDの色は無視して、だいたい、1時間〜2時間くらい充電してあげるといいと思います。
値段は1つ3000円と高価ではありますが、乾電池よりも全然小さくて軽いので、電子工作にはうってつけだと思います。
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プロジェクトの場合、以下のようなリクエスト文になると思われます。
Winでは\を¥に変える場合もあるようです。確かめてください。
TeraTermの設定で変えられるらしいのですが、Cでサーバーに接続した後はCtrl+M/Ctrl+Jが改行/復帰(復帰=キャリッジリターン:CR/改行=ラインフィード:LF)になります。
どこに使ったか、何回使ったかを必ず確認しましょう。CRのみの場合や、LFのみの場合、CRLF両方の場合があります。1つのリクエストの中で、CRのみを使う箇所と、CRLFを使う箇所がある場合もあります。1つでも違うと、リクエストは通りません。きちんと把握しましょう。
[3]Proce55ingから、シリアル経由でHTTPリクエストを行う。
お世話になりっぱなしのMakingThingsTalkのサイトに載っているプログラム(Lantronix serial-to-ethernet HTTP request tester)を使いましょう。
CRとLFに注意して、
ここで上手くいかなければ、TeraTermからやり直して、もう一度確認です。
このときCR/LFだけでなく、記号(:や/)にも注意してください。:を/に変えたり、\を¥にしたりなど。
成功したら、いよいよマイコンからHTTPリクエスト文をXPort/WiPortに送ります。
[4]マイコンにリクエスト用のコードを書き込む。
ほとんどproce55ingで使ったリクエスト文のまんまです。プリント用のメソッド名がそれぞれのマイコンによって違うので合わせてください。未確認ですが、Arduinoだったらこんな感じ?
マイコンによっては、アスキー表のコード番号からCRとLFを引っ張ってくる必要があったりもします。とりあえずは、Proce55ingで上手くいったコードをそのまま流用してからです。
こちらも参考にしながら、Rails + Xport/Wiport + マイコン によるフィジカルコンピューティングライフを楽しんでみてください。
手順:
[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 + マイコン によるフィジカルコンピューティングライフを楽しんでみてください。
Mulius ver1.0 完成
今朝、ようやくハードも完成し、Mulius ver 1.0が完成しました!!!!!
長かった。。。でも、予定よりも早い完成で、嬉しい限りです。
苦労したのは、WiPort + Rails + マイコン(moxa)が、うまく連携してくれなかったこと。
WiPort + マイコンが上手くいっていないのか、Rails + WiPortが上手くいっていないのか、WiPort + Rails + マイコンを連携させる時に、不具合が起こるのか、どこで失敗するのかもうぐちゃぐちゃに。
そんなとき、Iさんに相談した所、以下のようなアドバイスを頂きました。
>足場を固めながら、論理的に問題を切り分けて行かないと、
>決してゴールにはたどり着けませんよ。
いい言葉です。。。自分の大雑把さを反省しました。コードはたった一文字で動かなかったりするんですよね。
そんなわけで、手順に関してもアドバイスを頂いたので、それをたどる事にしました。
>1 googleサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
>2 Processingでgoogleサーバに「全く同じ」リクエスト文字列を作り、確認
>3 moxaから「全く同じ」リクエスト文字列を送って確認
>4 Railsサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
>5 ProcessingでRailsサーバに「全く同じ」リクエスト文字列を作り、確認
>6 moxaから「全く同じ」リクエスト文字列を送って確認
それでは、手順をひとつずつ見て行きましょう。
[1]SFCサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
googleにリクエストを出すと、上手くいかない時があったので、大学のwebサイトのindexにGET要求を出す事にしました。
まずはSFCのIPアドレスを調べます。
digでIPアドレスを調べることが出来ますよ。調べたら、TeraTermで、HTTPリクエストを出してみます。
MakingThingsTalkという本を参考に、やってみました。
ポート指定の前は、MakingThingsTalkでは/を使っていました。/ではなく:ではないだろうか?という意見を頂いたのですが、/を使っても、:を使っても同じくサーバーと接続できました。なので、ひとまず:で統一することにしました。
少し気になっているのは、サーバーに接続した後は、Enterではなく^M^J(Ctrl-M,Ctrl-J)でCRLFを行っている事。MakingThingsTalkには書かれていたのですが、なぜ^M^Jでなくてはダメなのかは設定の問題と書いてありました。ちょっと気になる所でしたが、ともあれ、上記のリクエスト文で間違いなくGETできていました(200 OKも出ているので)
[2]ProcessingでSFCサーバに「全く同じ」リクエスト文字列を作り、確認

MakingThingTalkではTeraTermからではなく、Proce55ingから、シリアル接続でWiPortにリクエストを出せるプログラムが載っています。Processingのコードの中に大学のサイトのIPアドレスを入れます。
ちなみにこれは、何でもいいので、ボタンを押すと、イベントシーケンスを1つずつ実行してくれるプロジェクトです。
200 OKと出て、処理が行われました。改行は\nで良さそうです。MakingThingsTalkでは、Cの後は\rになっていたのでちょっと気になっていましたが、\nに変えても結果は変わらなかったので、\nで統一することにしました。(TeraTermで入力した文字列に忠実であるため)また、GET以降はTeraTermと合わせるため、\r\nとしましたが、\nでも問題なく動いていました。
myPort.write("GET /index.html HTTP/1.1\n");
myPort.write("HOST: www.sfc.keio.ac.jp\n\n");
ひとまずは\r\nで行く事にします。
[3]moxaから「全く同じ」リクエスト文字列を送って確認
確認の方法が少し面倒だったので、(MakingThingsTalk > Processingでサーバーを作る方法)
後回しにして、railsの方を進めてみました。
[4]Railsサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
mainページだと、かえってくるhtmlが長過ぎるので、loginページにリクエストを出して分かりやすくしました。
200 OKが出て、きちんとかえってきました。
[5]ProcessingでRailsサーバに「全く同じ」リクエスト文字列を作り、確認
Processingのコード・以下の三カ所を変更。
なんと今度は成功!ずっと失敗してたのに、、、、。
200 OKとでて、きちんと返してくれました。こちらはSFCの場合と異なり、\r\nとしなければ失敗するようです。(試しに\nでリクエストを出したところ、同じようなエラーが出ました。)
ひとつずつ確認していった事が功を奏したようです。POSTも同様に確かめてみました。
myPort.write("C192.168.0.111:3000\n");
myPort.write("GET /encounter HTTP/1.1\r\n");
myPort.write("HOST: 192.168.0.111\r\n\r\n");
こちらも成功していました。これは期待できるかも、、、、?!
[6] moxaから「全く同じ」リクエスト文字列を送って確認
長いので、全文は後ほど掲載します。
前回からの変更点のみ抜粋。
変数の宣言で、文字列指定しちゃいます。ポイントはString.fromCharCode。アスキーコードからCR(改行)とLF(復帰)を引っ張ってきます。
あとは、なんらかの信号を受け取った時(Muliusの場合、他のmoxa基盤からZigBeeで値を受け取った時)にserialSendでWiPortに上記の文字列を送るようにします。
いざ、、、moxaに書き込み、WiPortの電源を入れて、通信させてみます。
すると、railsサーバー側では以下の結果が!

ブラウザから見てみると、

出来てた〜!!!!!
ここまで丸三日間、、、本当にがんばりました。あとはガワやサイトのCSSを整えたりって感じです。もうちょっとだけがんばりますが、今日はblogを書いたりしてのんびり過ごします(笑)
長かった。。。でも、予定よりも早い完成で、嬉しい限りです。
苦労したのは、WiPort + Rails + マイコン(moxa)が、うまく連携してくれなかったこと。
WiPort + マイコンが上手くいっていないのか、Rails + WiPortが上手くいっていないのか、WiPort + Rails + マイコンを連携させる時に、不具合が起こるのか、どこで失敗するのかもうぐちゃぐちゃに。
そんなとき、Iさんに相談した所、以下のようなアドバイスを頂きました。
>足場を固めながら、論理的に問題を切り分けて行かないと、
>決してゴールにはたどり着けませんよ。
いい言葉です。。。自分の大雑把さを反省しました。コードはたった一文字で動かなかったりするんですよね。
そんなわけで、手順に関してもアドバイスを頂いたので、それをたどる事にしました。
>1 googleサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
>2 Processingでgoogleサーバに「全く同じ」リクエスト文字列を作り、確認
>3 moxaから「全く同じ」リクエスト文字列を送って確認
>4 Railsサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
>5 ProcessingでRailsサーバに「全く同じ」リクエスト文字列を作り、確認
>6 moxaから「全く同じ」リクエスト文字列を送って確認
それでは、手順をひとつずつ見て行きましょう。
[1]SFCサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
googleにリクエストを出すと、上手くいかない時があったので、大学のwebサイトのindexにGET要求を出す事にしました。
まずはSFCのIPアドレスを調べます。
$ dig www.sfc.keio.ac.jpdigでIPアドレスを調べることが出来ますよ。調べたら、TeraTermで、HTTPリクエストを出してみます。
C133.27.4.221:80
GET /index.html HTTP/1.1<^M^J>
HOST: www.sfc.keio.ac.jp<^M^J><^M^J>MakingThingsTalkという本を参考に、やってみました。
ポート指定の前は、MakingThingsTalkでは/を使っていました。/ではなく:ではないだろうか?という意見を頂いたのですが、/を使っても、:を使っても同じくサーバーと接続できました。なので、ひとまず:で統一することにしました。
少し気になっているのは、サーバーに接続した後は、Enterではなく^M^J(Ctrl-M,Ctrl-J)でCRLFを行っている事。MakingThingsTalkには書かれていたのですが、なぜ^M^Jでなくてはダメなのかは設定の問題と書いてありました。ちょっと気になる所でしたが、ともあれ、上記のリクエスト文で間違いなくGETできていました(200 OKも出ているので)
[2]ProcessingでSFCサーバに「全く同じ」リクエスト文字列を作り、確認

MakingThingTalkではTeraTermからではなく、Proce55ingから、シリアル接続でWiPortにリクエストを出せるプログラムが載っています。Processingのコードの中に大学のサイトのIPアドレスを入れます。
ちなみにこれは、何でもいいので、ボタンを押すと、イベントシーケンスを1つずつ実行してくれるプロジェクトです。
import processing.serial.*;
Serial myPort; // Serial object
int step = 0; // which step in the process you're on
char linefeed = 10; // ASCII linefeed character
void setup()
{
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 9600);
myPort.bufferUntil(linefeed);
}
void draw()
{
}
void serialEvent(Serial myPort) {
print(myPort.readString());
}
void keyReleased() {
switch (step) {
case 0:
myPort.write("C133.27.4.221:80\n");
step++;
break;
case 1:
myPort.write("GET /index.html HTTP/1.1\r\n");
myPort.write("HOST: www.sfc.keio.ac.jp\r\n\r\n");
step++;
break;
}
}200 OKと出て、処理が行われました。改行は\nで良さそうです。MakingThingsTalkでは、Cの後は\rになっていたのでちょっと気になっていましたが、\nに変えても結果は変わらなかったので、\nで統一することにしました。(TeraTermで入力した文字列に忠実であるため)また、GET以降はTeraTermと合わせるため、\r\nとしましたが、\nでも問題なく動いていました。
myPort.write("GET /index.html HTTP/1.1\n");
myPort.write("HOST: www.sfc.keio.ac.jp\n\n");
ひとまずは\r\nで行く事にします。
[3]moxaから「全く同じ」リクエスト文字列を送って確認
確認の方法が少し面倒だったので、(MakingThingsTalk > Processingでサーバーを作る方法)
後回しにして、railsの方を進めてみました。
[4]Railsサーバから正しい反応が貰えるようなリクエスト文字列をTeratermで確認
mainページだと、かえってくるhtmlが長過ぎるので、loginページにリクエストを出して分かりやすくしました。
C192.168.0.111:3000
GET /login HTTP/1.1<^M^J>
HOST: 192.168.0.111<^M^J><^M^J>200 OKが出て、きちんとかえってきました。
[5]ProcessingでRailsサーバに「全く同じ」リクエスト文字列を作り、確認
Processingのコード・以下の三カ所を変更。
myPort.write("C192.168.0.111:3000\n");
myPort.write("GET /encounter HTTP/1.1\r\n");
myPort.write("HOST: 192.168.0.111\r\n\r\n");なんと今度は成功!ずっと失敗してたのに、、、、。
200 OKとでて、きちんと返してくれました。こちらはSFCの場合と異なり、\r\nとしなければ失敗するようです。(試しに\nでリクエストを出したところ、同じようなエラーが出ました。)
ひとつずつ確認していった事が功を奏したようです。POSTも同様に確かめてみました。
myPort.write("C192.168.0.111:3000\n");
myPort.write("GET /encounter HTTP/1.1\r\n");
myPort.write("HOST: 192.168.0.111\r\n\r\n");
こちらも成功していました。これは期待できるかも、、、、?!
[6] moxaから「全く同じ」リクエスト文字列を送って確認
長いので、全文は後ほど掲載します。
前回からの変更点のみ抜粋。
var CR = String.fromCharCode(13);
var CRLF = String.fromCharCode(13, 10);
var c = "C192.168.0.111:3000";
var h = "HOST: 192.168.0.111";
var con = "Content-Type: application/x-wwwform-urlencoded";
var p1 = "POST /encounter/ab HTTP/1.1";
var p2 = "POST /encounter/ac HTTP/1.1";
var p3 = "POST /encounter/ad HTTP/1.1";変数の宣言で、文字列指定しちゃいます。ポイントはString.fromCharCode。アスキーコードからCR(改行)とLF(復帰)を引っ張ってきます。
あとは、なんらかの信号を受け取った時(Muliusの場合、他のmoxa基盤からZigBeeで値を受け取った時)にserialSendでWiPortに上記の文字列を送るようにします。
serialSend(c + CR);
serialSend(p1 + CRLF);
serialSend(h + CRLF);
serialSend(con + CRLF + CRLF);いざ、、、moxaに書き込み、WiPortの電源を入れて、通信させてみます。
すると、railsサーバー側では以下の結果が!

ブラウザから見てみると、

出来てた〜!!!!!
ここまで丸三日間、、、本当にがんばりました。あとはガワやサイトのCSSを整えたりって感じです。もうちょっとだけがんばりますが、今日はblogを書いたりしてのんびり過ごします(笑)
2009年2月3日火曜日
Wi-portからHTTP POST
Wi-portからHTTP POSTすることを、ずいぶん試しているのですが出来ません。
作ったプロジェクトはこんなもの。

プロジェクトを作った後は、modelを作ってstring型のnameとtext型のmessageというカラムを追加しました。
migrationファイル:XXXXXXXXX_create_users.rb
userというコントローラーを作り、index、new、destroy、createを追加。フォームも作って投稿出来るようにしました。
user_controller
index.rhtml
new.rhtml

ソースをのぞいてみると、
ここと
id="user_name" name="user[name]"
ここが
id="user_message" name="user[message]"
キモのようです。これを返せばいいんですよね、きっと。
wi-portでhttp postしてみましょう。
シリアル変換をしてtera termで
※Enterの代わりにCntrl + M, CntrlJ を打ちます。= [^M^J]
※Making Things Talk参照
しかし途中でdisconnectになってしまいます。
試しにコマンドプロンプトから
成功しません。サーバー側のステータスコードを見てみると、
なぜか[GET]メソッドになっている。。。もうこればっかりやっていて、気が狂いそうになっていた所で、キョンちゃんがやってくれました。
最後のContent-Typeを指定する文章を書き足すと、POSTが成功するようです。
しかし、
ここは送れないようです。[ ]を変換する必要があるのかな?
作ったプロジェクトはこんなもの。

rails -d mysql posttestプロジェクトを作った後は、modelを作ってstring型のnameとtext型のmessageというカラムを追加しました。
ruby script/generate model usermigrationファイル:XXXXXXXXX_create_users.rb
t.column :name, :string
t.column :message, :textuserというコントローラーを作り、index、new、destroy、createを追加。フォームも作って投稿出来るようにしました。
ruby script/generate controller user index new show createuser_controller
def index
@users = User.find(:all)
end
def create
@user = User.new(params[:user])#上のnewでの値を受け取っています。
if@user.save
redirect_to :action => 'index'
else
render :action => 'new'
end
end
def new
end
def destroy
@user = User.find(params[:id])
@user.destroy
flash[:notice] = '削除しました'
redirect_tindex.rhtml
<h1>Users#index</h1>
<div class ="notice"><%= h(flash[:notice])%></div>
<p><%= link_to('新規ユーザー作成', :action => 'new')%></p>
<% @users.each do |user| -%>
<li>
<%= link_to(h(user.name), :action => 'show', :id => user.id)%>
<%= link_to('削除', {:action => 'destroy', :id => user.id},
{:method => :post, :confirm => '本当に削除しますか?'})%>
</li>
<% end -%>
new.rhtml
<h1>Users#new#新しいユーザーを作る</h1>
<% form_for :user, @user,
:url=>{:action => 'create'} do |form| %>
<p>名前: <%=form.text_field :name, :size => 16 %> </p>
<p>メッセージ:<br /><%=form.text_area :message, :colse =>40, :rows => 3%> </p>
<p>
<%= form.submit 'Create' %>
</p>
<% end %>
<p><%= link_to('一覧へ戻る', :action => 'index') %></p>
ソースをのぞいてみると、
<h1>Users#new#新しいユーザーを作る</h1>
<form action="/user/create" method="post"><div style="margin:0;padding:
0"><input name="authenticity_token" type="hidden"
value="3459c27ed8923e8483d23bd0b4a8a870f248bc56" /></div>
<p>名前: <input id="user_name" name="user[name]" size="16"
type="text" /> </p>
<p>メッセージ:<br /><textarea cols="40" colse="40"
id="user_message" name="user[message]" rows="3"></textarea> </p>
<p>
<input id="user_submit" name="commit" type="submit" value="Create" />
</p>
</form>
<p><a href="/user">一覧へ戻る</a></p>
ここと
id="user_name" name="user[name]"
ここが
id="user_message" name="user[message]"
キモのようです。これを返せばいいんですよね、きっと。
wi-portでhttp postしてみましょう。
シリアル変換をしてtera termで
C192.168.0.111:3000
POST /user/create HTTP/1.1 ^M^J
HOST: 192.168.0.111:3000 ^M^J
user[name]=hoge&user[message]=hoge ^M^J
※Enterの代わりにCntrl + M, CntrlJ を打ちます。= [^M^J]
※Making Things Talk参照
しかし途中でdisconnectになってしまいます。
試しにコマンドプロンプトから
telnet 192.168.0.111 3000
POST /user/create HTTP/1.1
HOST: 192.168.0.111 3000
user[name]=hoge&user[message]=hoge
成功しません。サーバー側のステータスコードを見てみると、
Processing UserController#index (for 192.168.0.111 at 2009-02-03 20:38:01) [GET]
SQL (0.1ms) SET NAMES 'utf8'
SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
User Load (0.7ms) SELECT * FROM `users`
Rendering user/index
User Columns (3.0ms) SHOW FIELDS FROM `users`
Completed in 69ms (View: 63, DB: 1) | 200 OK [http://192.168.0.111/user]
なぜか[GET]メソッドになっている。。。もうこればっかりやっていて、気が狂いそうになっていた所で、キョンちゃんがやってくれました。
POST /user/create HTTP/1.1 ^M^J
HOST: 192.168.0.111 ^M^J
Content-Type: application/x-wwwform-urlencoded最後のContent-Typeを指定する文章を書き足すと、POSTが成功するようです。
しかし、
user[name]=hoge&user[message]=hoge
ここは送れないようです。[ ]を変換する必要があるのかな?
2008年12月29日月曜日
Wi-port設定について
久しぶりにWi-portの設定をしようとしたら、上手くいかない。。。。
と苦悩すること一時間。
電源をシリアル変換からの供給ではなく、別に用意したところ、それが原因だった模様。
シリアル変換のVCCとGNDからWi-port電源3.3v回路を作ったら、上手くいきました。
余計なことに手をだすな、ってことですね。
それから、前回Wi-portに関して書いた時、Configurable Pin Settingsについて書いてなかったので補足。

Configurable Pin1をSerial Channel 1 Status LED、Highにしました。これで、上手く通信出来ている時はLEDが光ります。ちなみにConfigurable Pin1はWi-port基盤では35番pin。Configurable Pin2は6番、Configurable Pin3は7番、Configurable Pin4は19番、、、、、、とめちゃくちゃ分かりづらいので注意。
と苦悩すること一時間。
電源をシリアル変換からの供給ではなく、別に用意したところ、それが原因だった模様。
シリアル変換のVCCとGNDからWi-port電源3.3v回路を作ったら、上手くいきました。
余計なことに手をだすな、ってことですね。
それから、前回Wi-portに関して書いた時、Configurable Pin Settingsについて書いてなかったので補足。

Configurable Pin1をSerial Channel 1 Status LED、Highにしました。これで、上手く通信出来ている時はLEDが光ります。ちなみにConfigurable Pin1はWi-port基盤では35番pin。Configurable Pin2は6番、Configurable Pin3は7番、Configurable Pin4は19番、、、、、、とめちゃくちゃ分かりづらいので注意。
2008年12月13日土曜日
moxaとWi-portと通信速度
こんにちは。リア充を目指すもこもこじゅう/やすこやかです。
なんだか自分が思っている以上に、このblogを見てくれてる人がいるんだな〜って知って、ちょっと嬉しくなりました。
こんなblogを閲覧してくださっている方のなかで、慶應関係者では無い方は、blogに頻繁に出てくる“Xtel”や“moxa”という単語が「?」だったでしょう。
それらの説明はこちら。
そして私は、xtelを活用して、いろいろ作ろうとしている人の一人ってわけです。
と、いまさらながらのご紹介でした。
さて、本題。
前回、moxaとWi-Portを繋げる試みが成功したとお伝えしましたが、問題がありました。
文字化けするのです。moxaから読んで来た値を、Wi-portサーバーから引き出そうとすると文字がぐちゃぐちゃに(><)
文字コードの問題?でも、半角英数字しかつかっていないし。。。。と思い悩んでおりました。が、すぐに解決。
なんと通信速度の問題でした。
Wi-Port側に文字列を送るRuby:
最初、sleepを(1)にしていたのですが、(3)に変更しただけで、文字化けしなくなりました。なんかちょっぴり拍子抜け。
もしくはmoxaに書き込むコードの
(ちなみに、今回はこの手法では解決できませんでした)
シリアル通信の文字化けで悩んでいる方、ちょっと試してみてはどうでしょうか?
なんだか自分が思っている以上に、このblogを見てくれてる人がいるんだな〜って知って、ちょっと嬉しくなりました。
こんなblogを閲覧してくださっている方のなかで、慶應関係者では無い方は、blogに頻繁に出てくる“Xtel”や“moxa”という単語が「?」だったでしょう。
それらの説明はこちら。
そして私は、xtelを活用して、いろいろ作ろうとしている人の一人ってわけです。
と、いまさらながらのご紹介でした。
さて、本題。
前回、moxaとWi-Portを繋げる試みが成功したとお伝えしましたが、問題がありました。
文字化けするのです。moxaから読んで来た値を、Wi-portサーバーから引き出そうとすると文字がぐちゃぐちゃに(><)
文字コードの問題?でも、半角英数字しかつかっていないし。。。。と思い悩んでおりました。が、すぐに解決。
なんと通信速度の問題でした。
Wi-Port側に文字列を送るRuby:
equire 'socket'
client = TCPSocket.open('192.168.0.123', 10001)
while true do
client.write('a')
p client.gets.chomp
sleep(3)
client.write('b')
p client.gets.chomp
sleep(3)
end
最初、sleepを(1)にしていたのですが、(3)に変更しただけで、文字化けしなくなりました。なんかちょっぴり拍子抜け。
もしくはmoxaに書き込むコードの
serialInit(9600);をserialInit(4800);に変えると上手くいく場合もあるそうです。(ちなみに、今回はこの手法では解決できませんでした)
シリアル通信の文字化けで悩んでいる方、ちょっと試してみてはどうでしょうか?
登録:
投稿 (Atom)