Android Host – Arduino間シリアル通信の実現

2012-05-07   treby   IDm Snatcher  , , , このエントリーをはてなブックマークに追加

ひとまず動作確認。最近はプライベートで体力的にきついけど頑張る(愚痴)。

実行風景。飲み会の席でもさくっとできる。

Arduino側の準備

Android側のプログラムで使用するライブラリの関係で前提条件として、FTDIのチップを搭載したモデルであることが必要。対応モデルは「Arduino Duemilanove」や「Arduino Mega」など。現在もっとも入手容易な「Arduino UNO」はAtmelのチップなので不可。チップに関しては個人的にこの辺でちょこっと調べたが、合ってる保証はない。

今回はもちろん、Arduino互換なながてぃ~の。を使用した。ちなみにながてぃ~の。はArduino IDEのボードで「Arduino Duemilanove」を選択すればプログラムを書き込める。

Arduinoには以下のスケッチをPCなどから予め書き込んでおく。ご覧のとおり、シリアルポートを通じて受信したデータをそのまま送信するという素朴なechoを実現するスケッチだ。

void setup()  {
  Serial.begin(115200);
}
 
void loop() {
  if (Serial.available())
    Serial.write(Serial.read());
}

転送速度(ボーレートと呼ぶらしい)はAndroid側サンプルプログラムに合わせて115200bpsとしたが、ArduinoとAndroidが同じならば何でも良いと思う。

Android側の準備

前提条件として、AndroidはUSB Host機能がサポートされるOSバージョン3.1以上でなければならない。また物理的にUSBホスト端子がついていなければならない。今回はAcer ICONIA TAB A500(A500)を使用した。

通信を実現するためのライブラリとしては@ksksue氏のFTDriverを使用する。FTDriverはReadmeにsupport FTDI chips (FT232RL, FT232H, FT2232C/D/HL, FT4232HL FT230X, REX-USB60F(FT232BL) checked)とあるようにFTDIのチップに対応しているライブラリである故、使用できるArduinoのモデルに制限が出てくるのだ。

Android SDK、eclipseなどの導入は済んでいるものとする。新しくA500を接続し、プログラムを書き込むには以下の手順が必要となる。詰まった時にはこちらの記事が参考となった。

  1. A500側でUSBデバッグを有効にする(下図参照)。
    USBデバッグの有効化
  2. PCにA500のUSBドライバをインストールする。

あとは先ほどのFTDriverライブラリに含まれるサンプルプログラム、FTSampleTerminalをeclipseにインポートし、A500に書き込めばよい。ここで詰まった時はこちらの記事が参考になった。

通信の確認

A500のUSBホストポートとながてぃ~の。をつないで先ほどのAndroidサンプルプログラムを実行してみよう。

FTSampleTerminalの実行

このサンプルプログラムは、任意の文字列を送信でき、逆に受信したデータを画面上に表示する。丁度Arduino IDEのシリアルモニタみたいなものだ。

適当な文字列を入力

Arduino側のプログラムは送られてきたデータをそのまま送り返すというものなので、ここで適当な文字列を送信してやると、

文字列がエコーされている

このようにA500の画面に表示されることが分かる。

さて次はソースを読むか、RC-S620/Sをいじるか……。