株式会社インデペンデンスシステムズ横浜

システム開発エンジニアの西田五郎が運営しております。Raspberry Pi や Arduino その他新規開発案件のご依頼をお待ちしております。

*

AndroidでUSBシリアル通信(その1)ハードウェア・ソフトウェア構成等

      2014/09/23

Androidスマートフォン、タブレットでUSBシリアル通信を行う方法についてです。AndroidでのUSBシリアル通信の方法は何通りかあると思いますが、今回はAndroidのUSBホスト機能とオープンソースのドライバと通信のライブラリを利用します。

私事でかつ宣伝のようで恐縮ですが、以前のサイトでiOSでのシリアル通信の記事を見て頂いた企業からiOSでの開発依頼を頂きました。その際にAndroid版の依頼も頂いたのでAndroid版の開発も行いました。その際に今回の方法を使いました。

(※2014年8月14日追記 iPhoneでの開発にはRedpark社のケーブルを使いました。旧サイトですが、ここのページから書きました。)

本題に入ります。1回目は、ハードウェア構成、ソフトウェア構成等全体的な内容についてです。

shl23

PC以外に以下のハードウェアを使用します。
Androidスマートフォン(AU SHARP製 SHL23、Android4.2.2)
Android USBホストケーブル
Arduino UNO
Arduino RS232cシールド
USBシリアル変換ケーブル

開発環境、ライブラリは以下です。

Eclipse (Android Developer Tools)
Arduino IDE
USB Serial ドライバ、通信ライブラリ

技術的な要素についてです。より詳細は関連サイトのリンクを参照して下さい。

AndroidのUSBホスト機能
Androidの場合(Android 3.1以降)は、以下の2種類の接続方法があります。

1.USBホストモード
2.USBアクセサリモード(こちらは、Android2.3.4以降でも対応されている)

これらの大きな違いは、Androidとデバイスのどちらが電源を供給して、データ転送を制御しているかです。USBホストモードでは、Android側です。一方、USBアクセサリモードでは、デバイス側です。ここではUSBホストモードを使います。IMG_0852このホストモードですが、一般的なPCとマウス、キーボードや外付けハードディスクの関係と同じように考えればいいと思います。このホストモードをAndroidマシンで利用する際にはUSBホストケーブルが必要になります。(最近のAndroidタブレットにはタブレット本体にUSBホストのコネクタが搭載されている機種もあります。)試しに、私のSHARP製スマホ SHL23にUSBホストケーブルを接続してパソコンのマウスを接続したところ、画面上にマウスカーソルが表示されました。それではデバイスを何でもこのUSBホストに接続すれば利用出来るかというとそうではありません。そのデバイスのデバイスドライバが必要になります。ここでは、AndroidとArduinoを接続するケーブルのドライバが必要になります。

USB Host and Accessory
USB HOST

AndroidのUSBホスト機能

USBシリアル変換(ケーブル)
以上のUSBホスト機能を使って通信を行う訳ですが実際の通信仕様としてはシリアル通信です。このあたりを何とか書いてみます。

まずシリアル通信とはということでは、1本のデータ線に逐次的にデータを送るという意味になるかと思います。これに対応する通信方法としてはパラレル通信という方法があります。

そのシリアル通信ですが、通信機器、制御機器、マイコン関係等で伝統的によく利用されている通信仕様は以下があると思います。
RS-232C
UART

細かいことを書くと長くなりますし私でも理解していないことも多いのでここでは省略します。必要な場合は以下の関連サイト等を参照して下さい。

シリアル通信でセンサー値をPCのモニターに出力しよう!
ソフテックだより 第5号 技術レポート「USBとRS232C・RS422との比較」
「USB-RS232C変換」 と 「純正RS232C」の違い
エレラボドットコムUART その1 基本

ここではケーブル接続について簡単に触れます。serialcableRS-232CのケーブルにはDサブ9ピンとDサブ25ピンがあります。最近でも見るのはDサブ9ピンの方です。私が開発の仕事を始めた当時のパソコンにはこのコネクタがパソコン本体に搭載されていた記憶があります。Dサブ25ピンもよく見かけたと思います。主にモデムを接続していたと記憶しています。一方のUARTですが、接続が少なくて済むのでコネクタは使わずに直接配線することがほとんどだと思います。UARTはRS-232Cのコネクタに変換して接続することも出来ます。パソコン側ではCOMポートとして認識されます。

ここでなぜケーブルについて書いたかといいますと今のパソコン、タブレット、スマートフォン(ホスト側)にはRS-232Cのコネクタはないので(タブレット、スマートフォンにはないのが当然だと思いますが。)最終的にはUSBに変換して通信を行います。但しホスト側では従来と同様に(仮想)COMポートとして認識されシリアル通信を行います。(※USB自体もシリアル通信の一種と言えますがどう考えても仕様が複雑です。)

ここで必要となってくるのが、USBシリアル変換ケーブルです。このUSBシリアル変換ケーブルで通信を行うにはそのケーブルのデバイスドライバが必要となります。今回はオープンソースのライブラリで何種類か用意されているのでそれを利用します。詳細は次回以降に書きます。

今回はここまでです。次回は、Androidの通信相手となるArduinoのスケッチの動作確認を行ってみます。

※補足
一般に普及しているシリアル通信の仕様は以下のようなものもあります。
I2C
SPI
エレキジャック (連載)シリアル・インターフェース




 - Android, 通信制御

AdSense

AdSense

  関連記事

温度管理システム的なものを作ってみる(その5)AndroidからCloudへの送信

温度管理システム的なものを作ってみるの5回目です。前回はCloud(Micros …

無線マイコン ToCoStick(トコスティック)を使ってみた

無線マイコンの ToCoStick(トコスティック)を使ってみました。 前回のT …

SHARP製スマホSHL23でBLE通信を試してみた

SHARP製のスマホSHL23でBLE(Bluetooth Low Energy …

AndroidでUSBシリアル通信(その4)ライブラリサンプルの内容

AndroidでUSBシリアル通信の4回目です。今回は、前回動作確認をしたライブ …

Arduino Ethernetシールド(旧製品)を使ってみた

Arduino Ethernetシールド(旧製品)を使ってみました。Arduin …

温度センサADT7410(その2)Arduinoでの利用

温度センサADT7410の2回目です。前回はI2C通信の簡単な概要とADT741 …

温度管理システム的なものを作ってみる(その3)Androidでの温度取得

「温度管理システム的なものを作ってみる」の3回目です。前回はArduinoで温度 …

Arduino CC3000 WiFi シールドでHTTP POST

Arduino CC3000 WiFi シールドでHTTP POST通信を試して …

無線マイコンTWE-Lite DIPを使ってみた

無線マイコンのTWE-Lite DIPを使ってみました。製品の詳細はメーカのペー …

AndroidでUSBシリアル通信(その3)ライブラリサンプルの通信確認

AndroidでUSBシリアル通信の3回目です。前回は以下のライブラリのArdu …