
したがって、Arduino Mega 2560、 USB Host Shield 、およびシアン 7.0.1 RC1ファームウェア(Android 2.3.4)を搭載したHTC Desireがあります。 念のため、後で説明するすべての機能は、携帯電話用のAndroid 2.3.4およびタブレット用のAndroid 3.1以降でのみ機能することをお知らせします。
このUSBホストシールドは、特にArduino Mega 2560との組み合わせでは完全に成功するわけではないことに注意してください。最初の問題は、この拡張ボードがArduino UNO向けに作られていることです。写真)。 2番目の問題は、かなり予想されていましたが、この拡張カードが機能するための外部電源の必要性でした。 Circuits @ HomeのUSB Host Shield 2.0はより成功していると考えられますが、高価です。

スローされたSPIコンタクトを持つボード
Arduinoソフトウェアのセットアップ
1.まだインストールされていない場合は、Arduinoのソフトウェアをダウンロードしてインストールします 。
2. ADKパッケージ (DemoKitアプリケーションを含む)をダウンロードして解凍します。
app
、
firmware
、および
hardware
フォルダーが表示されます。
3. CapSenseライブラリをダウンロードします
4.
firmware/arduino_libs/AndroidAccessory
と
firmware/arduino_libs/USB_Host_Shield
を
<arduino_installation_root>/libraries/
コピーし
firmware/arduino_libs/AndroidAccessory
。
5.
<arduino_installation_root>/libraries/
CapSenseディレクトリを作成し、CapSenseアーカイブから
CapSense.cpp
および
CapSense.h
そこにコピーします。
ファームウェアのダウンロード
GoogleはArduino用のDemoKitスケッチを親切に提供しています。 必要なのは、
firmware/demokit/demokit.pde
からそれを開き、コンパイルしてボードに
firmware/demokit/demokit.pde
です。
Androidテストアプリケーション
DemoKitパッケージには、機能を示すAndroidアプリケーションのソースコードも含まれています。 Googleは、Androidプロジェクトを独自に作成し、このアプリケーションを構築することを提案しています。 最初に、 APIレベル10をインストールする必要があります 。 その後、すべてが簡単です-Androidプロジェクトを作成し、
app
フォルダーへのパスを指定し、ビルドターゲットでGoogle API(Platform 2.3.3 、APIレベル10)を指定します。 アプリケーションを収集し、電話にインストールします。 アセンブリを台無しにしたくない人- 完成したAPKをダウンロードできます 。
打ち上げ
電話機をUSBホストシールドに接続するだけです。 すべてを正しく行った場合、画面からDemoKitアプリケーションを起動するように求められます。

アプリケーション自体には、In(ボタン、ジョイスティック、センサー)とOut(LED、リレー、サーボ)の2つのタブがあります。


私は、LEDのペアとボタンでデモを行うのに十分であると判断しました。 この奇跡がどのように機能するかは、ビデオで確認できます。
いくつかのコード
この例では、USBを介して送信されるメッセージは3バイトで構成されます。
最初のバイトは、コマンドまたはデバイスのグループ、たとえばLEDを定義します-0x2
2番目のバイトは特定のデバイスを示します。たとえば、緑色のLED-0x1
3番目のバイトには、デバイスに送信される値が含まれます。たとえば、最大輝度は0xffです
Arduino
... /* */ AndroidAccessory acc("Google, Inc.", "DemoKit", "DemoKit Arduino Board", "1.0", "http://www.android.com", "0000000012345678"); void setup() { .... acc.powerOn(); } void loop() { byte msg[3]; /* */ if (acc.isConnected()) { /* Android */ int len = acc.read(msg, sizeof(msg), 1); if (len > 0) { /* */ if (msg[0] == 0x2) { if (msg[1] == 0x0) analogWrite(LED3_RED, msg[2]); else if (msg[1] == 0x1) analogWrite(LED3_GREEN, msg[2]); else if (msg[1] == 0x2) analogWrite(LED3_BLUE, msg[2]); } } msg[0] = 0x1; b = digitalRead(BUTTON1); if (b != b1) { msg[1] = 0; msg[2] = b ? 1 : 0; /* */ acc.write(msg, 3); b1 = b; } } }
Android
import com.android.future.usb.UsbAccessory; import com.android.future.usb.UsbManager; ... public class DemoKitActivity extends Activity implements Runnable { private UsbManager mUsbManager; UsbAccessory mAccessory; FileInputStream mInputStream; FileOutputStream mOutputStream; ... private void openAccessory(UsbAccessory accessory) { mFileDescriptor = mUsbManager.openAccessory(accessory); if (mFileDescriptor != null) { mAccessory = accessory; FileDescriptor fd = mFileDescriptor.getFileDescriptor(); mInputStream = new FileInputStream(fd); mOutputStream = new FileOutputStream(fd); Thread thread = new Thread(null, this, "AccessoryThread"); thread.start(); } } public void run() { int ret = 0; byte[] buffer = new byte[16384]; int i; while (ret >= 0) { // ret = mInputStream.read(buffer); i = 0; while (i < ret) { int len = ret - i; switch (buffer[i]) { case 0x1: // if (len >= 3) { Message m = Message.obtain(mHandler, MESSAGE_SWITCH); m.obj = new SwitchMsg(buffer[i + 1], buffer[i + 2]); mHandler.sendMessage(m); } i += 3; break; } } } } // - : // mActivity.sendCommand((byte)2, (byte)0, (byte)255) public void sendCommand(byte command, byte target, int value) { byte[] buffer = new byte[3]; if (value > 255) value = 255; buffer[0] = command; buffer[1] = target; buffer[2] = (byte) value; if (mOutputStream != null && buffer[1] != -1) { try { mOutputStream.write(buffer); } catch (IOException e) { ... } } } }
結論
このような機会を発見したGoogleは、当然、最初から多数のアクティブなAndroidアクセサリが登場することを期待していますが、実際には、さまざまなセンサー、センサー、およびドライブと対話するための便利なデバイスを実際に入手できるという事実にとらわれません。 このようなデバイスは、ロボットのようなものの脳になりやすい。
また、ArduinoのAndroidデバイスは、GPS、Bluetooth、WiFi、加速度計などを備えた拡張カードとして機能することを忘れないでください。
参照資料
1. Android USBアクセサリー
2. Android Open Accessory開発キット