M5Unifiedライブラリの始め方

このドキュメントはArduino IDE及びESP-IDF用のライブラリであるM5Unifiedを初めて利用する際の手順を紹介します。
※ M5Unified v0.0.7の情報を元にこのキュメントは作成されています。

M5Unifiedとは

M5Unifiedは、ESP32ベースのM5Stack製品をArduinoFrameworkで扱うためのライブラリです。

今までのライブラリはM5Stack/M5Core2/M5StickC/M5StickCPlus/M5Atomと製品ごとにライブラリが別々で、使い方(API)もバラバラでした。このM5Unifiedを使うと、同じ使い方(API)ですべてのM5Stackシリーズを扱うことができ便利です。

また、M5Unifiedに慣れると1つのプログラムコードで異なるM5Stackシリーズ(画面ありのM5Stackと画面のないM5Atomなど)を動かすことも可能です。

※ (補足)M5Unifiedは、Arduinoフレームワークだけでなく、ESP-IDFフレームワークでも利用可能です。

対応デバイス

下記のデバイス以外でも対応している場合があります。最新情報は M5Unifiedのリポジトリ を確認してください。

メインデバイス

  • M5Stack Basic / Gray / Go / Fire

  • M5Stack Core2 / Core2 for AWSIoT EduKit / M5Tough

  • M5StickC / M5StickCPlus

  • M5Stack CoreInk

  • M5Paper

  • M5Atom Lite / Matrix / Echo / PSRAM / U

  • M5Stamp Pico / C3 /C3U

  • M5Station

外部ディスプレイ

  • Unit LCD

  • Unit OLED

  • Atom Display / Lite (M5Atom Lite / Matrix / PSRAMと接続します。)

外部スピーカー

  • SPK HAT (M5StickC / M5StickCPlus / M5Stack CoreInkと接続します。)

  • Atomic SPK (M5Atom Lite / PSRAMと接続します。)

ArduinoIDEのインストール

ArduinoIDEのインストール を参照してください。

ライブラリをインストールする

ArduinoIDEを起動して下記の手順でM5Unifiedをインストールします。

ライブラリマネージャの使い方

M5Unifiedのライブラリをインストールします。

  • 1."スケッチ" -> "ライブラリをインクルード" -> "ライブラリを管理..."をクリックすると、エディタの左側に"ライブラリマネージャー"が表示されます。
  • 2."検索をフィルタ"にM5Unifiedを入力すると"M5Unified by M5Stack"という項目が表示されるので"インストール"をクリックします。
  • 3."ライブラリの依存関係をインストール"が表示された場合は"全てをインストール"をクリックします。
ライブラリマネージャーは他のUnitやModule、HAT、BASEを使うときに何度も使う場合があります。使い方を覚えておいてください。

プログラムソースの入力

HelloWorldかRGB LEDの点滅のプログラムコードをArduinoIDEのエディタで入力してください。

HelloWorld(ディスプレイがある機種向け)

ディスプレイとシリアルモニターに"HelloWorld!!"と表示して、1秒ごとに数字をカウントします。

#include <M5Unified.h> // M5Unifiedライブラリをプログラムで使用可能にします。

// グローバル変数(プログラム全体で使用する変数の定義をします。)
uint32_t count;


// setup関数は起動時に一度だけ実行されます。
// 主に初期化処理を記述します。
void setup() {

  auto cfg = M5.config();       // M5Stack初期設定用の構造体を代入
  // configを設定する場合はここで設定
  // 例
  // cfg.external_spk = true;

  M5.begin(cfg);                           // M5デバイスの初期化

  M5.Display.setTextSize(3);               // テキストサイズを変更
  M5.Display.print("Hello World!!");       // 画面にHello World!!と1行表示
  Serial.println("Hello World!!");         // シリアルモニターにHello World!!と1行表示
  count = 0;                               // countを初期化

}

// loop関数は起動している間ずっと繰り返し実行されます。
// センサーから値を取得したり、画面を書き換える動作等をおこないます。
void loop() {

  M5.Display.setCursor(0, 20);              // 文字の描画座標(カーソル位置)を設定
  M5.Display.printf("COUNT: %d\n", count);  // countを画面に表示
  Serial.printf("COUNT: %d\n", count);      // countをシリアルに表示
  count++;                                  // countを1増やす
  delay(1000);                              // 1秒待つ

}

RGB LEDを点滅させる(M5AtomやM5StampなどRGB LEDがある機種向け)

M5Unifed v0.0.7では、RGB LEDには対応しておらずFastLED等の外部ライブラリが必要です。
ライブラリをインストールする を参照して"FastLED"というライブラリをインストールしてください。

シリアルモニターに"Hello World!!"と表示して、1秒おきにRGB LEDを緑点滅します。

#include <M5Unified.h> // M5Unifiedライブラリを使用可能にします。
#include <FastLED.h>   // FastLED(RGB LED)のライブラリを使用可能にします。

// RGB LEDの数を指定(M5Atom Matrixなら25)
#define NUM_LEDS 1
// RGB LEDのDATA PINを指定
#define LED_DATA_PIN 27

// グローバル変数(プログラム全体で使用する変数の定義をします。)
uint32_t count;
CRGB leds[NUM_LEDS];

// setup関数は起動時に一度だけ実行されます。
// 主に初期化処理を記述します。
void setup() {

  auto cfg = M5.config();       // M5Stack初期設定用の構造体を代入
  // configを設定する場合はここで設定
  //// cfg.external_spk = true;

  M5.begin(cfg);                                           // M5デバイスの初期化, Displayも初期化されます。
  FastLED.addLeds<WS2811, LED_DATA_PIN, GRB>(leds, NUM_LEDS);   // RGB LEDを初期設定
  FastLED.setBrightness(20);                               // 明るさを設定(20以上は熱で壊れる可能性あり。)
  Serial.println("Hello World!!");                         // シリアルモニターにHello World!!と1行表示
  count = 0;                                               // countを初期化

}

// loop関数は起動している間ずっと繰り返し実行されます。
// センサーから値を取得したり、画面を書き換える動作等をおこないます。
void loop() {

  leds[0] = CRGB::Red;                      // LED[0]を赤に設定
  FastLED.show();                           // LEDを表示
  delay(500);                               // 0.5秒待つ
  leds[0] = CRGB::Black;                    // LEDを黒に設定
  FastLED.show();                           // LEDを表示(黒なので消灯)
  delay(500);                               // 0.5秒待つ

  Serial.printf("COUNT: %d\n", count);      // シリアルにcount値を表示
  count++;                                  // カウントを1増やす。
}

コンパイル

1.デバイスをPCに接続

プログラムを書き込むデバイスをPCに接続してください。

2.ボードの選択

  • メニューから"ツール" -> "ボード" -> "M5Stack"を開いて、書き込みを行うボードを選択します。

3.ポートの選択

デバイスを接続しているポートを確認して選択します。(画像はWindowsでCOM?ポートを選んでいます。)

  • 各OSのポート名
デバイスに搭載されているチップやOSのバージョンによって名称が異なる場合があります。
OS ポート名(CH2104) ポート名(CH9102) 補足
Windows COM?? COM?? ??は数字(Windows11ではCOM1とCOM3はシステム用なので使用できません。)
MacOS /dev/tty.SLAB_USBtoUART
/dev/cu.usbserial-XXX
/dev/tty.SLAB_USBtoUART
/dev/cu.usbserial-XXX
XXXは数字
Linux /dev/ttyUSB? /dev/ttyACM? ?は数字

4.コンパイル

メニューからスケッチ -> 書き込みを実行するとコンパイル後にデバイスにプログラムを書き込みます。エラーが出た場合はオレンジ色で表示されるのでメッセージを確認して調べてください。

関連リンク

M5.begin()のパラメータ

M5.config()で設定できる項目の詳細は こちら を参照してください。

使用例

作成中

センサーの値の取り方やモーターの制御などの具体例を紹介していく予定です。

M5Unifiedへの移植ポイント(製品個別のライブラリから)

インターネットで得られる情報は製品個別のライブラリを使用しているものも多く、そのままでは使えません。その場合は下記のドキュメントを参考にしてM5Unifiedへ移植してください。

M5Unifiedへの移植ポイント

On This Page