ANEを使ってAIRアプリ単体でArduinoと通信する
久々にFlash×Arduinoネタ.
as3-arduino-connector というANEを使います.
introduction
flashとarduinoを連携させる方法は今までも色々ありましたが,flashはシリアル通信が出来ないので別途プロキシサーバを用意する必要がありました.
(代表的な方法としてFunnelというプロキシサーバ&apiを使うやり方があります.以前blogでも取り上げました;) Flashを使用したフィジカルコンピューティング - いつきの技的日記 )
つまりAIRでarduinoと連携したアプリを作って配布しても,各ユーザにプロキシサーバをインストールしてもらい,アプリを使う際に毎回起動してもらわなければなりませんでした.
これは大変な手間ですし現実的ではないです.
が,as3-arduino-connectorというANEの登場で状況が一変しました.
Google Code Archive - Long-term storage for Google Code Project Hosting.
このANEを使うことで,別途プロキシサーバを用意すること無くAIRアプリ単体でarduinoと通信ができるのです!
使ってみる
感覚的にはprocessingとarduinoを通信させる時に似ています.
準備
とりあえずas3-arduino-connectorをダウンロードして,プロジェクトに入れましょう.
Flash cs6なら,スクリプトの設定→ライブラリパスの画面でaneファイルを追加することで,apiが使用できるようになります.
コード
準備ができたらコードを書いていきましょう
まずarduino側でシリアル通信の準備.
試しに以下のようなコードを書いてarduinoに送ってみます.
void setup() { Serial.begin(9600); } void loop() { Serial.write("hello"); delay(1000); }
これで1秒感覚で"hello"という文字を投げるようになります.
そして,flash側では次のようなコードを書いてみます.
package { import flash.display.Sprite; import flash.text.TextField; import flash.events.Event; import com.quetwo.Arduino.ArduinoConnector; import com.quetwo.Arduino.ArduinoConnectorEvent; public class Main extends Sprite{ private var _arduino:ArduinoConnector; private var _txt:TextField; public function Main() { init(); } private function init():void { _txt = new TextField(); addChild(_txt); _arduino = new ArduinoConnector(); if (_arduino.isSupported()) { comm(); } } private function comm():void { _arduino.connect("/dev/tty.usbserial-A6008kUC",9600); _arduino.addEventListener("socketData",onSock); } private function onSock(e:Event):void { _txt.text += _arduino.readBytesAsString(); _txt.text += "\r"; } } }
as3側ではarduinoが発信している内容を取得して,テキストフィールドに書き込んでいますね.
コードをもう少し詳しく見てみましょう.
as3コード解説
まず必要ライブラリのインポート.
ArduinoConnectorがarduinoと通信をする本体で,ArduinoConncetorEventが通信に関するイベントを扱うものです.
ArduinoConnectorをnewして,isSupported()でこのANEが使えるかをチェックします.
無事使用できるようなら,connect()でarduinoと接続を行います.
第一引数がシリアルポート,第二引数がarduino側で設定した通信速度です.
ちなみにシリアルポートは _arduino.getComPorts(); で取得することも出来ます.(戻り値型はarray)
接続設定を行ったら,"socketData" イベントをaddします.これでarduino側から新しいデータが送られたときにイベントリスナーが呼ばれます.
あとはreadBytesAsString()で,データを読み取ります.
まとめ
as3-arduino-connectorというANEで,AIRアプリ単体でarduinoと通信が出来るようになりました.
Google Code Archive - Long-term storage for Google Code Project Hosting.
今回はarduino->flashでしたが,その逆も同じ要領で可能です.
様々なセンサと組み合わせて,楽しげなものが作れる気がしますね;)
おまけ ~AIRのメリット
個人的な感想だと,processingやopenFrameworksを使うよりAIRの方がUIとか作りやすいしいいなーと思ってます.
arduinoを使ったフィジカルコンピューティングの入門用としてなら,processingが手軽で良いですが,作り込みが必要な本格的な作品となるとAIRとかoFがいいのかなーと.
結局適材適所ですね;)
でもFlasherが今までの資産を生かすにはこの方法が間違いなくベストです!
最近パーソナルファブリケーションとか流行ってますし,少しずつハードウェアも使いこなしていくと世界が広がるんじゃないかなーと思ってます.