はじめに
今回、M5Stack の Tab5 を「Platform IO + M5Unified」で扱ってみる、という話です。
先に結果から示すと、以下を試すための情報になります。
この内容は、直近では以下の記事で書いていたものをベースにしつつ、また公式の Tab5用の情報を使いつつ、進めたものになります。
●公式の手順を見ながら VS Code + Platform IO + M5Unified での開発を少し試す(ATOMS3R を使う) - Qiita
https://qiita.com/youtoy/items/6b690fca202fb36c11f0
実際に進めた内容
それでは、冒頭に示した動画の内容を実現するために進めた、Platform IO + M5Unified を使った Tab5 の開発の流れについて書いていきます。
公式情報
今回、参照した公式情報の 1つは以下のとおりです。
●Tab5
https://docs.m5stack.com/ja/core/Tab5
以下も、進めたい内容によっては参照することになりそうな公式情報ですが、今回は最終的に利用せずとなりました。
●m5stack/M5Unified: Unified library for M5Stack series
https://github.com/m5stack/M5Unified
●m5stack/M5GFX: Graphics library for M5Stack series
https://github.com/m5stack/M5GFX
今回の記事で省略している内容
今回、自分が過去に M5Stack のデバイスを使った開発に用いた環境を利用したため、PC に M5Stack のデバイスを接続すると、デバイスが PC に認識される状態になっています。
また、VS Code で Platform IO が使える状態となっています。
それらの手順の説明は、今回は省略しています。これらは検索して情報を探すと、たくさんの情報が見つかるかと思いますので、公式情報や他の方が書いた記事をご参照ください。
Platform IO での開発でポイントになる部分
全体の流れに入っていく前に、Platform IO を使った Tab5 の開発で、今回のポイントとなった点を先に書いておきます。
具体的には、Platform IO で platformio.ini に設定する内容です。
platformio.ini での設定に関する情報の参照元
Tab5用に platformio.ini で設定する内容について、公式の Tab5 のページを見ると、その内容が書いてありました。
具体的には、以下の部分です。
[env:esp32p4_pioarduino]
platform = https://github.com/pioarduino/platform-espressif32.git#54.03.20
upload_speed = 1500000
monitor_speed = 115200
build_type = debug
framework = arduino
board = esp32-p4-evboard
board_build.mcu = esp32p4
board_build.flash_mode = qio
build_flags =
-DBOARD_HAS_PSRAM
-DCORE_DEBUG_LEVEL=5
-DARDUINO_USB_CDC_ON_BOOT=1
-DARDUINO_USB_MODE=1
lib_deps =
https://github.com/M5Stack/M5Unified.git
https://github.com/M5Stack/M5GFX.git
この設定を、この後の流れで使います(※ 一部、今回の内容を試すのには不要な部分がありますが、記載したままで問題ないものはそのままにしています)。
プロジェクトの作成と platformio.ini の設定
それでは、Platform IO でのプロジェクトの作成や platformio.ini の設定を進めていきます。
プロジェクトの作成
VS Code の左側のメニューで、Platform IO のアイコンを選び、そこに出てくる「Create New Project」ボタンを押します。
そうすると、Platform IO のホームがタブで開くので、その中の「Quick Access > New Project」を選びます。
プロジェクト作成のウィザードが立ち上がりますが、プロジェクト名は自分で決めたものにします(自分は「tab5test」にしました)。また、Board の部分は Tab5 は出てこず、後で設定を書きかえるので、適当なものを選んでください(自分は「M5Stack Core2」をひとまず選びました)。
他はデフォルト設定のまま、右下の「Finish」ボタンを押します。
Tab5用の platformio.ini の設定
そうすると、エクスプローラーでプロジェクトのファイル一式が開いた状態になります。その中の「platformio.ini」を選んでください。
自分の場合、今は先ほどの「Board」の選択で「M5Stack Core2」を仮で選んだので、それに関する設定が書かれています。
ここを、上で書いた Tab5 用の設定に置きかえます。置きかえ後の platformio.ini は以下となりました。
お試し用のコードを書く
あとは、お試し用のコードを書いていきます。エクスプローラーの中の main.cpp の内容を見ると、ひとまずデフォルトで書かれた内容があります。
これを、M5Unified を使ったテスト用のコードに置きかえます。具体的には、以下の M5Stack公式のページに書かれたものを元に、今回のお試し用の内容を作りました。
●M5Unifiedライブラリの始め方
https://docs.m5stack.com/ja/arduino/m5unified/helloworld#%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E5%85%A5%E5%8A%9B
以前の記事では、以下のサンプルそのままのものを使ったのですが、今回は少しだけ表示関連の部分に手を加えて使います。
#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秒待つ
}
今回用のコードの内容
今回用のコードの内容は、具体的には以下のとおりです。Tab5 の画面が大きいので、フォントサイズを大きくしたり、表示位置をずらしてみたりしました。
#include <M5Unified.h>
uint32_t count;
void setup() {
auto cfg = M5.config();
M5.begin(cfg);
M5.Display.setTextSize(10);
M5.Display.print("Hello World");
Serial.println("Hello World");
count = 0;
}
void loop() {
M5.Display.setCursor(100, 200);
M5.Display.printf("COUNT: %d\n", count);
Serial.printf("COUNT: %d\n", count);
count++;
delay(1000);
}
ライブラリの追加(M5Unified の追加)
あとは、ライブラリを追加します。コード冒頭に #include <M5Unified.h>
という部分がありますが、M5Unified の追加が必要です。
そのために、Platform IO のメニューの「Libraries」から「M5Unified」を検索し、先ほど作ったプロジェクトに追加します。
上記のように M5Unified が出てきたら、それを選びます。その後、以下の「Add to Project」を押します。
その後の画面では、ライブラリを追加する対象プロジェクトとして、先ほど作ったプロジェクトを選びます(自分の場合は「tab5test」という名前にしたもの)。
そして、画面右下にある「Add」ボタンを押せば OK です。
ビルドと端末への書き込み
あとは、ビルドと端末への書き込みです。
画面下にある、以下の部分を使います。以下の赤矢印で示したほうを押すとビルドが始まります。そのビルドが完了したという表示が出た後に、この度は以下の黄色矢印で示したほうを押してデバイスへの書き込みを行います。
書き込みが完了したら、冒頭の動画や以下で示したように、画面上に文字表示や時間のカウントをする表示が出ます。
おわりに
今回、M5Stack の Tab5 を公式情報をもとにして、Platform IO + M5Unified を使った開発を試しました。
今後は、シンプルな文字表示以外のものや、タッチ操作を使うようなものも試していければと思います。
その他
「購入時に Tab5 に入っていたファームウェア」を復元したくなった時のために、それについて書かれた公式ページをメモしておきます。
●Tab5 ファクトリー ファームウェアの復元
https://docs.m5stack.com/ja/guide/restore_factory/m5tab5
ちなみに、M5Burner を使った手順になるようです。