Android 6.0 Marshmallow の USB 接続


Android 6.0 Marshmallow から USB 接続の仕様が変わりました。
USB を差しただけだと、Android File Transfer が繋がらないので、ご注意ください。

Android 6.0 の変更点として、下記の事項が掲載されています。
デフォルトでは充電モードなので、コンテンツにアクセスするときは、許可を与えてね。とありますが。
これだけだと具体的な操作が分からないですね。

USB Connection
Device connections through the USB port are now set to charge-only mode by default. To access the device and its content over a USB connection, users must explicitly grant permission for such interactions. If your app supports user interactions with the device over a USB port, take into consideration that the interaction must be explicitly enabled.

USBを接続すると、ステータスバーにアイコンが表示されます。
ステータスバーを下にドラッグすると、通知が表示されます。
「USBを充電に使用」にタッチすると、「USBの使用」が表示されます。
「ファイルの転送」を選択します。
20151018_android6_usb_top20151018_android6_usb_notification20151018_android6_usb_select

PC画面の「Can’t access device storage」の「OK」をクリックすると、Android のファイルが表示されるようになります。
20151018_android_file_transfer_cant 20151018_android_file_transfer_list

開発者向けオプションにも、「USB設定の選択」がありますが。
ここは効きません。
20151018_android6_usb_developper


PocketDuino AlcoholMeter


20141201_pocketduino_board_alcohol

PocketDuino と アルコールセンサボード を Android から制御します。
PocketDuino Tutorial を参考にしました。

ソースは Github で公開しています。

機能
アルコールセンサに息を吹きかけます。
測定値をメーターに表示します。
メーターは、自動車のスピード計のような UI にしました。
20141201_pocketduino_screenshot_alcohol

補足
スピード計のような UI は、Canvas#drawArc (円弧) を3つ使っています。
Canvas#clipPath を使うと、もっとシンプルに出来るかも。


PocketDuino LED


20141201_pocketduino_board_led

PocketDuino に内蔵されている LED を Android から制御します。
Physicaloid Library Sample Projects を参考にしました。

ソースは Github で公開しています。

機能
Android の画面のボタンをタッチすると、 PocketDuino の LED が点灯/消灯します。
PocketDuino から LED の状態が送信され、Android に表示します。
20141201_pocketduino_screenshot_led

課題
Android に PocketDuino を差したときに、自動的に動作するようにしたいのですが、そのときに Strart ボタンを押さないと、動作しません。
Physicaloid#open を呼ぶと、UsbManager#requestPermission が発行されますが、そのコールバックを処理していないようです。
コールバックを処理するようにしたいのですが、うまくいきませんでした。


PocketDuino が届いた


20141126_pocketduino

PocketDuino が届きました。
PocketDuino は AndroidのUSBポートに直接差し込むことのできる Arduino 互換ボードです。
クラウドファンディング で募集していたものです。

まずは、MAC に差して、USB 情報を見てみると。
FT231X USB UART と認識されます。

$ system_profiler SPUSBDataType
-----
FT231X USB UART:
  Product ID: 0x6015
  Vendor ID: 0x0403  (Future Technology Devices International Limited)
  Version: 10.00
  Serial Number: DA00S2SL
  Speed: Up to 12 Mb/sec
  Manufacturer: FTDI
  Location ID: 0x14200000 / 13
  Current Available (mA): 500
  Current Required (mA): 90
$ ls /dev/tty.*
-----
tty.usbserial-DA00S2SL

Blink を試す
マイコンボードを 「Arduino Pro or Pro Mini (5V, 16MHz) w/ ATmega328」に、
シリアルポートを「/dev/tty.usbserial-DA00S2SL」に設定して、マイコンに書き込む。
時間間隔を0.5秒、1秒、2秒などの変えて試す。
無事、動きました。


MACのUSBシリアルのデバイス名


MACにUSBシリアルを繋いだときのデバイス名について

USBデバイスの一覧

$ system_profiler SPUSBDataType

USBシリアルのデバイス名の一覧

$ ls /dev/tty.*

USBシリアルのデバイス名の命名規則

(1) USB CDC
/dev/tty.usbmodem + xx + 1
xx は Location ID から
0x04100000 なら 41 (0x0 で始まる場合)
0xfa260000 なら 26 (それ以外)

(2) FTDI
/dev/tty.usbserial + xxx;

(3) Prolific
/dev/tty.PLxx

参考
can’t open any serial ports on Mac OSX
OSXで認識できないandroid端末を認識させる方法


Android から Arduino を制御する


20140801_usb_serial_arduino

Android と Arduino を USB ケーブルで接続して、
Android から Arduino を制御します。

機能
(1) デジタル出力
Android のボタンを押すと、Arduino の LED が点灯します。
20140801_android_arduino_led

(2) PWM出力
Android のスライドバーを移動すると、Arduino の LED の明るさが変わります。
20140801_android_arduino_pwm

(3) デジタル入力
Arduino のボタンを押すと、Android で状態を表示します。
20140801_android_arduino_button

(4) アナログ入力
Arduino の可変抵抗を回すと、Android で可変抵抗の値をグラフに表示します。
20140801_android_arduino_potentiometer

ソースコード
Android は、USB シリアル (Arduino) をベースにしました。
Arduino は、標準ライブラリの Serial を使用しました。

github で公開しています。
Android_UsbSerialArduino1
Arduino_SerialControl1


Arduino + Graph on Processing ( USB Serial )


20140801_arduino_serial_analog

Arduino のアナログ入力の値を、Processing でグラフ表示します
Arduino と Processing との接続には、 USB Serial を使用します。

Arduino 側の設定
開く -> Basics -> AnalogReadSerial を選択する。
Arduino に書き込む。

Processing 側の設定
github からダウンロードします
Skeckbook location に配置します
Open -> arduino_serial_analog を選択する。

動作確認
Arduino のアナログ1番ピンに可変抵抗をつける。
Processing を Run すると、上記の画面が表示される。
可変抵抗を回すと、グラフが変化する。
20140801_arduino_potentiometer


Arduino + Graph on Processing ( Firmata )


20140801_arduino_firmata_analog

Arduino のアナログ入力の値を、Processing でグラフ表示します
Arduino と Processing との接続には、 Firmata を使用します。

Arduino 側の設定
Arduino + Firmata と同じです。

Processing 側の設定
github からダウンロードします
Skeckbook location に配置します
Open -> arduino_firmata_analog を選択する。

動作確認
Arduino のアナログ1番ピンに可変抵抗をつける。
Processing を Run すると、上記の画面が表示される。
可変抵抗を回すと、グラフが変化する。
20140801_arduino_potentiometer


Chrome App から RAPIRO を動かす


YouTube Preview Image

PC から RAPIRO を動かすには、PC と RAPIRO をUSBケーブルで接続します。
次に、Arduino のシリアルモニタを起動して、コマンドを入力します。
これは、簡単な仕組みでいいのですが。
毎回コマンドを入力するのは面倒です。

Chrome App から制御できるようにしてみました。
ボタンで前進したり、
スライドバーでサーボを動かすことができます。

アプリは Chrome Store からダウンロードできます。

20140428rapiroI_chrome

Chrome App のインストール
(1) Chrome ブラウザ をインストールする。
(2) アプリを Chrome Store からダウンロードする。

アプリの操作
(1) シリアルポートとボーレートを選択する
(2) Open ボタンを押す
表示が Not Connect から Connected に変わる
(3) 矢印ボタンを押すと、RAPIRO が前進します。
(4) Pose ボタンを押すと、ポーズ画面になります。
(5) スライドバーをスライドすると、RAPIRO のサーボが動きます。

20140428rapiro_move20140428rapiro_pose

注意
サーボが壊れやすいです。
初めて動かすときは、スライダーを使わずに、
プラスボタンやマイナスボタンで少しづつ動かしてください。
特に、左右の Hand の稼働域が、70度から110度と狭いので、慎重に。

開発者向け
ソースは github で公開しています。

関連
Android から RAPIRO を動かす
Chrome App から RAPIRO を動かす


Chrome Apps – Serial


20140327chrome_serial_arduino

Chrome Apps から USB シリアルを操作する
ソースは github で公開しています。

機能
serial / ledtoggle をベースに下記の機能を追加した。
(1) シリアルポートの選択
(2) ボーレートの選択
(3) テキストの送信

準備
(1) Arduino の13番ピンにLEDをつける。
(2) Arduino と MAC を USBケーブルで接続する
(3) サンプルスケッチ を書き込む。

アプリの操作
(1) シリアルポートとボーレートを選択する
(2) Open ボタンを押す
表示が Not Connect から Connected に変わる
(4) LED Test ボタンを押す
Arduino の LED が点灯する
(5) テキストを入力して Submit ボタンを押す
Arduino に送信され、Arduino からエコーバックされた文字列が表示される。

20140327chrome_serial_app