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を起動して下記の手順でM5Unifiedをインストールします。
M5Unifiedのライブラリをインストールします。
HelloWorldかRGB LEDの点滅のプログラムコードをArduinoIDEのエディタで入力してください。
ディスプレイとシリアルモニターに"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秒待つ
}
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増やす。
}
プログラムを書き込むデバイスをPCに接続してください。
デバイスを接続しているポートを確認して選択します。(画像はWindowsでCOM?ポートを選んでいます。)
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? | ?は数字 |
メニューからスケッチ
-> 書き込み
を実行するとコンパイル後にデバイスにプログラムを書き込みます。エラーが出た場合はオレンジ色で表示されるのでメッセージを確認して調べてください。
作成中
センサーの値の取り方やモーターの制御などの具体例を紹介していく予定です。
インターネットで得られる情報は製品個別のライブラリを使用しているものも多く、そのままでは使えません。その場合は下記のドキュメントを参考にしてM5Unifiedへ移植してください。