やはりお前らのandroidのbleが不安定だという認識は間違っている
DESCRIPTION
AndroidのBLEの安定性について、Android4.4.2が4機種手元にあったので、「つなぐ→読む→書く→切る」×100みたいなコードで試してみたところ、顕著な機種差分はなかったよ、というお話。TRANSCRIPT
やはりお前らのAndroidのBLEが不安定だという認識は間違っている#potatotips #6 2014/04/09 @youten_redo(ようてん)
Bluetooth Low Energyhttp://www.bluetooth.com/Pages/Bluetooth-Brand.aspx
BLEはあんまりよく知らないという人への補足説明旧来のBluetoothとは結構違うけど、iOS(OS X)とAndroidでどっちでも使える楽しいやつだよ
WiFi・Cellular経由でのHTTP(IP)通信以外で、MFi不要でiOS(OS X)-Android間通信ができるよ
2年先輩のiOSと比べると遅れてるし、かなり新しいAndroidじゃないと標準対応していないけど、外部デバイスとの連携等、いろいろ魅力的でオススメだよ
Android BLE unstable?
4.3 cause unstable?
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
Target: iOS 7.1 Peripheral
P
C
https://github.com/youten/ImmPeri
https://github.com/youten/BLERW/tree/rwbench
Test Environment
全機WiFiオン、自宅の無線LANルータ(b/g/n, 2.4GHz)に接続状態で試験
木造アパートなので近所のルータ多数
iBeacon含めBLEデバイスは5つほど存在
BenchmarkDISCONNECTED
CONNECTING
CONNECTED
SERVICE DISCOVERED
READING CHARACTERISTIC
WRITING CHARACTERISTIC
How many seconds 100 laps
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%
Add wait before re-connectDISCONNECTED
CONNECTING
CONNECTED
SERVICE DISCOVERED
READING CHARACTERISTIC
WRITING CHARACTERISTIC
How many seconds 100 laps
Add 50ms wait
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%
まとめ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非対応になっちゃったっぽい。
検証内容に対する追記たかだか100回読み書きするのに数十秒かかってるとか遅いじゃないか、って読み取っちゃうケースがあると思いますが、通常はこんなにCONNECT-DISCONNECTを連続で行わないのでもっと速いです。
アプリケーションとして、接続先を探したりしながら繋いだり切ったりしても妥当な範囲のリトライで、この程度安定して読み書き(≒送受信)ができますよ、という検証です。
BLEとしては向いていない(やるべきでない)ため意地悪試験になってしまうのですが、バイト列送受信のスループットがどの程度まで出るのかはそのうち試してみたいと思います。