M5StickCによるジェスチャ認識(1)～インストールから加速度取得まで

# M5StickCによるジェスチャー認識
- 今回M5StickCを購入（約2,000円）だったので、ジェスチャーなどを簡単に認識できるということで、やってみた。
- [[ここ]](https://www.switch-science.com/catalog/5517/)で購入できます。

# M5StickC系のプログラム関連記事
1. [M5StickCによるジェスチャ認識(1)～インストールから加速度取得まで](https://qiita.com/chimamedia/items/7aa8dac10dc178009943)（この記事）
2. [M5StickCによるジェスチャ認識(2)～サンプルコードによるジェスチャ認識](https://qiita.com/chimamedia/items/9d8a4703dcd9940d40be)
3. [M5StickCによるジェスチャ認識(3)～Wi-Fi接続と学習データの生成](https://qiita.com/chimamedia/items/fd367f75c3979541c49d)
4. M5StickCによるジェスチャ認識(4)～オリジナルデータによるジェスチャ認識
5. M5StickCによる音声認識
※現状の予定になります

# 開発環境・インストール
- 開発環境：PlatformIO
- OS: Windows10

## PlatformIOのインストール
- 詳細な手順については割愛しますが、[[ここ](https://platformio.org/install/ide?install=vscode)]や[ここ](https://dandydot.no-ip.biz/~dot/presen/advtech/seminars/iot_hands_on/install_platformio_ide/README.md.html)などを参考にするといいかと思います。
- [VSCodeインストーラー](https://code.visualstudio.com/)を各自のOSに応じてダウンロードする
- とくにインストールをする場合のフォルダの指定ですが、日本語が入らない様に注意してください。
- VSCodeをインストールしたら、VSCodeを起動し、PlatformIOを入れます。
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214668/eebf6049-70ed-aeb6-ea02-d59754069e3e.png)
↑図の参照：https://dandydot.no-ip.biz/~dot/presen/advtech/seminars/iot_hands_on/install_platformio_ide/README.md.html

- 一度、VSCodeを再起動する。すると、以下のように、PlatformIOのアイコンが出ていればOK

![3 - コピー.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214668/1569e268-a671-d0f5-6ca5-716f5a60f6b1.jpeg)


## M5StickCで開発できるように
- PlatformIOをインストールしたら、M5StickCで開発できるように設定する。
- 「Platforms」から、「Espressif 32」を検索し、インストールする。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214668/60b44e13-68e0-fb6b-8149-425dc3b0861b.png)
- 次に「Libraries」から、「M5StickC」を検索し、インストールする
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214668/99dff7dd-83c1-98be-49e6-67f11869489a.png)

# サンプルプログラム「Hello World」の作成
- プログラム関係で、一番最初にやるHello Worldを作ってみましょう。
- M5StickCにもともと入っていたものは上書きしますので注意

## プロジェクトの作成
- 「PIO Home」の「New Project」から作成する。Nameは適当に「Test01」など、Boardは「M5Stick-C (M5Stick)」を選択する。

## プログラムの作成
- プロジェクトが作成されれば、srcの中にあるmain.cppを編集する。基本的にここに書いていく（Arudinoなどで慣れている人は大体わかるはず）
- setup()：最初の1回だけ呼ばれるメソッド。初期化などの処理を書く
- loop()：継続的に処理をするメソッド。

```cpp:main.cpp
#include <M5StickC.h>
  
void setup(){
  M5.begin();
  M5.Lcd.setRotation(3); //回転
  M5.Lcd.setCursor(0, 0, 4); //位置やサイズ
  M5.Lcd.print("Hello World"); //表示する文字
}

void loop() {
}
```

## 書き込み関連の設定
- 次に、書き込みするための設定を変更する。「platformio.ini」を開いて「upload_speed = 1500000」を追加する。

```ini:platformio.ini
[env:m5stick-c]
platform = espressif32
board = m5stick-c
framework = arduino

upload_speed = 1500000
```

## 実行
- M5StickCをパソコンとつなげておく
- プログラムを書き終えたら「Build」を押して、ビルドする。エラーがなければ、そのまま「Upload」すると、Hello Worldが表示される。

![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214668/6f0b2d9d-8551-cb33-741d-1e3011058659.jpeg)

![4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214668/5f5d7596-da11-587b-b8d5-1f64ef18a207.jpeg)

- もし書き込みがうまくいかない場合は、COMポートが自動で正しく検出されていませんので、明示的にすることで対応します。

```ini:platformio.ini
[env:m5stick-c]
platform = espressif32
board = m5stick-c
framework = arduino

upload_speed = 1500000

upload_port = COM[XX]
monitor_port = COM[XX]
```


# 加速度データの取得
- まずは、加速度のデータが取れることを確認するために、プログラムを作成していきます。
- 加速度のプログラムは様々な人が作成していますので、用途に応じて参考にするといいかと思います。

> [1] https://rpubs.com/koyo/M5StickC_200101
> [2] https://make-muda.net/2019/09/6932/
> [3] https://pages.switch-science.com/letsiot/vibration/

- 今回は、シンプルな[1]からサンプルプログラムを作成したいと思います
- Switch Scienceのページから、M5StickCの加速度系は以下のようになっています
![5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214668/1cbef0fe-adcb-8dcb-535c-40595da3ef94.jpeg)

## プログラムの作成
- New Projectから新しいプログラムを作成する。名前は適当に

```cpp:main.cpp
#include <M5StickC.h>

float accX = 0.0F;
float accY = 0.0F;
float accZ = 0.0F;

void setup() {
  M5.begin();
  M5.IMU.Init();
}
 
void loop() {
  M5.update();
  M5.Lcd.setRotation(3); //回転
  M5.Lcd.setCursor(0, 0, 2); //位置やサイズ
 
  // データ取得
  M5.IMU.getAccelData(&accX, &accY, &accZ);
 
  //ディスプレイに表示
  M5.Lcd.printf("%5.2f,%5.2f,%5.2f\n", accX, accY, accZ);
 
  delay(10);
}
```

- プログラムを書き終えたら「Build」を押して、ビルドする。エラーがなければ、そのまま「Upload」すると、加速度がディスプレイに表示される。

- 今のプログラムでは、特に明示していないが、ディスプレイだと煩わしい場合があるので、シリアル通信（USBを繋いでいる状態）で、明示的にデータを表示したい場合は、シリアル通信のコードを追加し、シリアルモニターを表示したい場合は「View」→「Command Palette」を押して「Serial Monitor」を入力するとシリアルモニターが表示される。同様に加速度がPlatformIOにも表示される。
![6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214668/25ffd861-2c3b-7f53-7784-d2151f45beac.jpeg)