検証したら、他にもおかしいことがありました。
概要
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は上記の問題がありますのでご注意ください。
コメント