[M5Stack] センサ情報を取得して、シリアル通信で出力する

M5Stack

M5Stackには、様々なセンサが付いていますので、このセンサを使ってみましょう。

スポンサーリンク

前提

・M5Stack本体

・Windows10 PC

M5Stackを、PCに接続してください。

M5Stackシリーズの最新機種は、Core2です。タッチ操作に対応しています。

センサ情報を取得して、シリアル通信で出力する方法

ArduinoIDEを起動して、以下のサンプルコードをコピーしてください。

サンプルコード

// 私のM5StackでIMUはMPU6886を使っているので、MPU6886を#defineする
#define M5STACK_MPU6886 
//#define M5STACK_MPU9250 
//#define M5STACK_MPU6050
// #define M5STACK_200Q

#include <M5Stack.h>

/////////////////////////////////////
void setup_serial(){

  Serial.begin(115200);
  while (!Serial);

}

void setup(){

  // 初期化
  M5.begin();
  M5.Power.begin();

  setup_serial();

  M5.IMU.Init();

  // 起動画面設定
  M5.Lcd.fillScreen(TFT_NAVY);
  M5.Lcd.setTextColor(TFT_WHITE);
  M5.Lcd.setTextSize(2);
  M5.Lcd.printf("START");

}

void loop() {
  float accX, accY, accZ;
  float gyroX, gyroY, gyroZ;
  float pitch, roll, yaw;
  float Temp;

  // 画面初期化
  M5.Lcd.fillScreen(TFT_NAVY);
  
  // 角度センサ(ジャイロ)の取得
  M5.IMU.getGyroData( &gyroX, &gyroY, &gyroZ );

  // 画面表示
  M5.Lcd.setCursor(0, 0);
  M5.Lcd.printf("gyro=(%5.1f, %5.1f, %5.1f)", gyroX, gyroY, gyroZ);
  // シリアル通信出力
  Serial.printf("gyro=(%5.1f, %5.1f, %5.1f)", gyroX, gyroY, gyroZ);
  Serial.println();

  // 加速度センサの取得
  M5.IMU.getAccelData( &accX, &accY, &accZ );

  // 画面表示
  M5.Lcd.setCursor(0, 50);
  M5.Lcd.printf("acc=(%5.1f, %5.1f, %5.1f)", accX, accY, accZ);
  // シリアル通信出力
  Serial.printf("acc=(%5.1f, %5.1f, %5.1f)", accX, accY, accZ);
  Serial.println();

  // 姿勢角度センサの取得
  M5.IMU.getAhrsData( &pitch, &roll, &yaw );

  // 画面表示
  M5.Lcd.setCursor(0, 100);
  M5.Lcd.printf("PRY=(%5.1f, %5.1f, %5.1f)", pitch, roll, yaw);
  // シリアル通信出力
  Serial.printf("PRY=(%5.1f, %5.1f, %5.1f)", pitch, roll, yaw);
  Serial.println();

  // 温度センサの取得
  M5.IMU.getTempData( &Temp );
  // 画面表示
  M5.Lcd.setCursor(0, 200);
  M5.Lcd.printf("Temperature=%.2f C", Temp);
  // シリアル通信出力
  Serial.printf("Temp=(%.2f)", Temp);
  Serial.println();
  
  // 500ms待機
  delay(500);

}

上のサンプルコードを動かすと、M5Stackの画面に、様々なセンサの取得結果が表示されると思います。

PCで、シリアル通信を見る

M5Stackは、画面表示の他に、シリアル通信で、取得結果を出力しています。

ArduinoIDEには、シリアルモニタがついていますので、M5Stackのシリアル通信出力結果を表示させることができます。

以下の画像の部分を押すと、シリアル通信モニタ画面が表示されます。

上記サンプルコードが動作しているなら、モニタ画面に、各種センサ結果が流れるように表示されているはずです。

センサ情報を取得して、シリアル通信で出力する方法(グラフに表示する)

M5Stackのセンサ値をPCのグラフに表示させる方法を紹介します。

グラフ表示は、ArduinoIDEに、シリアルプロッタという機能がありますので、これを利用します。

サンプルコード

このサンプルコードでは、一つのセンサ情報をシリアル通信するように変更しています。

ボタンAを押す毎に、ジャイロ→加速度→姿勢角度を順番に切り替えていきます。

#define M5STACK_MPU6886 
#include <M5Stack.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;
 
int mode = -1;
 
void setup() {
  // 初期設定
  M5.begin();
  M5.Power.begin();
  M5.IMU.Init();

    // 起動画面設定
  M5.Lcd.fillScreen(TFT_NAVY);
  M5.Lcd.setTextColor(TFT_WHITE);
  M5.Lcd.setTextSize(2);
  M5.Lcd.printf("START");
}
 
void loop() {
  M5.update();
 
  // センサデータ取得
  M5.IMU.getGyroData(&gyroX, &gyroY, &gyroZ);
  M5.IMU.getAccelData(&accX, &accY, &accZ);
  M5.IMU.getAhrsData(&pitch, &roll, &yaw);
 
  // ボタンA押下イベント
  if ( mode == -1 || M5.BtnA.wasReleased() ) {
    mode++;
    mode = mode % 3;
 
    // ボタンAを押す毎に、ジャイロ→加速度→姿勢角度を順番に切り替える
    // プロッタ用のタイトル出力
    if ( mode == 0 ) {
      Serial.printf("gyroX,gyroY,gyroZ\n");
    } else if ( mode == 1 ) {
      Serial.printf("accX,accY,accZ\n");
    } else if ( mode == 2 ) {
      Serial.printf("pitch,roll,yaw\n");
    }
  }
 
  // データ出力
  if ( mode == 0 ) {
    Serial.printf("%6.2f,%6.2f,%6.2f\n", gyroX, gyroY, gyroZ);
    
    M5.Lcd.fillScreen(TFT_OLIVE);
    M5.Lcd.setCursor(0, 100);
    M5.Lcd.println("Gyro");
    M5.Lcd.printf("gyro=(%5.1f, %5.1f, %5.1f)", gyroX, gyroY, gyroZ);

  } else if ( mode == 1 ) {
    Serial.printf("%5.2f,%5.2f,%5.2f\n", accX, accY, accZ);
    
    M5.Lcd.fillScreen(TFT_GREEN);
    M5.Lcd.setCursor(0, 100);
    M5.Lcd.println("Acc");
    M5.Lcd.printf("acc=(%5.1f, %5.1f, %5.1f)", accX, accY, accZ);

  } else if ( mode == 2 ) {
    Serial.printf("%5.2f,%5.2f,%5.2f\n", pitch, roll, yaw);

    M5.Lcd.fillScreen(TFT_PINK);
    M5.Lcd.setCursor(0, 100);
    M5.Lcd.println("Ahrs");
    M5.Lcd.printf("PRY=(%5.1f, %5.1f, %5.1f)", pitch, roll, yaw);

  }
 
  delay(200);
}

PCで、シリアルプロッタで、グラフを見る

ArduinoIDEで、以下の操作をすると、グラフが表示されます。

まとめ

今回は、M5Stackのセンサ値を取得して、シリアル通信で出力する方法を紹介しました。

参考

M5StickCの6軸IMU MPU6886を調べる
概要 M5StickCで使われているIMUをちゃんと調べてみました。 IMUとは? IMUとはInertial Measurement Unitの略で、加速度や角速度などの複数のセンサーを搭載したセンサーです。 加速度とは? 学研さんと「加

このサイトでは、M5Stackに関する様々な記事を用意していますので、こちらもご覧ください。

コメント

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