androidをリモートコントロール
PCから、ネットワーク越しにAndroidをリモート操作し、以下を行った。
- トースト通知表示
- カメラで写真撮影
- センサ情報の取得
Androidでは、SL4Aのサーバを起動し、PCからpythonを使って、そのサーバ越しに上記操作を行った。
以下のサイトを参考にして作業を行った。
androidをノートPCに無線接続(帰属)
Windows7のノートPCをアクセスポイントにして、そこにAndroidを無線接続(帰属)させた。
また、開発環境は、Windows7のVM上のLinux(Ubuntu10.04)であったため、Windows上でルーティング解決が必要であった。
ルーティング設定
※必要ない時は読み飛ばして可
- fowardingの有効化
- サービスの"Routing and remote Access"で右クリック、"開始"をする。
- ipconfig /allしたときに、"IPルーティング有効"が"はい"になっていることを確認する。
- 仮想ネットワークの追加
- VMwarePlayerでハードウェアで、"ネットワークアダプタ"を追加し、"NAT"で接続する。
- もともとあったネットワークアダプタはそのまま(ブリッジ)にした。
- ルーティング設定
linuxのアドレスが192.168.28.1で、192.168.28.0/24ネットワーク(eth1)、Androidが192.168.100.0/24ネットワークであったので、Linuxにルーティング設定した。
$ sudo ip route add 192.168.100.0/24 via 192.168.28.1 dev eth1
android端末でSL4Aのサーバを動かす
PCからandroidをリモート操作準備
- 接続サーバのIP,ポート番号を環境変数に設定する。
$ export AP_HOST=192.168.100.2 $ export AP_PORT=42378
android.pyをダウンロードする。
(中を見るとAndroidクラスの__init__()でsocket作ってる。コンストラクタで接続先を指定されない時に環境変数利用している。)
リモート操作用のプログラム作成
あとは、作って実行するだけ。
- toast通知用
とりあえず練習。
#! /usr/bin/env python # -*- coding: utf-8 -*- import android droid = android.Android() droid.makeToast("Hello,nihohi")
- カメラ撮影用
リモートから任意のタイミング(定期的でも)撮影できるので、何か使えそう。
OpenCVと組み合わせて画像認識して撮影とかもできるかも。
#! /usr/bin/env python # -*- coding: utf-8 -*- import android droid = android.Android() droid.cameraCapturePicture('/mnt/sdcard/sl4a/fuga.jpg')
- センサ情報取得用
手で光センサ部分を覆ったり、傾けたりすると値が変化して面白い。
こちらのサイトが大変参考になった。
AndroidFacadeAPIセンサー
#! /usr/bin/env python # -*- coding: utf-8 -*- import android import time droid = android.Android() droid.startSensingTimed(1, 500) for i in range(100): event = droid.eventWaitFor("sensors") for key,val in event.result["data"].items(): print "%s:%f"%(key,val) print "\n" droid.stopSensing()