M5Stack はここでは「Gray」を使ってみます。
ESP32と9軸センサを搭載したマイコンモジュールです(現在販売終了、後継はCore2?)。
上の画像ではIMU はMPU9250 となっていますが、出荷時期によっては6軸のMPU6886 の場合もあります。判定の仕方はAppendix2 をご覧ください。
まず、Windows 10 にArduino IDE をインストールしておきます。
PCとM5Stack をUSBケーブル接続して通信するためのドライバーをインストール
CP210x_VCP_Windows をダウンロードします。
解凍したら、CP210xVCPInstaller_x64_v6.7.0.0をダブルクリックしてインストール実行。
M5Stackシリーズの初期設定
Arduino IDEを起動して、ボード情報を追加します。
ファイルー>環境設定
「追加のボードマネージャーのURL:」へ以下をコピー
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json
OKをクリック
M5Stackシリーズのマイコンボードを追加
ツールー>ボード:ー>ボードマネージャー
検索窓にM5を入力(検索は即実行されます)
M5Stack by M5Stack official
1.0.9 or 2.0.2 を選択してインストール
インストールが終了したら閉じます。
シリアルポートの選択
PCとM5Stackシリーズの通信に使用するシリアルポートを選択します。
まず、未接続の場合のシリアルポートを確認(これは例です)
接続時のシリアルポート確認
新しく出現したものがM5Stackのもの、これをクリックします。
再度ツールから確認
機種別設定でライブラリをインストール
ツールー>ライブラリを管理…
M5Stack で検索してインストールします。
Install ‘M5Stack’ only をクリックしてインストール。
使用するボードの選択
M5Stack Gray の選択肢は無いようですので以下を選びます。
ツールー>ボード:ー>M5Stack Arduino ー> M5Stack-Core-ESP32
スケッチ(プログラム)例の書き込み
せっかくESP32と6軸センサを持ったGray ですので「加速度と温度」を表示してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#define M5STACK_MPU6886 #include <M5Stack.h> // 取得するそれぞれの軸の加速度データを初期化 float aX = 0.0F; float aY = 0.0F; float aZ = 0.0F; float Temp; void setup() { M5.begin(); M5.Power.begin(); // Powerモジュールを初期化 M5.IMU.Init(); // IMUを初期化 M5.Lcd.setTextSize(3); } void loop() { // 加速度データを取得 M5.IMU.getAccelData(&aX, &aY, &aZ); // それぞれの軸の加速度データをシリアル通信で送信 Serial.print("aX(mG):"); Serial.print(aX * 1000); Serial.print(","); Serial.print("aY(mG):"); Serial.print(aY * 1000); Serial.print(","); Serial.print("aZ(mG):"); Serial.println(aZ * 1000); // それぞれの軸の加速度データをM5Stackに表示 M5.Lcd.setCursor(0, 50); M5.Lcd.setTextColor(BLUE, BLACK); M5.Lcd.printf("aX: %5.2f mG ", aX * 1000); M5.Lcd.setCursor(0, 100); M5.Lcd.setTextColor(RED, BLACK); M5.Lcd.printf("aY: %5.2f mG ", aY * 1000); M5.Lcd.setCursor(0, 150); M5.Lcd.setTextColor(GREEN, BLACK); M5.Lcd.printf("aZ: %5.2f mG ", aZ * 1000); M5.IMU.getTempData(&Temp); M5.Lcd.setCursor(0, 200); M5.Lcd.setTextColor(WHITE, BLACK); M5.Lcd.printf("Temp: %.2f C", Temp); delay(1000); } |
書き込み開始
無事書き込み完了
以下のように表示されます。
スケッチ例にはボタンを押して電源OFFするコードは書かれていません。
このままではバッテリーが切れるまで表示しっぱなしです。
強制的に電源OFFするには電源ボタンを2回クリックします。
Appendix
Jetson Nano にM5Stack 開発環境をセットアップ(メモ)
Appendix2
M5Stack に実装されているIMU の型番取得
以下のコードをコンパイルして書き込めば表示してくれるそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <M5Stack.h> #include <Wire.h> #define MPU9250_ADDRESS 0x68 // I2Cアドレス。MPU6886と共通 #define WHO_AM_I_MPU9250 0x75 // MPU6886と共通 void setup() { unsigned char tempdata; M5.begin(); M5.Lcd.setCursor(20, 40); M5.Lcd.setTextSize(2); Wire.begin(); Wire.beginTransmission(MPU9250_ADDRESS); Wire.write(WHO_AM_I_MPU9250); Wire.endTransmission(false); Wire.requestFrom(MPU9250_ADDRESS, 1); tempdata = Wire.read(); if (tempdata == 0x71) { M5.Lcd.print("MPU9250 inside"); } else if (tempdata == 0x19) { M5.Lcd.print("MPU6886 inside"); } else { M5.Lcd.print("unknown device"); } M5.Lcd.printf(" (%02x)", tempdata); } void loop() { } |
ちなみに、当サイトが実機に使っていたのは…….、MPU6886 でした。
Leave a Reply