やはりお前らのandroidのbleが不安定だという認識は間違っている

14
やはりお前らの Android BLE が不安定だという認識は間違っ ている #potatotips #6 2014/04/09 @youten_redo (ようてん)

Upload: youten-

Post on 22-May-2015

6.186 views

Category:

Software


0 download

DESCRIPTION

AndroidのBLEの安定性について、Android4.4.2が4機種手元にあったので、「つなぐ→読む→書く→切る」×100みたいなコードで試してみたところ、顕著な機種差分はなかったよ、というお話。

TRANSCRIPT

Page 1: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

やはりお前らのAndroidのBLEが不安定だという認識は間違っている#potatotips #6 2014/04/09 @youten_redo(ようてん)

Page 2: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

Bluetooth Low Energyhttp://www.bluetooth.com/Pages/Bluetooth-Brand.aspx

Page 3: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

BLEはあんまりよく知らないという人への補足説明旧来のBluetoothとは結構違うけど、iOS(OS X)とAndroidでどっちでも使える楽しいやつだよ

WiFi・Cellular経由でのHTTP(IP)通信以外で、MFi不要でiOS(OS X)-Android間通信ができるよ

2年先輩のiOSと比べると遅れてるし、かなり新しいAndroidじゃないと標準対応していないけど、外部デバイスとの連携等、いろいろ魅力的でオススメだよ

Page 4: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

Android BLE unstable?

Page 5: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

4.3 cause unstable?

Page 6: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

Device List

Device Nexus 4 Nexus 5 HTC One GPE

Nexus 7 2013

Android version. 4.4.2 4.4.2 4.4.2 4.4.2

Image

Page 7: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

Target: iOS 7.1 Peripheral

P

C

https://github.com/youten/ImmPeri

https://github.com/youten/BLERW/tree/rwbench

Page 8: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

Test Environment

全機WiFiオン、自宅の無線LANルータ(b/g/n, 2.4GHz)に接続状態で試験

木造アパートなので近所のルータ多数

iBeacon含めBLEデバイスは5つほど存在

Page 9: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

BenchmarkDISCONNECTED

CONNECTING

CONNECTED

SERVICE DISCOVERED

READING CHARACTERISTIC

WRITING CHARACTERISTIC

How many seconds 100 laps

Page 10: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

100 laps average and read+write success rate

Device Nexus 4 Nexus 5 HTC One GPE

Nexus 7 2013

Android version. 4.4.2 4.4.2 4.4.2 4.4.2

Image

[no wait] 100 laps avr. success rate

25.36sec. 52.6%

23.93sec. 50.0%

28.02sec. 52.8%

22.37sec. 49.2%

Page 11: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

Add wait before re-connectDISCONNECTED

CONNECTING

CONNECTED

SERVICE DISCOVERED

READING CHARACTERISTIC

WRITING CHARACTERISTIC

How many seconds 100 laps

Add 50ms wait

Page 12: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

ResultDevice Nexus 4 Nexus 5 HTC One

GPENexus 7

2013Android version. 4.4.2 4.4.2 4.4.2 4.4.2

[no wait] 100 laps avr. success rate

25.36sec. 52.6%

23.93sec. 50.0%

28.02sec. 52.8%

22.37sec. 49.2%

[50ms wait] 100 laps avr. success rate

44.07sec. 87.8%

45.44sec. 92.8%

50.152sec. 94.0

43.864sec. 92.4%

Page 13: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

まとめAndroid 4.4.2にしたら致命的な機種差がなくなった

WiFiを同時に使うと不安定(Nexus 7 2013)みたいな話はなくなった模様。

BluetoothGatt#close忘れるな。インスタンス使い切ってスキャン不可になる。

アプリのスワイプキル or Bluetoothのon/offで復帰できるが、不安定だと勘違いしないように。ただのバグです。

対向装置はiOS/OS Xが楽。

Random Device Addressに注意、MACアドレスがランダムで変わる。

StickNFindとか実製品はおそらく省電力目的でセクシーにチューニングされている、また、ファームウェアバージョンも制御できないため、再現性の観点でもあまりオススメしない。

SNF、最新ファーム焼いちゃうとImmediate Alert Service非対応になっちゃったっぽい。

Page 14: やはりお前らのAndroidのBLEが不安定だという認識は間違っている

検証内容に対する追記たかだか100回読み書きするのに数十秒かかってるとか遅いじゃないか、って読み取っちゃうケースがあると思いますが、通常はこんなにCONNECT-DISCONNECTを連続で行わないのでもっと速いです。

アプリケーションとして、接続先を探したりしながら繋いだり切ったりしても妥当な範囲のリトライで、この程度安定して読み書き(≒送受信)ができますよ、という検証です。

BLEとしては向いていない(やるべきでない)ため意地悪試験になってしまうのですが、バイト列送受信のスループットがどの程度まで出るのかはそのうち試してみたいと思います。