ESP32 1.0.3のBLEUUIDについて

検証したら、他にもおかしいことがありました。

概要

ESP32 1.0.3のBLEUUIDはおかしいので、気をつけましょう。

検証コード

#include "BLEDevice.h"
void setup() {
  Serial.begin(115200);
  delay(1000);
  BLEUUID uuid("00001812-0000-1000-8000-00805F9B34FB");
  Serial.printf("uuid     : %s\n", uuid.toString().c_str());
  BLEUUID uuid16("1812");
  Serial.printf("uuid16   : %s\n", uuid16.toString().c_str());
  BLEUUID uuid16_2(uuid16.toString().c_str());
  Serial.printf("uuid16_2 : %s\n", uuid16_2.toString().c_str());
  BLEUUID uuid32("00001812");
  Serial.printf("uuid32   : %s\n", uuid32.toString().c_str());
}
void loop() {
}

実行結果

uuid     : 00001812-0000-1000-8000-00805f9b34
uuid16   : 1812-0000-1000-8000-00805f9b34fb
uuid16_2 : <NULL>
uuid32   : 00001812-0000-1000-8000-00805f9b34fb

内部で小文字に置き換えているので、00001812-0000-1000-8000-00805f9b34fbと出て欲しいのですが、普通に指定すると最後の2文字が削られます。

内部データも削られているので、おそらく動くように思えますが、最後の2文字だけ違うデバイスがあったら間違えて接続してしまいます。

短縮形で渡すと4文字の場合、先頭の0000が削られます。そのため00001812-0000-1000-8000-00805f9b34fbとはマッチングしません。

短縮形で8文字で渡すと正しく表示されますが、内部データは短縮形4文字の0000が削られた形で保存されているので、マッチングしません!

まとめ

HIDなどの4文字短縮デバイスを使う場合には4文字で指定しないと動きません。修正したものをプルリクエストで投げてみましたが、現状の1.0.3は上記の問題がありますのでご注意ください。

コメント