M5StickCPlusで温湿度ロガー その4 NimBLEライブラリに変更

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%代)。
接続の反応が良くなった(気がする)。

タイトルとURLをコピーしました