後はこれをFlashアプリと連携させて動かすだけですが、どのようにFlashを作り込めばいいのでしょうか?
Arduinoの公式サイトにはFlashとの連携について記載があり、”Arduino"と”Flash”と言うキーワードで検索してみてもかなりの数のサイトが見つかります。
それらの情報によると、
- Flashは直接シリアルポートにアクセスできない
- FlashからTCPポートへはアクセスできる
- serproxyと言うソフトを使えばシリアルポートとTCPポートの橋渡しができる
Serproxy起動の前にPCのCOM(シリアル)ポートに合わせて設定ファイル(Serproxy.cfg)を書き換えましょう。
# Comm ports used #comm_ports=1,2,3,4,5,6 comm_ports=6 # Default settings comm_baud=9600 comm_databits=8 comm_stopbits=1 comm_parity=none # Idle time out in seconds timeout=300 # Port 6 settings (ttyS5) net_port6=5336※設定ファイルの内容は抜粋です
ArduinoがCOMポート”6”を使用していたため、設定ファイルの内容を合わせて書き換えています。
ボーレートは一番安全っぽい”9600”(Arduino側と合わせる必要があります)に、TCPポートはとりあえず”5336”にしました。
serproxy.exeを起動すると、Windowsのコマンドプロンプトが出てきて、通信待ちのメッセージが表示されます。
アイコン化ができてタスクバーに入ってくれると最高なんですが、それは贅沢と言うものでしょう。
通信の状況が良く分からないので、正しく動いているかどうかが判断できないのですが、Telnetで接続すれば何らかのメッセージが表示され、動作していることが確認できます。
新しいflaファイルを作成して、ステージ上にダイナミックテキストを配置、ラベル名を”cntText”にします。
1フレーム目に下記のようなスクリプトを追加、
//Include Socket Class
import flash.net.Socket;
// Define Variables
var socket:Socket = new Socket();
var hostName="127.0.0.1";
var conPort=5336;
var btCnt = 0;
// Connect when Start
socket.connect(hostName,conPort);
// Recieving Data
socket.addEventListener(ProgressEvent.SOCKET_DATA, onRecvData);
// Connected
socket.addEventListener(Event.CONNECT, function(){
//ここに繋がった時に行う処理を記載
});
// Closed from Server
socket.addEventListener(Event.CLOSE, function(){
//ここに切断された際に行う処理を記載
});
// On Recieving Data
function onRecvData(e:Event):void{
if(!socket.connected) return;
if(socket.bytesAvailable > 0){
var bytes:ByteArray = new ByteArray();
socket.readBytes(bytes);
var recvStr:String = bytes.toString();
incCount(recvStr);
}
}
// Update Counter
function incCount(str:String):void{
btCnt++;
//繰り上がったカウンターをダイナミックテキストで表示
cntText.text = btCnt;
}
ムービーをプレビューし、Arduinoに接続されているボタンを押すと・・・・・ボタンを押す度にカウンターが繰り上がっていくはずです。![]() ※実際は本物のボタンです (クリックでSWFムービー再生) |
ネットワークにアクセスするためには、Flashの起動時にアクセス許可を行うためのポリシーファイルをダウンロードさせる必要があり、ポートの843を監視してポリシーファイルを送信するサーバーが別途必要になります。
一応、アドビの開発者が簡易サーバースクリプトを提供してくれいているのですが、スクリプトはPerlとPythonで提供されていて、別にセットアップしなければなりません。
取り急ぎ、Flashのプレビューか、exe(プロジェクタ)ファイルを作れば問題なく動作するようですので、ポリシーファイル用のサーバーは立てずにそのままにします。
と言うことで、ArduinoとFlashを無事に通信させることに成功しました。
ただ、今の動作は、ボタン >> Arduino >> Serial(COM6) >> TCP(5336) >> Flash(Socket)の処理でFlashからArduinoへのデータの送信は行っていません。
FlashからArduinoへデータを送信する必要がある場合は、socket.writeUTFBytes("文字");で行えますが、キャラクターはArduinoへ送信した際、勝手にコードに変換されてしまうので注意が必要です。
| < 戻る | 次 > |
|---|




