タイトルが言いたいことのすべてです。
以下細かい話
M5Stack(まあ、M5製品に限らずESP32/ESP32-S3系ボードでArduino使うぶんには使えるんですが)でtoio core cubeを動かしたりセンサーの情報をよみとったりできるライブラリ kenichi884/M5StackToioですが、依存ライブラリのNimBLE-Arduinoがver.1.4.xからver.2.0.x、ver.2.1.xへバージョンアップし、APIの互換性がなくなりました。
なんか2.0.0のリリースでミスったっぽい
そして2.1.0リリーズ
"Reduced the code size by over 40KB." とあるのが魅力的ですが、1.4.x系とAPI互換性がありません。
今は2.1.2が最新のようです。
このため、現時点(2024年12月)ではNimBLE-Arduinoのバージョンをver.1.4.3に固定してビルドしないと、kenichi884/M5StackToioを使ったプロジェクトをビルドすることができず、ビルドエラーになります。
Arduino IDEの場合
ライブラリマネージャで、M5StackToioのバージョン選択で「1.4.3」を選択してください。なんも考えずにアップデートしていると最新の2.1.2(2024年12月末時点)になってしまってビルドできなくなります。
Arduino IDE 2.3.4、ボードマネージャ esp32 3.1.0 または M5Stack 2.1.3 でビルドできることを確認。
PlatformIOの場合
platformio.iniファイルのlib_depsで「NimBLE-Arduino@1.4.3」としてバージョンを固定してください。kenichi884/M5StackToioのREADME.mdでは「NimBLE-Arduino@^1.4.1」と書いてしまっていたので、このままだと「1.4.1以上」ということになり2.1.2が選択されてしまします。
platformio.iniの例
platform = espressif32 @ 6.9.0
board = m5stack-core2
framework = arduino
monitor_speed = 115200
lib_deps = m5stack/M5Unified
https://github.com/stack-chan/m5stack-avatar
kenichi884/M5StackToio
h2zero/NimBLE-Arduino@1.4.3
現状の動作状況
M5Stackシリーズでないと動かないということはなく、NimBLE-Arduinoの対応MCU(ESP32、ESP32-S3、ESP32-C3)であれば動きます。(M5UnifiedなどのM5専用ライブラリは外した状態で)XIAO ESP32-S3での動作は確認しました。
ESP32-C6は未対応です。なのでM5 nano C6では動きません。
ToioCore.hで // #define USE_NIMBLE 1 としてNiMBLEの使用をやめてarduino-esp32のBluetooth APIを使うようにするとC6でも動くかも。(Arduino IDEのほうが新しめのarduino-esp32に対応しているっぽいのでそっちだと可能性ありそうです。)
NimBLEを使った場合、PSRAMのある機種ではWiFiとの同時使用が可能(arduino-esp32のBluetooth APIだとヒープメモリが足りずに動かない)ですが、それでもメモリが足りず、大体以下のような感じになっています。
WiFi使わない→PSRAMなし機種でもOK
WiFi(http/https)→PSRAM必須 radiko視聴などはいける
WiFi使う&OpenAIなどによるいわゆるAIスタックチャン PSRAMがあってもメモリ不足で動作せず。
動作したものについては以下に置いてあります。
将来
kenichi884/M5StackToioのほうでNimBLE-Arduino 2.1.x対応しないといけないなーとは思っています。ただ、APIが違うので NimBLE-Arduino 2.1.x 専用になっちゃうかなと。( NimBLE-Arduino 1.4.xはarduino-esp32のBluetooth APIと互換なwrapperがあったのでarduino-esp32のBluetooth APIで書いておけば切り替えが容易だったのです。)
あとnrF52というかAdafruit_nRF52_Arduino対応してみたいなーという気がしなくもないです。