OBONO’s Diary

へっぽこプログラマの戯言

Arduboy Utility

Arduboy Mate という、Android 端末から Arduboy の Flash 焼き替えができるアプリがある。しかし、愛用している Xperia Z1 は未だに 4.2.2 なので、Android 4.4 以降が対象であるこのアプリをインストールすることができない。
そんな古いバージョン使ってないでさっさとアップデートすれば良いじゃん…というのはごもっともなのだが、まぁ、それはそれとして、以前から Android 端末から直接何かのデバイスを制御する事に興味があったので、これを機会に自分でもアプリを作ってみよう…と思ったのは、夏真っ盛りな7月の終わり頃の話。(遠い目)


アプリを作るにあたって、まずはいろいろググってみたところ、以下の資料を発見。
Physicaloid勉強会@西宮 - Google スライド
なるほど、この Physicaloid というやつを使ってみよう…ということで、GitHub からソースを入手し、サンプルコードを参照しながら、いろいろ試行錯誤する。

  • シリアルの open 処理でエラーになってしまう
    • UsbDeviceConnection#controlTransfer() に渡すパラメータがおかしいっぽいので修正
  • Arduboy が採用している AVR109 というプロトコルはサポートしていない
    • この資料をはじめ、とにかくググって調査し、見よう見まねで実装
  • そもそも、ブートローダーモードにどうやって入るんだ?
    • ボーレートを 1200 にする
  • ブートローダーモードだと、やっぱり open 処理でエラーになってしまう
    • CDC を初期化する処理や、DTR, RTS を有効/無効にする処理がエラーになるので、そこはエラーになっても無視するようにする
  • PC の Arduino IDE と比べると、Flash の書き換えに妙に時間がかかる
    • シリアルから Read をするスレッドループ内で、妙な 50 ミリ秒スリープしている箇所があったので修正
  • 通常動作時にシリアルへの Write ができるが、Read がさっぱりできない
    • ブートローダーモードとは逆に、DTR, RTS を有効にしてあげないといけなかった

…とまぁ、いろいろな困難を乗り越えて、ようやく完成したのが、こちらの Arduboy Utility というわけ。
Arduboy Mate に無い機能として、Flash のバックアップや、EEPROM の書き換えとバックアップ、シリアルモニターと画面のメモリダンプから画像に復元する機能を追加。

なんだかんだで、開発に4か月もかかってしまった。自分の知識不足も原因だとは思うけど、フリーのライブラリを使って何か開発するというのは、こういう事なんだというのを痛感させられたよ。


それにしても、Android Studio 3.0 が10月にリリースされたこのご時世に、未だに Eclipse + ADT で Android アプリを開発しているというのはどうなんだろうね。いい加減 Gradle とかに慣れておかないと、世の中に取り残されてしまいそうな気がする。