🙌

M5stickCを始める(arduino開発)/windows OS用

2024/11/20に公開

M5stickCとは、M5Stack社が開発、販売をしているIoTデバイス開発ツールキットです。
別機器でM5StickCPlusやM5StickCがありWi-FiとBluetooth機能が追加された物になります。
プログラムはArduino言語を利用して開発します。Arduinoを触るうちにBluetooth通信を行いたいと思い、HC-05を購入していたのですがそれより簡単にできそうだったのでやってみました。

m5stickCdでできること

80×160ピクセル(0.96インチ)のカラー液晶画面搭載
6軸加速度・ジャイロセンサー搭載
マイク&LED搭載
ネットワーク機能(Wi-Fi/Bluetooth)搭載
赤外線送信機(IR)
3つの物理ボタン・Lipoバッテリー(80mAh)内蔵

1ArduinoIDEのインストール

公式サイト
https://www.arduino.cc/en/Main/Software

2M5stickCの開発環境構築

ボードの設定

ファイル>環境設定から以下のアドレスを、ボードマネージャーのURLに入力する。

https://dl.espressif.com/dl/package_esp32_index.json

ボードマネージャの追加

内蔵されているESP32というマイクロコントローラを操作するため、
ツール>ボード>ボードマネージャを選択。

検索枠に[ESP32]と入力してインストールする。

ライブラリのインストール

必要なライブラリは

  • mtstick
    ライブラリマネージャから検索してインストールをする。

M5stickCの有線接続

一応つながっているポートの確認もする。デバイスマネージャで確認できる。

サンプルコードの実行

M5stickCの裏面を確認する。

今回はMPU6886とあるので、ファイル>スケッチ例>M5StickC>Basics>MPU6886を選択して開き、スケッチのコンパイルを行う。


#include <M5StickC.h>
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;


float accX = 0;
float accY = 0;
float accZ = 0;

float gyroX = 0;
float gyroY = 0;
float gyroZ = 0;

float temp = 0;

/* After M5StickC is started or reset
  the program in the setUp () function will be run, and this part will only be
  run once. 在 M5StickC
  启动或者复位后,即会开始执行setup()函数中的程序,该部分只会执行一次。 */
void setup() {
   Serial.begin(115200);  // 一応Serialを初期化
  SerialBT.begin("ESP32");
    M5.begin();
    M5.Lcd.setRotation(3);
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setTextSize(1);
    M5.Lcd.setCursor(40, 0);
    M5.Lcd.println("MPU6886 TEST");
    M5.Lcd.setCursor(0, 15);
    M5.Lcd.println("  X       Y       Z");
    M5.MPU6886.Init();
}

/* 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() {
    M5.MPU6886.getGyroData(&gyroX, &gyroY, &gyroZ);
    M5.MPU6886.getAccelData(&accX, &accY, &accZ);
    M5.MPU6886.getTempData(&temp);

    M5.Lcd.setCursor(0, 30);
    M5.Lcd.printf("%.2f   %.2f   %.2f      ", gyroX, gyroY, gyroZ);
    M5.Lcd.setCursor(140, 30);
    M5.Lcd.print("o/s");
    M5.Lcd.setCursor(0, 45);
    M5.Lcd.printf("%.2f   %.2f   %.2f      ", accX * 1000, accY * 1000,accZ * 1000);
    SerialBT.printf("%.2f   %.2f   %.2f      ", accX * 1000, accY * 1000,accZ * 1000);

    M5.Lcd.setCursor(140, 45);
    M5.Lcd.print("mg");
    M5.Lcd.setCursor(0, 60);
    M5.Lcd.printf("Temperature : %.2f C", temp);
    //SerialBT.printf("Temperature : %.2f C\n", temp);

    delay(100);
}

実行結果

以下のように表示されればオッケー。

Discussion