ESP32のBLEライブラリでクライアント側のスケッチを書いていたのだが、複数サーバーの一つが切断すると「BLEClientCallbacks」の「onDisconnect」が全てのサーバーに対し呼ばれてしまい接続中にもかかわらず切断となる。
TwitterでボヤいてたらNimBLEを使うといいよと教えてもらった。
NimBLEライブラリインストール
ArduinoIDEでライブラリマネージャを選んで「NimBLE」を検索しインストール。
スケッチの修正
サンプルスケッチの「NimBLE_Client」を開き参考にしながら修正。
基本はクラス名やメンバ関数名の頭に「Nim」を付ければOK。
AdvertisedDeviceCallbacksクラスの「onResulut」の引数が実引数からポインタ引数になっているのを注意。
class AdvertisedDeviceCallbacks: public NimBLEAdvertisedDeviceCallbacks {
void onResult(NimBLEAdvertisedDevice *advertisedDevice) {
if (advertisedDevice->isAdvertisingService(serviceUUID)) {
pDevice = new NimBLEAdvertisedDevice(*advertisedDevice); // <-- 受け取った内容をコピー
doconnect = true;
}
} // Found our server
} // onResult
}; // AdvertisedDeviceCallbacks
確認
「onDisconnect」も切断の都度に該当サーバーが呼ばれ正常に切断する。
長い時間動かしてもハングらない。
メモリ使用量が減った(70%代->40%代)。
接続の反応が良くなった(気がする)。