AndroidにArduinoをつないでクラウドLチカに挑戦!



 Android OS搭載のコンピュータが安くなってきました。たとえば、先日我々が導入したレノボの7型タブレット「IdeaPad Tablet A1」は18,000円前後で入手可能です。海外では100ドルを切るスマートフォンが急速に普及しつつあるという話も聞こえてきます。

 そうした新しいAndroidデバイスを電子工作に取り入れることで、リッチなユーザーインターフェイス、安定したネットワーク接続、豊富な計算資源といったマイコンレベルでは実現しにくい要素をお金をかけずに得ることができます。

 Googleによる、夢が膨らむ提案もありました。6月の記事で紹介したndroid Open Accessory Development Kit(以下ADK)によって、Androidデバイスと自作の機器を自由に繋ぐ道筋が示され、我々もぜひその恩恵に預かりたいと研究を続けてきました。まだまだ初歩の域を出ていませんが、今回はその成果発表です。

LenovoのIdeaPad Tablet A1。高性能とは言えませんが、GPSやカメラといった欲しい機能を一通り揃えながら、「実験用に1つ」という感覚でも導入できる価格に抑えられているところが魅力的

 Androidを自作プロジェクトで活用するときのネックになっていたのが、ソフトウェアの開発環境です。Androidのソフトウェア開発キット(以下SDK)をちょっとした試作や実験のために習得するのは、我々にとって荷が重い過程でした。しかし、Processing(プロセッシング)がAndroidプログラミングに対応したことで、その状況がだいぶ変わったのです。

 もともとProcessingは、プログラミングの専門家ではないアートやデザインを学ぶ学生のために設計されていて、手っ取り早く画面に何かを描き動かしたい人にとって便利な道具です。2001年にスタートしたProcessingプロジェクトには多くの開発者が参加しており、ライブラリや事例が豊富に蓄積されています。入門者にとってハードルが低く、深掘りすればかなりいろんなことができる、割の良いツールといえるでしょう。

 2011年5月にリリースされたバージョン1.5から、ProcessingはAndroidのプログラムを出力できるようになりました。メニューを1回クリックするだけで、Androidモードに切り替わります。今のところSDKのインストールも必要ですが、その詳細を学習せずとも、Processingの流儀でAndroidプログラミングができるのは、だいぶラクです。

 現在開発が進められているProcessing2.0ではAndroidに加えてJavaScriptのコードとしてプログラムを出力することもできます。つまり、Processingで作ったプログラムは、Androidでもブラウザの中でも動作するわけです。「1粒で2度おいしい」というキャッチコピーを思い出しますね。

ProcessingはWindows、Mac OS X、Linuxで動作します。写真は、MacBook AirにIdeaPad A1をUSBで接続し、Processingのサンプルプログラムを実行しているところ。Mac側のChromeブラウザの上でも同じコードが走っています

 それでは、今回の作例を説明しましょう。

 AndroidスマートフォンにLEDを取り付け、インターネット越しにコントロールします。もちろん、スマホに直接LEDを繋ぐことはできないので、ADK対応のマイコンボード「Arduino Mega ADK」を経由しました。インターネットにつながるのはスマホですから、プログラムさえ用意すればさまざまなサービスが利用できます。今回は分かりやすさ重視でTwitterを選択しました。Twitterで自分宛のメンション(@username付きのメッセージ)がやってくると、LEDがチカチカする処理を実装しています。名付けて「クラウドLチカ」です。

クラウドLチカの動作状態。スマホはGalaxy Sです。Wi-Fiではなく3Gでネットに接続しています。Galaxy SにUSBケーブルでつながっているのがArduino Mega ADK。このボードには電源が必要なので、eneloopのUSB電源ユニットを使って供給しています。LEDは赤いブレッドボードの上です
Arduino Mega ADK。純正Arduinoボードの1つで、ADKに必要なインターフェイスを搭載しています。スロトベリー・リナックスで7,350円でした
Arduino Mega ADKの底面と外箱。近頃のArduinoはさらにお洒落さが増してますね
ADKに対応するボードはArduino Mega ADK以外にもいろいろあります。写真はgalileo7の「ADK main board」キット。Arduinoとは異なるアーキテクチャのボードも登場しつつあります。ADKは特定のマイコンに依存しません
単体の電子部品はLED(白)と電流制限用の抵抗器(1KΩ)だけです。Arduinoボードの出力ピン(D10)につなぎました

 ここまで、Androidデバイスと自作回路をつなぐ方法として、ADKを取り上げてきたのですが、実を言うと、今回の作例ではADKを使っていません。代わりにAndroid Debug Bridge(ADB)と呼ばれる、別の方法を採用しています。紆余曲折を経てそういう結果となったのですが、それについて少しだけ説明しておきましょう。

 ProcessingとArduinoの便利な開発環境を使って、ラクにAndroidデバイスとArduinoボードをADKで繋ぐのが最初の作戦でした。ProcessingでADKを使うには、Arduinoコミュニティが公開しているライブラリが便利で、これを使うことでとても簡単にクラウドLチカを実現できました。しかし、10月にAndroid 4.0に対応する新バージョンのSDKが公開されるとProcessing用のADKライブラリは互換性を失い、作例が再現できなくなってしまったのです。

 一度は動いたのでそのバージョンで記事にすることもできたのですが、もっと汎用性があって、変化が少ないと思われるADBも試してみることにしました。やはりArduinoコミュニティがADBを使ってAndroid、Processing、Arduinoの組み合わせを活用するためのライブラリを公開しています。

 結果的に、我々にとっては、ADBのほうが現状のADKよりも使いやすいと感じられました。ADBの利点をまとめると次のようになります。

・最新のSDKでも動作するProcessing用のライブラリがある
・古いAndroid OSでも動作する(ADKは2.3.4または3.1以上に限定)
・プログラミングの約束事がADKよりちょっと少ない

 もちろんADKにも利点はあります。周辺機器(今回の場合はArduinoボード)をつなぐと自動的に対応するアプリを起動してくれるので、製品らしい使用感が得られます。一方、ADBは手動で対応アプリを実行する必要があります。ただ、それも、試作段階では便利な場合があって、ケーブルを繋いだままアプリだけを起動/終了してテストを続けることができ、効率が良いのです。

 ハードウェア的にはADKもADBも同じ構成で機能するので、今のところはADBで試作し、将来的にADKの環境がより整った段階で移行するという選択もあるでしょう。

 クラウドLチカの手法を確立してしまえば、Arduino側の回路とソフトウェア次第で、もっと複雑なプロジェクトにも対応できます。ただし、まだデータの流れは一方向だけですね。AndroidからArduinoへの出力だけでなく、逆向きの通信も試しておきましょう。次にArduinoにセンサを接続して、その「読み」をAndroidへ伝える実験を紹介します。

曲げセンサーを使って、スマホに外部センサを接続する実験をしてみましょう。まずビニール線をハンダ付けして、ブレッドボードに繋ぎやすくします
(簡単に取り外せるよう)マスキングテープと輪ゴムを使って人差し指の背に貼り付けます。こうすると、指を曲げる動きを検知することができます
指を曲げてタッチの動作をすると、スマホのタッチパネルに触れる前に画面が反応します。我々はこれをエアタッチ機能と命名しましたが、実際に試してみると想像していたほどには盛り上がりませんでした
回路図です。ハードウェアはとても簡単な構成です
【動画】今回の作例を動画にまとめました。Twitterからのメッセージは3G回線経由で取得しています

 ここからは、「私も実際に作ってみたい」という人に向けて情報をまとめていきます。もっともラクな手法を選んだつもりですが、それでもかなりの量の開発ツールをインストールする必要があり、ちょっと複雑に感じるかもしれません。一歩一歩、新しいツールを試しながら進めてください。

 使用するソフトウェア(開発環境やライブラリ)は次のとおり。

・Android SDK
・Processing 2.0a4
・Arduino 0023
・processing_bundle_ADB (Arduino Labsより)
・arduino_bundle_ADB (Arduino Labsより)
・Twitter4J

 上記の他に、我々が提供するスケッチ(ProcessingやArduinoのプログラムをこう呼びます)を2本使用します。

1. Android SDKのインストール

 AndroidのプログラムはWindowsやMac OS Xの上で開発します。その際、必要となるのがAndroid SDKです。SDKはJavaをベースにしているので、使用環境によってはJava Development Kit(JDK)のインストールから始める必要があります。最新のインストール方法は次のURLにまとめられています。

http://developer.android.com/sdk/

 このページの情報だけでは心細い場合は、「Android SDK インストール」で検索してみましょう。書籍もたくさん出ています。状況は少しずつ変化しますので、なるべく新しい資料を参照してください。

 以下の解説はWindows XP上で installer_r15-windows.exe というスターターパッケージを使用する前提で進めます。Mac OS XでもSDKをインストールした後の手順は同じです。

Android開発者向けのサイトから最新のSDKをダウンロード
Windows用インストーラを実行後、JDKがインストールされていないことが検出されると、このメッセージが表示されます。ここから、java.oracle.comへアクセスして、JDKをダウンロードし、インストールします
SDKのインストールが終わったら、「Android SDK Manager」を使って、必要なパッケージとドライバをインストールします。右下のInstallボタンを2回以上押すことになるかもしれません。現在、Processingは「API 8」を必須のパッケージとしています。また、WindowsではGoogle USB Driverも必要です。チェックすべき項目はこの画面写真を見て確認してください

2. Processingのインストール

 現在、Processingはバージョン2.0への大幅なアップデートの最中で、アルファ版がたびたびリリースされています。今回使用するバージョンはProcessing 2.0a4で、これ以外のバージョンでは動作しない可能性があります。

 次のURLから、自分のOSに合うファイルをダウンロードしてください。

http://code.google.com/p/processing/downloads/list

 Windowsユーザーの場合はprocessing-2.0a4-windows.zipです。

 このファイルを展開すると、processing-2.0a4というフォルダが現れます。このフォルダは、本来HDDのどこに置いてもいいはずなのですが、実際にはパスに日本語が混じっていると実行時にエラーとなります。それが理由でデスクトップには置けませんでした。パスに日本語を含まない位置に配置してください。

 フォルダの置き場所が決まったらprocessing.exeアイコンをダブルクリックして起動してみましょう。

起動したら、まずサンプルスケッチを1つ実行して、動作確認を行ないましょう。[File]メニューの[Examples...]を選ぶと、たくさんのサンプルが表示されます。最初は「Basics」に含まれるものがおすすめです
右側の普段「Standard」と表示されているメニューでターゲットを切り替えます。JavaScriptモードにすると、ProcessingがローカルのWebサーバとなって、ブラウザ上でスケッチを実行できるようになります。Androidモードは、SDKと協調してAndroidデバイスで動くプログラムを出力します

3. Androidデバイス上でProcessingのスケッチを実行

 まずは先ほどと同じサンプルスケッチを実行してみましょう。Processing2.0が対応しているAndroid OSのバージョンは2.1以上です。実行スピードを考慮すると、2.2以上がおすすめです。

 実行の手順は次の通り。

・Androidデバイスの設定を変更し、アプリケーション→開発→USBデバッグを有効に
・USBケーブルでPCと接続(あらかじめそのデバイスに対応するデバイスドライバがインストールされている必要があります)
・ProcessingをAndroidモードに変更
・シフトキーを押しながら実行ボタンを押す(Run on Device)

 動いたでしょうか。初めてうまくいったとき、我々はいたく感動しました。しかし、動かなくて絶望的な気分を味わったこともたびたびあります。

 動かないときはPCを再起動してみましょう。それでも、ダメな場合は、WindowsのデバイスマネージャでUSB接続したAndroidデバイスがちゃんと認識されているか確認しましょう(デバイスのアイコンに「?」がついている場合、正しいデバイスドライバがインストールされていません)。

 経験上、Mac OS Xのほうがトラブルが少ないです。この記事ではあえてWindowsでの手順を説明していますが、もしMac OS Xも使っているのであれば、そちらでも試してみてください。

シフトキーを押しながら左端のボタンをクリックすると、USB接続されているAndroidデバイスでスケッチが実行されます。シフトキーを押さずにクリックするとエミュレータ上で実行されます。エミュレータは画面に現れるまでかなり時間がかかります

4. Processing用クラウドLチカ・スケッチの実行

 次のURLからクラウドLチカのスケッチを入手してください。

http://www.musashinodenpa.com/arduino/lib/ADB_twitter.pde

 このスケッチをProcessingに持っていくのですが、一番簡単なのは、ブラウザで上記のスケッチを表示し(URLにアクセスするだけで表示されるはずです)、Processingで新しいスケッチを開いて(File→New)、そこにコピペする方法です。名前(ADB_twitter)を付けて保存すると、Processingフォルダに新しいフォルダができているでしょう。

※Twitter APIを自分のプログラムから使用するためには https://dev.twitter.com/ で開発者向けのアクセストークンを取得し、プログラム中に記述する必要があります。上記のスケッチでは、その部分が“Your Token”という文字列に置き換えられているので注意してください。

 次に必要なライブラリを準備します。次のURLからArduinoコミュニティが配布しているADB用ライブラリを取得し、zipファイルを展開してください。

http://labs.arduino.cc/uploads/ADK/GettingStarted/processing_bundle_ADB.zip

 中を見ると「lib.pde」というファイルがあるはずです。これを、先ほどのADB_twitter.pdeの上にドラッグ&ドロップしてください。

ADB_twitter.pdeとlib.pdeという2つのファイルが並んでいるのがわかるでしょうか。Processingのウインドウにpdeファイル(スケッチ)をドラッグ&ドロップすると、そのファイルが追加され、タブが並びます

 用意するライブラリは他にもあります。TwitterのAPIを全部自力で処理しようとすると骨が折れるので、便利なライブラリに頼りましょう。

 Twitter4JはYusuke Yamamotoさんにより提供されている、Javaのライブラリです。ProcessingはJavaベースなので、Java用のライブラリが流用できることがあります。Twitter4Jも必要なファイルを抽出することで使えました。

 次のURLから安定バージョンをダウンロードしてください。執筆時には2.2.5にリンクされていたので、それを使いました。

http://twitter4j.org/ja/index.html#download

 展開したフォルダの中のlibフォルダを開くと、twitter4j...jarという名前のファイルが5つあるはずです。これらをまとめて、Processingにドラッグ&ドロップします。すると、ADB_twitterフォルダ内にライブラリを保存するためのcodeフォルダが自動的に作成され、そのなかにjarファイルが5つ格納されます。

 これで、ライブラリの準備は整いました。でも、Run on Deviceを実行する前にやることがもう1つだけあります。

 Processingの[Android]メニューから[Sketch permission...]を開き「INTERNET」の項目にチェックを付けます。これは、作成したAndroidアプリが「インターネットへアクセスしてもいいですよ」という許可の印です。これを忘れると、Twitterのサーバーへ繋ぐことができず、正常に動作しません。

 ようやく全条件が整いました。Run on Deviceしてください。アプリが立ち上がると、左上に「stream ready」と表示されるはずです。しばらく見ているとあなたがフォローしている誰かの名前が表示されます。いつされるかは、あなたのタイムライン(TL)の活発さによります。誰かが発言すれば、その人の名前が表示されるわけです。stream APIを利用しているので、ネットワークが正常ならほぼリアルタイムに反応します。

5. Arduino Mega ADKのプログラミング

 次のURLからArduinoの開発環境(IDE)をダウンロードしてください。最新版はArduino 1.0ですが、今回の作例では1つ前の0023を使ってください。

http://arduino.cc/en/Main/Software

 インストールの方法はProcessingのときと同じで、zipファイルを展開するだけです。作成されたarduino-0023フォルダのなかのarduino.exeをダブルクリックするとIDEが立ち上がりますが、その前にArduino Mega ADKのデバイスドライバの設定が必要です。

 初めてArduino Mega ADKをUSBで接続すると、デバイスドライバのインストールを促すダイアログが表示されるので、対応ドライバのありかとしてarduino-0023\driversを指定してください。Mac OS Xの場合、この作業は不要です。

 この段階でサンプルプログラムを1つ実行して動作チェックをしておきましょう。その方法はブレッドボーダーズの記事を参考にしてください。

実行前に[Tools]→[Board]でターゲットのボードを選択します。Arduino Mega ADKと互換性があるのは「Arduino Mega 2560」です

 Arduino側で動作するクラウドLチカ・スケッチは次のURLにあります。

http://www.musashinodenpa.com/arduino/lib/ADB_L_chika.pde

 先ほどのProcessingのときと同様にコピペして、このスケッチを保存してください。

 Arduino側にもライブラリが必要です。次のURLのzipファイルをダウンロードし、展開してください。

http://labs.arduino.cc/uploads/ADK/GettingStarted/arduino_bundle_ADB.zip

 ArduinoADBというフォルダが現れます。これがADB用のライブラリです。Arduinoフォルダのlibrariesフォルダへコピーしてください。librariesフォルダがない場合は、自分で作ります。libraries内を変更したら、Arduino IDEを再起動する必要があります。

 これで、Arduino Mega ADKにクラウドLチカ・スケッチを書き込む準備は完了です。Uploadボタンを押してみましょう。

6. AndroidデバイスとArduino Mega ADKを接続

 Arduino Mega ADKに電源を供給するのを忘れないようにしてください。7.5〜9V程度のACアダプタやUSBが使えます。

 USBケーブルでAndroidデバイスとArduino Mega ADKをつなぐときは、Arduino側がUSBホストとなります。正常につながると、AndroidデバイスはUSBデバッグモードに入るはずです。そのあと、Android側のアプリ(ADB_twitter.apk)を実行してください。Processingから書き込んだプログラムは他のアプリと一緒に並んでいるはずです。

 「stream ready」と表示されると同時に、青い円が表示されます。それがぷるぷるしているのは、ANALOG 0ピンに何も繋がっていないせいかもしれません。とりあえず、ぷるぷるしていても問題はありません。

 Twitterとの接続が正常で、タイムラインに誰かいれば、発言者の名前が左上に表示されるでしょう。その発言があなたへのメンションの場合、DIGITAL 10ピンに接続されているLEDが点灯します。

 ここまで読み通した人へ「お疲れ様でした」。

 Processingは最小限の労力で大きな成果が得られる効率のいいプログラミング環境ですが、新しいツールを覚えるのはいつだって大変です。プログラミング初心者の人にはオライリー・ジャパンの入門書『Processingをはじめよう』をおすすめします。ちなみに、この本の巻末にあるクイックリファレンスは武蔵野電波のサイトで公開中で、自由に閲覧可能です。次のURLからご利用ください。

http://www.musashinodenpa.com/wiki/