結論
- 2024/01/08現在において、writeValueメソッドならびにwriteValueWithoutResponseメソッドを用いて20byte以上のデータを送信できない。
- chromiumへのバグ報告を確認する限りだと修正はされていない。
気付いたきっかけなど
事象に気づいた際の情報をまとめます。
概要
- Chromeフロントエンドからmicro:bitに50文字程度の文字列を連続送信するコードを書こうとしたときに事象に気づいた
- AndroidアプリのBLEScannerからmicro:bitのCharaに文字列データを送った際には正常に受信できていた。BLEScannerは下記からインストール可能
詳細
こちらにまとめました。ざっくりと内容を要約すると
- フロントエンドとmicro:bitを通信しようとしたときに21文字以上送れなかった。
- 文字数を変更して検証したところ、20文字は送信できたけど21文字以上はだめだった。
- 端末に搭載されているBLEはそれぞれBLE 5.1以上あった
- PCはWindows 11 Homeで、micro:bitはV2.21
その他備考
- writeValueメソッドに関してはすでに非推奨となっており、そもそも使用が推奨されていない。
-
詳細欄のスタック・オーバーフローでも記述したが、PCもmicro:bitもBLE 5.0以上対応なため、データの送信量としてはBLE 4.0の2オクテット(16byte)の成約には引っかからない。また、BLEScannerではデータ送信できているため、受信側のmicro:bitは正常に動作している。
BLE仕様の詳細はこちら。「MTU」や「Maximum Transmission Unit」というワードで検索すると早いかも。
その他資料
- 20 byte MTU for web-bluetooth on Windows Chrome?
https://stackoverflow.com/questions/61353788/20-byte-mtu-for-web-bluetooth-on-windows-chrome?fbclid=IwAR10nRiN_V-eAUy-XLrWyk-DCbCzUtSB3IL40oDUwE3FKuCGehbHbjrXoFE