• ホーム
  • ブログとニュース
  • 設計プロジェクト例
  • 顧問契約概要
  • お問い合わせ
  • …  
    • ホーム
    • ブログとニュース
    • 設計プロジェクト例
    • 顧問契約概要
    • お問い合わせ

     

    • ホーム
    • ブログとニュース
    • 設計プロジェクト例
    • 顧問契約概要
    • お問い合わせ
    • …  
      • ホーム
      • ブログとニュース
      • 設計プロジェクト例
      • 顧問契約概要
      • お問い合わせ

      FlutterアプリでのBLEのハンドリング

      Flutterアプリを設計している中でbluetoothを扱うケースが多いが、bluetoothの信号の伝達シーケンスは、アンドロイドとLinuxで相違がある。特にlinuxの場合は接続シーケンスにおいてflutter_blue_plusとBlueZ daemonの間での状態の不一致が多々発生し、この状態不一致を許容し包括するための設計にはかなり苦労している。この状態不一致の主な要因は、Linuxではbluetoothの管理において「分散型」の設計となっているためであり、この点を少々調査解析する。

      <Linuxの場合の簡略信号伝達シーケンス>

      Flutter App (Dart)
      │
      ▼
      flutter_blue_plus_linux
      │
      ▼
      D-Bus
      │
      ▼
      bluetoothd (BlueZ daemon)
      │
      ▼
      Bluetooth Controller Chip
      │
      ▼
      BLE Device

      <Androidの場合の簡略信号伝達シーケンス>

      Flutter App (Dart)
      │
      ▼
      flutter_blue_plus
      │
      ▼
      Bluetooth Service
      │
      ▼
      Fluoride (旧BlueDroid)
      │
      ▼
      Bluetooth Controller Chip
      │
      ▼
      BLE Device

      flutter_blue_plus_linux は D-Bus を使って BlueZ と通信しているが、その通信キャッシュの_client.devices の更新タイミングが両者の間で一致しないことが多々ある。また、BlueZの状態遷移が不安定なような挙動を目撃することがある。これを認識してその補償方式を構築していく必要がある。

      Androidではflutter_blue_plusが通信キャッシュにてBluetooth Service以下と通信しているが、この通信キャッシュはflutter_blue_plusではハンドリングできないような仕組みである。換言すれば、OSが一貫してbluetoothの状態を管理しており、アプリ側とOS側(bluetoothデーモン側)の間での状態不一致が発生する頻度は非常に低い。

      Flutterアプリの検証においても、Linuxにおいては『BLEデバイスがアプリ側のscanで見えたのに内部Deviceリストに存在しない』というような問題が多々発生するが、Androidでは発生したことがない。このためLinuxにおいては、bluetoothのscan/connect/discover/disconnectの通信シーケンスの確立および補償処理には非常に苦労している。

      今後は、WebSocket方式あるいはUnix Domain Socket方式を使ってFlutterアプリ側とbluetooth管理側を『分離』して、通信の安定性を向上させることを計画する。

      前へ
      グラフィカルwellnessデバイス『AURAFLOW』構想
      次へ
      Copilotの従量課金での使用状況
       サイトへ戻る
      strikingly iconStrikinglyを搭載
      クッキーの使用
      ブラウジングエクスペリエンス、セキュリティ、データ収集を向上させるためにクッキーを使用します。 同意すると、広告と分析のための クッキーの使用に同意したことになります。 クッキーの設定はいつでも変更できます。 詳しく見る
      同意する
      設定
      すべて拒否する
      クッキー設定
      こちらのクッキーは、セキュリティ、ネットワーク管理、アクセシビリティなどのコア機能を有効にします。こちらのクッキーをオフにすることはできません。
      こちらのクッキーは、訪問者がサイトをどのように操作しているかをよりよく理解し、エラーを発見するのに役立ちます。
      こちらのクッキーにより、サイトは、拡張機能とパーソナライズを提供するために行った選択を記憶することができます。
      保存