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

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

Android 通信制御

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

投稿日:2014年4月30日 更新日:

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

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

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

(※2021年1月10日追記 現時点での最新版のライブラリについては以下で書きました。
AndroidでUSBシリアル通信(2021/01/09版)ライブラリ最新版での動作確認
2021年1月10日追記ここまで)

本題に入ります。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
エレキジャック (連載)シリアル・インターフェース

AdSense

AdSense

-Android, 通信制御
-

執筆者:

関連記事

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

温度管理システム的なものを作ってみるの5回目です。前回はCloud(Microsoft Azure)での処理について書きました。そのCloudの処理の温度データ登録処理に送信するためのAndroidの …

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

温度センサADT7410の2回目です。前回はI2C通信の簡単な概要とADT7410モジュールをRaspbery Piに接続してアドレスの確認まで行いました。今回はArduinoでADT7410を使って …

Arduino CC3000 WiFi シールドでHTTP POST

Arduino CC3000 WiFi シールドでHTTP POST通信を試してみます。以下はArduino UNOに接続した状態です。 Arduino CC3000 WiFi シールドの概要、導入に …

温度センサADT7410(その1)i2C通信とは

温度センサのADT7410を使ってみます。ADT7410はアナログ・デバイセズ社の製品ですが、実際には以下の秋月さんのモジュールを使います。 ADT7410使用 高精度・高分解能 I2C・16Bit …

AndroidでUSBシリアル通信(2021/01/09版)ライブラリ最新版での動作確認

以下から始まる一連の記事でAndroidでのUSBシリアル通信について書きました。実際に開発案件につながったり、お問い合わせを頂いたりしているテーマです。 AndroidでUSBシリアル通信(その1) …