この記事は、Xamarin Advent Calendar 2015 の 4日目の記事です。以前、ざっと書き流していたのですが、もうちょっと詳しく書いていきます。
Xamarin が動作するプラットフォームで、相当異色な感じの Android on Raspberry Pi なので、読み物的にお楽しみください。
Raspberry Pi を用意する
そもそも、なぜ Raspberry Pi で Android なんて動かすのか…は、さておき(苦笑)、Raspberry Pi を用意します。Android のインストールに BerryBoot というインストーラー ディストリビューションを使うのですが、バイナリを見る限り最新の RasPi 2 でも、それ以前のものでも大丈夫なようです。
動作確認は、Raspberry Pi 2 と5inch ディスプレイで確認しています。Raspberry Pi には HDMI 出力がついているので、普通の HD の液晶ディスプレイでも動きます。が、GPU まわりが遅いらしく 1920×1080 のサイズでは非常に遅くて使い物になりません。この 5inch 液晶ディスプレイだと 800×480 でちょうどいい感じに動きます。ちなみに、あとで設定しますが、config.txt を弄ってディスプレイ解像度を変えた後は、据え置きの液晶ディスプレイでも 800×480 の解像度になるので、800×600 などの適当な荒い解像度にして起動しなおせばよいでしょう。
BerryBoot をダウンロードする
BerryBoot v2.0 – bootloader / universal operating system installer から、RasPi 2 ならば berryboot-20150916-pi2-only.zip を、それ以前の RasPi ならば berryboot-20140814.zip をダウンロードします。
最新のファイルは berryboot download | SourceForge.net からダウンロードができます。
micro SD カードに焼きこむ
ダウンロードした zip ファイルを解凍して、micro SD カードに焼きこみます。焼きこむといはいえ、解凍したファイルを micro SD カードにコピーするだけです。micro SD カードは 8GB 程度で十分です。
途中で、起動に失敗したり、micro SD カードが見えなくなった&容量が減った場合は、SDFormatter でフォーマットしてください。オプションで、論理サイズ調節を「ON」にしてフォーマットすれば大抵回復します。
Android のフォーマットは、Windows から読み込めないので micro SD カードが読み込めなくなった(Windows 標準でフォーマットできなくなった)、あるいは Linux で使っていたら 50MB ぐらいしか容量が無くなった(本来は8GBあるはずなのに)、ときにフォーマットするとよいです。
BerryBoot を起動する
BerryBoot は、最初に起動すると SD カードをフォーマットします。
USB キーボードをつなげて、OK を押してください。
RasPi 2 の初期ロットの制限かもしれませんが、HDMI ケーブルをつなげて RasPi に電源を入れるとうまく立ち上がりません。多分、起動時の力不足で立ち上がらなくなってしまうのでしょう。USB キーボード/マウス、有線LAN をつなげっぱなしでも立ち上がらないことが多いので、電源を入れる前は外して、起動しているときに繋げるという技を使っています。
こんな感じでフォーマットをします。
Android をインストールする
“Add OS” ボタンで、OS を追加するのですが、OS イメージはインターネットからダウンロードする方式になっているので、有線LAN をつなげておきます。Android は 4.4(KitKat)がダウンロードできます。最新版はないですね…
Android 4.4 を選択するとダウンロードが始まります。
ダウンロードが終わると、メニューに追加されます。
ここでメニューの「Exit」を選択すると、Android が起動されます。
いちおう、FullHD 解像度で使えるのですが非常に重いです。これでは実験用には使いづらいので、もうすこし低解像度にします。
config.txt で解像度を調節する
再び、RasPi に電源を入れなおして起動すると、BerryBoot → Android の順に立ち上がります。このときに、BerryBoot メニューで Edit Menu ボタンを押します。このボタンを押さないと、10秒後に自動的に Android が立ち上がるので注意してください。
メニューから「>>」に隠れている「Edit config」をクリックして、config.txt を書き換えます。
hdmi_group=2
hdmi_mode=1
hdmi_mode=87
hdmi_cvt 800 480 60 6 0 0 0
のように 800×480 で書き換えています。config.txt を書き間違えると画面がでなくなってしまうので、その時は micro SD カードを焼くところから再スタートしてください。
液晶ディスプレイで 800×480 で動かしたときんは、こんな感じになってスムーズに動くようになります。動かすにはマウスが必要ですが。
Android on Raspberry Pi を起動する
5 inch ディスプレイをつなげて動かすとこんな感じになります。
5 inch 液晶の場合は、電力が十分足りるのかつなぎっぱなしで起動しても大丈夫なのです。Bluetooth は使えないので有線マウスが必須なのが難点ですが。無線マウスは反応がにぶいですが一応動くようです。
adb でデバッグ接続する
やっとこさ、Android の領域に入りました。Android on RasPi の場合、USB デバッグはできるかどうかわからないのですが、既に 5555 ポートが開いていてデバッグモードで動くようになっています。
adb connect <IPアドレス>
でデバッグ接続をします。IP アドレスがどれに割り振られているかを調べるのが大変ですが、Android 起動時の表示にちらっと出てくるので覚えておいてください。
これで Visual Studio や Xamarin Studio からデバッグができるようになります。
Visual Studio で Android on RasPi を動かす
Xamarin Studio 2015 で Android プロジェクトを作ってデバッグ起動をします。
起動メニューのところに「ARM vexpress」と出るので、これを選択します。
Android テンプレートの Hello World プロジェクトが起動できます。
Xamarin.Forms を Android on RasPi で動かす
Xamarin.Forms のサンプルとして My Shoppe をダウンロードして動かしてみましょう。
Visual Studio 2015 Update 1 ではエラーが出てビルドができないので、Xamarin Studio でビルドしています。
ビルド実行は、ARM vexpress(API 19) を選択すれば ok です。
いくつか動かしてみると、画像のロードやテーブルもうまく動いています。これで Android のデバッグも順調にできますね。いや、普通に Android を使ったほうが便利なのですがw
Android on RasPi を何に使うか?
さて、Android が Raspberry Pi で動くことが分かったのですが、これを何につかうか?です。もともと、組込み系の展示会に行ったときに Android 試験ボードを見て、結構高い(2,3万円程度)ので何かで代用できないかな、と思ったところがスタートです。Android 拡張ボードには、ネットワークの他にも Bluetooth や各種ピンが配置されています。Android on RasPi の場合には、Bluetooth ドングルが有効にならないのですが、ピンのほうはなんとかできるのでは?と考えています。UI 部分を Xamarin で作って、内部的には Linux で GPIO 等を操作できればいいですよね。
まあ、5 インチ液晶を載せてしまうとピンが隠れてしまうので駄目なんですが、ピンがつながるようにして、戦車やロボットアームが動かないかな、と考えているところです。Rasbian と同じように /sys/class/gpio/export にアクセスすることで制御が可能だと思うんですけどね。