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 件のコメント:
コメントを投稿