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

14,272 views

Published on

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

Published in: Software
0 Comments
21 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,272
On SlideShare
0
From Embeds
0
Number of Embeds
3,582
Actions
Shares
0
Downloads
25
Comments
0
Likes
21
Embeds 0
No embeds

No notes for slide

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

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

×