Android 2.3以降から組み込み系のプログラミングに利用できるADK(Android OpenAccessory Development Kit: Android オープンアクセサリ開発キット)が提供され、AndroidからADK互換機を制御することが可能となりました。今後はAndroidに対応した組み込み家電などの需要が増加してくることが予想されています。
本書は、ADKを利用した組み込みAndroidプログラミングの手法について解説した書籍です。ADK互換機の回路の仕組みから始まり、実際に互換機を制御する組み込みプログラミングまで、サンプルを元に丁寧に解説。これ1冊で、Androidを利用した組み込みプログラミングがひと通り理解できます。また本書の巻末には、すぐに使えるミニサンプルプログラムも用意していますので、「まずはさわって動かす」ということが体験できます。
第1章 Android 端末と外部機器を接続する仕組み
1-1 Android 端末と外部機器を接続してできること
1-1-1 Android 端末を利用したシステムの構築
1-1-2 Android 端末と外部接続したハードウェアがつながる
1-2 Android 端末と外部機器を接続する前に準備すること
1-2-1 Android 端末と外部機器を接続する前に
1-3 本書で使用するArduino マイコンボード
1-3-1 Arduino マイコンボードの概要と入手先
1-4 Android Open Accessory について
1-4-1 Android Open Accessory とは
1-4-2 ADK の特徴
1-5 ADK に対応していない外部機器との接続方法
1-5-1 Bluetooth で接続する
1-5-2 TCP/IP ネットワークで接続する
1-5-3 MicroBridge で接続する
1-5-4 USB Host API で接続する
第2章 Android ADK の開発環境の準備
2-1 Arduino IDE を準備する
2-1-1 Arduino は小さなコンピュータ
2-1-2 Arduino IDE をインストールする
2-1-3 Arduino を動かす
2-2 Arduino IDE で利用できるライブラリ
2-2-1 Arduino IDE に用意されているライブラリについて
2-2-2 標準ライブラリを使う
2-2-3 コントリビュートライブラリを使う
2-3 Android ADK の開発環境を構築する
2-3-1 Android ADK について
2-3-2 Java Development Kit(JDK)をインストールする
2-3-3 JDK のPath を環境変数に追加する
2-3-4 Eclipse をインストールする
2-3-5 Android Development Tool(以下ADT)プラグインとAndroid SDK の導入
2-4 Arduino Mega ADK を動かす
2-4-1 Android 端末とArduino Mega ADK でデータ通信を行う準備
2-4-2 Arduino Mega ADK の準備とスケッチの作成
2-4-3 Android アプリケーションを作成する
第3章 Arduino マイコンボードの特徴
3-1 電子工作環境の変化
3-1-1 近年の電子工作について
3-1-2 マイコンの開発環境
3-2 Arduino の特徴
3-2-1 Arduino はオープンソースハードウェアのマイコンボード
3-2-2 Arduino 互換機について
3-2-3 Arduino マイコンボードのハードウェア構成
3-2-4 Arduino IDE の開発環境について
3-2-5 Arduino マイコンボード上のソフトウェアの書き換え
3-3 Arduino マイコンボードのピンソケットとピンの配置
3-3-1 Arduino マイコンボードのピンソケット
3-4 Arduino シールドの利用方法
3-4-1 Arduino シールドとArduino マイコンボード
3-5 Arduino マイコンボードおよびその互換機で使用されているマイコン
3-5-1 ATMEL 社のAVR マイコンを使用している互換機
3-5-2 ATMEL 社のAVR マイコンの種類
3-5-3 ATMEL 社のAVR マイコン以外を使用しているArduino 互換機
第4章 Android SDK を使用して外部機器と接続する
4-1 Android 端末とArduino マイコンボードを接続する
4-1-1 Android 端末について
4-1-2 パーミッションを設定する
4-2 microSD カードにファイルを保存する
4-2-1 外部ストレージ(microSD)の利用方法
4-2-2 パーミッションを設定する
4-2-3 外部ストレージを使うために必要なこと
4-2-4 サンプルコードで確認する
4-3 カメラを利用する
4-3-1 Android でカメラを使う方法
4-3-2 概要、特徴、注意点、パーミッション、API パッケージ
4-3-3 カメラを使うために必要なこと
4-4 Android のセンサーを利用する
4-4-1 Android のセンサーについて
4-4-2 使い方と取得値の意味を知る
4-4-3 照度センサーの利用方法
4-5 音声を再生する/録音する
4-5-1 インターフェースとして注目される「音声」
4-5-2 MediaPlayer で音声を再生する
4-5-3 音声を再生する
4-5-4 MediaRecorder で録音する
4-5-5 録音処理を実装する
4-6 位置情報を取得する
4-6-1 GPS を利用した位置情報の取得について
4-6-2 位置情報を受け取る
4-6-3 取得条件を指定する
4-6-4 位置情報の通知と取得
第5章 Arduino IDE でArduino マイコンボードを制御する
5-1 本章で使用するArduino マイコンボード
5-1-1 Arduino マイコンボードと接続するデバイス
5-2 LED を接続して点灯させる
5-2-1 LED を接続する
5-2-2 Arduino 用の最も基本的なコードを作成する
5-2-3 汎用I/O の出力値設定を変更し、LED を点灯させる
5-2-4 Arduino IDE でコンパイルする
5-2-5 コンパイル中のログを確認する
5-2-6 Arduino マイコンボードを書き換える
5-3 LED を点滅させる
5-3-1 スケッチを作成する
5-4 押しボタンスイッチを接続してスイッチのON/OFF で動作を変化させる
5-4-1 本節で作成する機器
5-4-2 Arduino マイコンボードにスイッチを接続する
5-4-3 スケッチを作成する
5-4-4 ハードウェアを組み立てる
5-4-5 動作を確認する
5-5 Arduino マイコンボードのアナログ入力を使用する
5-5-1 作成する機器
5-5-2 Arduino マイコンボードでアナログ電圧を検出する
5-5-3 スケッチの作成
5-5-4 動作を確認する
5-6 PWM 出力を使用する
5-6-1 本節で作成する機器
5-6-2 Arduino マイコンボードからPWM 出力を行う
5-6-3 スケッチを作成する
5-6-4 動作を確認する
5-7 ドットマトリクスモジュールを制御する
5-7-1 LED を使用した表示機器の例
5-7-2 LED 以外を使用したドットマトリクス表示器の例
5-7-3 ドットマトリクスLED モジュールの制御の例
5-7-4 Arduino マイコンボードとLED ユニットを接続する
5-7-5 LED ユニットの制御
5-7-6 スケッチを作成する
5-7-7 動作を確認する
5-8 USB 経由でPC とシリアル通信を行う
5-8-1 Arduino マイコンボードとPC 間で行うUSB 通信
5-8-2 UART からデータ送信するスケッチを作成してPC で受信する
5-8-3 Arduino マイコンボードから出力されたデータをPC で確認する
5-8-4 PC から送信したデータをArduino で受信する
第6章 Android 端末でリモコンカーを操作する
6-1 リモコンカーの概要
6-1-1 リモコンカーについて
6-1-2 ADK 互換機の通信方法
6-1-3 通信プロトコルを定義する
6-2 リモコンカーを作る
6-2-1 リモコンカーに必要なパーツ
6-2-2 モーターを使用する際の注意点
6-2-3 モーターを制御する
6-2-4 Ardumoto の仕様を確認する
6-2-5 リモコンカーを走らせる
6-3 リモコンカーを操作するAndroid リモコンを作る
6-3-1 リモコンアプリの概要
6-3-2 データの送受信を行う
第7章 赤外線リモコンで家電製品を制御する
7-1 家電製品で使用されるリモコンの種類
7-1-1 家電製品のリモコンのタイプ
7-1-2 赤外線を利用するタイプ
7-1-3 電波を利用するタイプ
7-1-4 学習リモコンのタイプ
7-2 赤外線学習リモコンの送受信に用いる部品
7-2-1 赤外線発光部と赤外線受光部
7-2-2 市販の学習リモコンの例
7-3 赤外線の発光パターンを確認する
7-3-1 赤外線リモコンのコマンド内のフォーマット
7-4 Arduino で赤外線学習リモコンを制作する
7-4-1 赤外線学習リモコンに必要なもの
7-4-2 具体的な配線例
7-5 Arduino で赤外線学習リモコンをプログラムする
7-5-1 赤外線学習リモコンの概要
7-5-2 赤外線学習リモコンの発光パターンの受信
7-5-3 赤外線学習リモコンの送信処理を作成する
7-5-4 Arduino 単体で動作する赤外線学習リモコンに仕上げる
7-5-5 動作を確認する
7-6 ADK に対応した赤外線学習リモコンを作成する
7-6-1 構成を考える
7-6-2 Android 端末とArduino 赤外線学習リモコン間で行う通信処理を作成する
7-6-3 Arduino 側のスケッチを作成する
7-6-4 Android アプリを作成する
7-6-5 動作を確認する
7-6-6 応用方法について
第8章 Android 対応の電子オルゴールを作る
8-1 Android と接続できるArduino 電子オルゴールを作成する
8-1-1 Arduino 電子オルゴールの概要
8-2 Arduino でビープ音を生成する
8-2-1 音階と周波数
8-2-2 Arduino マイコンボードにスピーカーを接続する
8-2-3 スケッチを作成して音階を鳴らす
8-3 MML(Music Macro Language)を使用して楽譜データを演奏する
8-3-1 MML とは
8-3-2 MML の文法
8-3-3 Arduino マイコンボードでMML データを演奏する電子オルゴールを作る
8-3-4 Arduino 電子オルゴールで音楽に同期したイルミネーションを実現する
8-4 Android 対応の電子オルゴールにする
8-4-1 Android とArduino 電子オルゴールの間の通信を定義する
8-4-2 Arduino 側のスケッチを作成する
8-4-3 Android アプリを作成する
8-4-4 動作を確認する
8-4-5 応用編
8-5 Arduino 電子オルゴールをMIDI に対応させてシンセサイザーなどを制御する
8-5-1 MIDI とは
8-5-2 MIDI の通信技術とArduino MIDI シールド
8-5-3 MIDI シールドから音を出す
8-5-4 ノートオンのパラメータ
8-5-5 Arduino Mega ADK とMIDI シールドを接続する
8-5-6 Arduino 電子オルゴールをMIDI 対応にする
8-5-7 動作を確認する
第9章 Arduino でセンサー情報を収集してAndroid と無線接続する
9-1 ZigBee 通信について
9-1-1 ZigBee 通信とは
9-2 植物の状態をモニターする無線センサーロガーを作る
9-2-1 必要な機器について
9-2-2 水分センサーについて
9-2-3 温度/湿度センサーと光センサーについて
9-2-4 Arduino に無線/ロギング機能を追加するワイヤレスSD シールド
9-3 準備するハードウェアのリスト
9-3-1 開発に必要なハードウェア
9-4 SD データロガーを作る
9-4-1 ハードウェアを確認する
9-4-2 スケッチを記述する
9-5 無線モジュール「XBee」を使用する
9-5-1 XBee を確認する
9-5-2 X-CTU でXBee を設定する
9-5-3 X-CTU をダウンロードする
9-5-4 XBee の3 つの役割
9-5-5 XBee の1 対1 無線通信の設定をする
9-6 Android 端末とXBee エクスプローラUSB を接続する
9-6-1 USB Host API について
9-7 センサーを利用する
9-7-1 センサーを拡張する
9-7-2 水分センサー/光センサーからアナログ値を読み出す
9-7-3 外部ライブラリを使い、温度/湿度センサーの値を読み取る
9-7-4 RTC モジュールから時刻を読み出す
9-8 Arduino スケッチを統合する
9-8-1 ハードウェアを接続する
9-8-2 Arduino のスケッチをまとめる
第10章 USB Host API を利用してKinect を制御する
10-1 USB の基礎知識
10-1-1 物理デバイスと論理デバイス
10-1-2 データ転送方式について
10-1-3 デバイスデスクリプタ情報について
10-1-4 Android USB Host API について
10-1-5 パーミッションについて
10-2 Kinect でLED を点滅させるプログラムを作る
10-2-1 LED の色を変更する
10-2-2 AndroidManifest.xml を設定する
10-2-3 device_filter.xml を作成する
10-2-4 アプリケーションを起動する
第11章 MicroBridge を使用してAndroid 端末と連携する
11-1 MicroBridge を使用したAndroid 端末との通信
11-1-1 ADK とMicroBridge
11-1-2 MicroBridge が使用する通信「Android Debug Bridge(ADB)」
11-1-3 Android 端末でMicroBridge を利用する設定
11-2 MicroBridge のライブラリのダウンロードとインストール
11-2-1 MicroBridge のダウンロードとインストール
11-2-2 MicroBridge を一部変更する
11-3 MicroBridge の動作を確認する
11-3-1 MicroBridge を使用したlogcat 取得の流れ
11-3-2 スケッチを作成する
11-3-3 動作を確認する
11-4 Arduino マイコンボードからAndroid 端末にキーイベントを送り込んで端末を制御する
11-4-1 本節で行うAndroid 端末とArduino マイコンボードの接続方法
11-4-2 adb shell コマンド
11-4-3 adb shell コマンドからキーイベントを発行する
11-4-4 Arduino に接続したスイッチからAndroid を制御する
11-4-5 ハードウェアの制作
11-4-6 スケッチを作成する
11-4-7 動作を確認する
11-5 Android アプリと外部機器の間で自在にデータ通信をする
11-5-1 adb forward コマンド
11-5-2 Android アプリからArduino Mega ADK 上のLED を制御する
11-6 MicroBridge を使用してアームロボットを作る
11-6-1 アームロボットの仕様について
11-6-2 サーボモーターについて
11-6-3 Arduino からサーボモーターを制御する
11-6-4 Arduino のライブラリを使用して、Arduino マイコンボードからサーボモーターを制御する
11-6-5 サーボモーターを組合わせて、アームロボットのハードウェアを作成する
11-6-6 Arduino Mega ADK とアームロボットを接続する
11-6-7 Arduino でアームロボット制御用のスケッチを作成する
11-6-8 アームロボット制御用Android アプリを作成する
11-6-9 アームロボットの動作を確認する
11-7 MicroBridge を使用してAndroid アプリを自動起動させる
11-7-1 ADKのアプリ自動起動をMicroBridgeでも実現する
11-7-2 Android でアクティビティを呼び出す
11-7-3 Android アプリを自動起動するスイッチを作成する
第12章 組込みAndroid ADK 機器の開発に役立つツールや知識
12-1 組込み機器開発の御用達ショップ
12-1-1 株式会社スイッチサイエンス
12-1-2 株式会社秋月電子通商
12-2 テスターの使い方
12-2-1 テスターとその使用方法
12-2-2 電圧の測定
12-2-3 電流の測定
12-2-4 抵抗値の測定
12-3 電子工作に使える便利なAndroid アプリ
12-3-1 ElectroDroid
12-3-2 Arduino Companion
12-3-3 PICmicro Database
12-4 オームの法則とLED 点灯回路
12-4-1 オームの法則
12-4-2 抵抗器で消費される電力を計算する
12-4-3 抵抗器と電圧計で回路に流れる電流を測定する
12-4-4 LED の電流制限抵抗を選択する
12-5 ロジックアナライザを利用した開発
12-5-1 簡易ロジックアナライズ機能付きデジタルオシロスコープ
12-5-2 個人でも利用可能な安価なロジックアナライザ
12-6 ロジック電圧とレベルシフタ
12-6-1 Arduino Mega ADK のロジック電圧
12-6-2 XBee のロジック電圧
12-6-3 電圧の異なるロジック間の接続
12-7 USB コネクタの種類
12-7-1 標準A コネクタ
12-7-2 標準B コネクタ
12-7-3 Mini-B コネクタ
12-7-4 Micro-USB コネクタ
12-7-5 その他のコネクタ
12-8 XBee シリーズ1 とシリーズ2 の違い
12-8-1 通常版とPRO 版
12-8-2 設定方法について
第13章 組込み開発TIPS集
13-1 ADK for 2012 とAOA 2.0
13-1-1 ADK 2012
13-1-2 ADK 2012 の機能
13-1-3 Android Open Accessory Protocol 2.0 について
13-1-4 AOA 2.0 について
13-1-5 ADK 2012 のアプリについて
13-2 USB Host シールドを使用したADK
13-2-1 Arduino Mega ADK について
13-2-2 開発に準備するもの
13-2-3 USB Host シールド用Arduino ライブラリを準備する
13-2-4 動作を確認する
13-3 リアルタイムクロック(RTC)を使う
13-3-1 リアルタイムクロックを使ったサンプルの構成
13-3-2 スケッチを作成する
13-4 Arduino Mega ADK を動かしながらSPI デバイスを使う
13-4-1 ADK の動作と共存可能なSPI デバイス
13-4-2 SPI 接続のDAC(Digital - Analog Converter)をArduino から制御する
13-5 Arduino MEGA / Arduino MEGA ADK でUART1、2、3 を使う
13-5-1 PC とXBee の間でシリアルモニタ通信ができるサンプルの構成
13-5-2 スケッチを作成する
13-5-3 動作を確認する
13-6 GPIO Expander IC を使ってI/O ポートを増やす
13-6-1 GPIO Expander IC を使った回路
13-6-2 スケッチを作成する
13-7 有線で長距離通信を行う
13-7-1 2 台のArduino を通信させる
13-7-2 スケッチを作成する
13-8 Arduino で一定周期の決まった処理を行う
13-8-1 millis 関数を使った処理
13-9 ソフトウェアシリアル通信ライブラリを使用する
13-9-1 SoftwareSerial を利用する
13-10 ADK リモコンカーの動作を安定させる
13-10-1 モーターのノイズ対策を行う
13-10-2 電源供給を安定化させる
13-11 ADK リモコンカーをワイヤレス化する
13-11-1 ADK リモコンカーを無線化する構成
13-11-2 スケッチを作成する
13-12 Arduino でXBee を安定して使う方法
13-12-1 電源供給を安定化させる
13-12-2 XBee のリセット回路を追加する
13-13 Arduino ワイヤレスプロトシールドとArduino ワイヤレスSD シールドを活用する
13-13-1 Arduino とXBee を接続する
13-13-2 X-CTU を利用したXBee のファームウェアのアップデートや設定の変更方法
13-14 USB ホストシールドの初期化に失敗した時の対処方法
13-14-1 Arduino 端末と通信できない時
13-15 Arduino におけるポートレジスタを使ったI/O 操作
13-15-1 Arduino におけるI/O 操作とAVR マイコンとの関係
13-15-2 直接レジスタを利用して接続する方法
13-15-3 PINx レジスタから対応するビットを読み出す