October 26, 2008

ChumbyでArduino等をFlashからコントロールする方法 (XMLSocketが使える?)

時計デバイスChumbyと戯れています。前回の記事『FTDIチップ経由でマイコン等と通信するためのCGI』では、Chumbyに接続したFTDIのUSBシリアル変換チップを経由して、更にその先に繋げたマイコンのコントロールをcgiプログラムを使ってFlashから行おう、というものでしたが実はもっといい方法があるようです。今回の記事ではその方法を紹介しようと思います。なお手元にArduino等の環境がないので、この方法自体の完全な検証が済んでいないことを記しておきます(どなたか貸してください、笑)。

方法ですが、サーバを立ててFlashとソケット通信を確立します。これはデスクトップPCでよく行われている、Flashからシリアルポートをたたく方法(TECH Matari 『Flash(AIR)でシリアル制御する方法まとめ』によくまとめられています)なのですが、この方法は前回紹介したcgiプログラムを使う方法に比べて、1) 接続が保たれるので、受信に素早く簡単(=コールバック関数を使える)に対応できる(cgi版ではいちいち一定間隔ごとに受信ありますか?と尋ねにいく必要あり)、2) 負荷が軽い(cgiは起動コストが大きいです)、という利点があります。運用上でセキュリティによる制限を考慮する必要があるものの、それでも魅力的です。

じゃあなんで前回のcgiを使う方法を紹介していたかというと、Chumbyのフラッシュプレーヤは貧弱でXMLSocketなどできないと思っていたからです。現在Chumbyが対応しているのはFlash Lite 3、つまりはストリーム通信(XMLSocketなど)がサポートされています。よく調べましょう、というオチでした。言い訳をさせていただくと、Chumbyの開発段階で搭載されていたフラッシュプレーヤ(Flash Lite 2の機能限定版)にはXMLSocketがサポートされていなかったことが、本家Wiki(Summaryの項目)で明記されています。

このソケット通信を確立するために使うサーバプログラムですが、Arduino開発環境に付属のserproxyを使ってみることにしました。同じ方法をとっているgainarのFlash用のソース(ソフトウェア・ライブラリのFlash内にあるserial_proxy)をポートしても良かったのですが、こちらはJava+JNI(Java Native Interface)で書かれていたので、Pure CなArduinoに軍配をあげました。少し修正を加えればCygwin上のChumby開発環境でなんなくビルドが通り、またChumby上でも動作しました。後はPC用に作られたArduinoのFlashがChumbyでも走ることを確認できればよかったのですが、これは今後ということにしたいと思います。そういうわけで今回の記事ではserproxyの修正点をまとめたパッチ chumby_serproxy.patchを公開することで、お茶を濁したいと思います。

※Flash XMLSocket + serproxy (+ 特にArduino Firmata)だと問題が発生するようです。新たにパッチを作ってみました。Flash Socketなら問題ないようです。

23:04 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | この記事をdel.icio.usでブックマーク | トラックバック
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/671
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。