M5Stack と toio を組み合わせて使う場合のライブラリの情報を調べる

M5Stack と toio を組み合わせて使う場合のライブラリに、どのようなものがあるかが気になり、調べてみた内容を記事にしたものです。

## Web で検索してみる
まず、Web で検索してみます。

●m5stack toio ライブラリ - Google 検索
　https://www.google.com/search?q=m5stack+toio+%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA

念のため、シークレットモードで履歴などが検索結果に影響しないようにして、それで出てきた検索結果の中のトップ 3つを抜粋してみます。

●futomi/M5StackToio: This library allows your M5Stack micro-controller to control your SONY toio core. This library accesses your toio core using BLE. It will work well on M5Stack Basic Core, GREY, ATOM Matrix, and ATOM Lite. Note that SONY toio is available only in Japan for now: https://toio.io/ (Japanese).
　https://github.com/futomi/M5StackToio

●M5StackToio - Arduino Reference
　https://www.arduino.cc/reference/en/libraries/m5stacktoio/

●kenichi884/M5StackToio: This library allows your M5Stack micro…
　https://registry.platformio.org/libraries/kenichi884/M5StackToio

上記の 2つ目・3つ目は、上記の 1つ目のものをフォークしたものに対する、さらなるフォーク版という位置付けになるようです。

日本語版の GitHub のリポジトリが以下になるようですが、説明を見ると「本ライブラリはオリジナルの https://github.com/futomi/M5StackToio で、それにToio IDの読み取り機能を追加したバージョンの https://github.com/mhama/M5StackToio をベースにBLEプロトコルバージョンv2.3.0以降対応を追加したものです。」とあります。

●M5StackToio/README_jp.md at master · kenichi884/M5StackToio
　https://github.com/kenichi884/M5StackToio/blob/master/README_jp.md

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ff6439a6-bb00-241f-f12c-c499f3b5eff4.png)

## kenichi884/M5StackToio の情報を見てみる
上記の「kenichi884/M5StackToio」となっているバージョンについて、もう少し情報を見てみます。

そもそも、「BLEプロトコルバージョンv2.3.0以降の内容」が何かを先に確認しておきます。

[toio公式のプロトコルバージョンの情報が掲載されたページ](https://toio.github.io/toio-spec/docs/how_to_update_cube#%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B-)の記載によると、以下のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6a3677b0-cbba-5cef-78d2-15efb456395d.png)

v2.3.0 以降の内容というのは「v2.3.0」「v2.4.0」の内容となるようです。

同じページをさらに見ていくと、「v2.4.0」の機能アップデートなどは以下と書かれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/565ac0ab-d4de-6bca-d0a4-dd098f9ba280.png)

そして「v2.3.0」の機能アップデートなどは以下と書かれています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/b23e6d6b-c6aa-9883-f1fe-55ee7b25ee6d.png)

### 開発環境の準備
開発環境の準備について見ていきます。

[以下](https://github.com/kenichi884/M5StackToio/blob/master/README_jp.md#2-m5stacktoio-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)を見ると、「Arduino IDE」「PlatformIO」で開発が行えるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/138fa6f8-be50-1c8c-6ce5-7015442a0fbf.png)

また、開発において複数の toio を接続する場合で、4つ以上の toio との接続を行う場合、コンフィグファイルの書きかえの対応が必要になるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/93c6cc8e-dba4-b4cb-a442-3463b1a95620.png)

### サンプルのソースコード
サンプルのソースコードを見てみます。

GitHub のリポジトリに掲載されている内容は、以下のとおりです。

```cpp
#include <M5Unified.h>
#include <Toio.h>

// Toio オブジェクト生成
Toio toio;

void setup() {
  // M5Stack の初期化
  M5.begin();
  M5.Power.begin();
  M5.Lcd.clear();

  M5.Log.println("- toio コア キューブをスキャンします。");
  std::vector<ToioCore*> toiocore_list = toio.scan(3);
  size_t n = toiocore_list.size();
  if (n == 0) {
    M5.Log.println("- toio コア キューブが見つかりませんでした。");
    return;
  }
  M5.Log.printf("- %d 個の toio コア キューブが見つかりました。\n", n);

  M5.Log.println("- toio コア キューブに BLE 接続します。");
  ToioCore* toiocore = toiocore_list.at(0);
  bool connected = toiocore->connect();
  if (!connected) {
    M5.Log.println("- BLE 接続に失敗しました。");
    return;
  }
  M5.Log.println("- BLE 接続に成功しました。");
  M5.Log.println("- 3 秒後に切断します。");
  delay(3000);
  toiocore->disconnect();
  M5.Log.println("- BLE コネクションを切断しました。");
}

void loop() {

}
```

上記を動かした時に、期待される動作（ログ出力）は以下となるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/735becd3-f530-2c68-41a4-a4a3e1187527.png)

それと「[M5StackToio/examples](https://github.com/kenichi884/M5StackToio/tree/master/examples)」に、さらにサンプルがあるようですが、それらの動作確認端末について以下の記載がありました。
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/f4f4c880-618e-1e87-af10-a634ab43c670.png)

いろいろできることがありそうなので、実際に試していければと思います。