AndroidからPCへ情報送りたいって思いません?
しかも一度PC側のソースを書いたらどのOSでも動いたらうれしくないですか?
そこで、今回はマルチプラットフォームで動くProcessingを使って、
AndroidとPCをつないでみたいと思います。
Processingに標準で搭載されているネットワーク関係のライブラリは
使ってみた感じUDPではなさそうです。(おそらくTCPかな?)
ファイルのやり取りなどはそれでもよいのですが、
今後のことを考えてUDPで通信を行います。(今後はお楽しみ)
しかし、Processingには標準でUDPのライブラリが入っていないようです。
なので、こちらからudp.zipをダウンロードし、解凍してできたフォルダを
Processingが格納されているフォルダ内のlibrariesへコピーします。
macの場合、Finderから「アプリケーション」→「Processing」を右クリックする。
そしたら、「パッケージの内容を表示」をクリック。
パッケージの内容が表示されるので、
「Contents」→「Resources」→「Java」→「libraries」に
「udp」フォルダを追加する。そうすることでProcessingの開発環境でライブラリを
使用することができるようになる。
環境が整ったら、コーディング方法。
Processingを立ち上げ、メニューから
「Sketch」→「Import Library...」→「udp」をクリックする。
そうすると、スケッチに
import hypermedia.net.*;
が追加される。
それで、今回作成したコードは以下。
/** * Server */ import hypermedia.net.*; import processing.net.*; import processing.serial.*; /************************************************* * 定数定義 ************************************************/ /** ポート番号 */ private static final int PORT = 1113; /** 画面横幅 */ private static final int WIND_WIDTH = 320; /** 画面縦幅 */ private static final int WIND_HEIGHT = 240; /************************************************* * 変数定義 ************************************************/ /** サーバー */ //private Server mServer; /** UDP */ private UDP udp; /** タイムアウト回数 */ private int timeout = 50; /** サーボへの出力値 */ private int sensor1, sensor2; /************************************************* * 通信 ************************************************/ void receive(byte[] data) { sensor1 = data[0]; sensor2 = data[2]; } /************************************************* * Processingのメソッド定義 ************************************************/ /** * セットアップ */ void setup() { size(WIND_WIDTH, WIND_HEIGHT); frameRate(10); // サーバーのインスタンスの生成 //mServer = new Server(this, PORT); // UDPのインスタンス生成 udp = new UDP(this, PORT); udp.listen(true); noStroke(); } /** * 描画ループ */ void draw() { background(0,0,0); fill(color(255,255,255)); text("Sensor[0]:" + sensor1, 0, 15); text("Sensor[1]:" + sensor2, 0, 30); }
これでUDP通信でAndroid側から情報を受け取ることができます。
今回はデータはbyte配列内にbyte型のデータのみを入れています。
データをきちんと格納してあげればshortでもintでも格納することは可能です。
それで以下がAndroid側のコード
// 一部抜粋 DatagramSocket sock; DatagramPacket packet; byte[] buf = {(byte)1, (byte)2}; int ret = buf.length; sock = new DatagramSocket(); packet = new DatagramPacket(buf, ret, InetAddress.getByName(mIp), mPort); sock.send(packet); sock.close();
今後につながってくる部分なので一部抜粋をしてコードをのせています。
しかし、基礎となるコードは基本これだけです。
これにいろいろデータをのせてあげたりすることでデータのやり取りが可能になります。
まとめ
今回はProcessingを使ってPCとAndroidの通信の基礎部分を構築しました。
比較的簡単に構築することができるかと思います。
今後は大きいサイズのデータのやり取りやもう少しひねった物を作っていきます。
0 件のコメント:
コメントを投稿