M5 StickC Plusを使って加速度、角速度を取得してみる。

# 目的
今回はM5 StickC Plusを使用して加速度、角速度を取得してみようと思います。

## 使用したハード・ソフト
・MacBookPro(2016)
・M5 StickC Plus
・VSCode
・PlatformIO(VSCode拡張機能)

※PlatformIOの導入には以下の記事を参考にさせていただきました。

https://qiita.com/ume-bar/items/234014927ae0857baf51

### M5 StickC Plusライブラリを使ってみる

いきなりだがサンプルのライブラリを使用してコードを書いていくこととします。
ライブラリ自体は以下の`Git Hub`より閲覧をすることができ、ライブラリのインポートも上記の`PlatformIO`導入の記事より参考にしました。

https://github.com/m5stack/M5StickC-Plus

さてここで一からプログラムを書くのは骨が折れると思い、サンプルプログラムを探し、（そちらを改造したかったのですが改造の必要もありませんでした。）コードを作成したいと思います。
ですが探したところ`PlatformIO`にてサンプルスケッチを直接閲覧する機能はなさげなので、`arduino IDE`のスケッチ例野中にある`IMU（MPU6006）`に関するスケッチを参考にしたいと思います。

※IMUとは加速度センサー・回転角加速度センサー：ジャイロセンサー・磁界センサー・気圧センサー・温度センサーなどを一つのセンサーとして集約したものらしいです。詳しくは↓からどうぞ。


https://www.epson.jp/prod/sensing_system/imu/

https://www.switch-science.com/products/6623



```c++
/*
*******************************************************************************
* Copyright (c) 2021 by M5Stack
*                  Equipped with M5StickC-Plus sample source code
*                          配套  M5StickC-Plus 示例源代码
* Visit for more information: https://docs.m5stack.com/en/core/m5stickc_plus
* 获取更多资料请访问: https://docs.m5stack.com/zh_CN/core/m5stickc_plus
*
* Describe: IMU.
* Date: 2021/9/14
*******************************************************************************
*/
#include <M5StickCPlus.h>

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

float gyroX = 0.0F;
float gyroY = 0.0F;
float gyroZ = 0.0F;

float pitch = 0.0F;
float roll  = 0.0F;
float yaw   = 0.0F;

/* After M5StickC Plus is started or reset
  the program in the setUp () function will be run, and this part will only be
  run once. 在 M5StickC Plus
  启动或者复位后，即会开始执行setup()函数中的程序，该部分只会执行一次。 */
void setup() {
    M5.begin();             // Init M5StickC Plus.  初始化 M5StickC Plus
    M5.Imu.Init();          // Init IMU.  初始化IMU
    M5.Lcd.setRotation(3);  // Rotate the screen. 将屏幕旋转
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setTextSize(1);
    M5.Lcd.setCursor(80, 15);  // set the cursor location.  设置光标位置
    M5.Lcd.println("IMU TEST");
    M5.Lcd.setCursor(30, 30);
    M5.Lcd.println("  X       Y       Z");
    M5.Lcd.setCursor(30, 70);
    M5.Lcd.println("  Pitch   Roll    Yaw");
}

/* After the program in setup() runs, it runs the program in loop()
The loop() function is an infinite loop in which the program runs repeatedly
在setup()函数中的程序执行完后，会接着执行loop()函数中的程序
loop()函数是一个死循环，其中的程序会不断的重复运行 */
void loop() {
    static float temp = 0;
    M5.IMU.getGyroData(&gyroX, &gyroY, &gyroZ);
    M5.IMU.getAccelData(&accX, &accY, &accZ);
    M5.IMU.getAhrsData(&pitch, &roll, &yaw);
    M5.IMU.getTempData(&temp);
    M5.Lcd.setCursor(30, 40);
    M5.Lcd.printf("%6.2f  %6.2f  %6.2f      ", gyroX, gyroY, gyroZ);
    M5.Lcd.setCursor(170, 40);
    M5.Lcd.print("o/s");
    M5.Lcd.setCursor(30, 50);
    M5.Lcd.printf(" %5.2f   %5.2f   %5.2f   ", accX, accY, accZ);
    M5.Lcd.setCursor(170, 50);
    M5.Lcd.print("G");
    M5.Lcd.setCursor(30, 80);
    M5.Lcd.printf(" %5.2f   %5.2f   %5.2f   ", pitch, roll, yaw);

    M5.Lcd.setCursor(30, 95);
    M5.Lcd.printf("Temperature : %.2f C", temp);
    delay(100);
}


```

こちらが`arduino　IDE`にて閲覧したサンプルスケッチになります。
とりあえずこのまま`PlatformIO`にて実行してみます。

![スクリーンショット 2023-05-23 13.55.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3403549/8f930fed-866d-7806-01eb-eac1f5a94396.png)

どうやら成功しました。
勢いそのまま`M5 StickC Plus`に書き込んでみます。

![スクリーンショット 2023-05-23 14.01.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3403549/e78d9d82-1618-fa62-8e57-dafe8a4d2491.png)

書き込みが成功したようです。
本体のディスプレイを見てみましょう。

![IMG_5266.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3403549/4223d5b6-e770-19d6-0390-110f7689574c.jpeg)

ちゃんと表示されていますね。