M5STACK CARDPUTER v1.1

M5Stack、M5StackCardputer v1.1
前々から気になっていたM5Stack。気になっていたものの手を出すまでには至らず。たまたま見かけた記事でM5StackCardputer v1.1を見かける。小さくて、キーボードついてて、ディスプレイもついてる。魅力の塊だったので即購入。

プログラミングする方法を探る
手には入れたが使い方はわからない。WiFiの設定はしてみた。直近の目標はこいつでプログラムを動かしてみる事。開発に必要な環境を調べる。

ArduinoIDEとかESP-IDFとかPlatformIOとか
手軽にさわるならArduinoIDE?でも、ガチでやるならESP-IDF?正直、よくわからないけどとりあえず使ってみたい。いろいろ調べて見るとPlatformIOなんてものも出てきた。ArduinoとESP-IDFをプロジェクト毎に選べたりする?どっちも使えるってこと?よくわからないけどArdinoとESP-IDFを選べない自分はPlatformIOにしようと思う。

PlatformIOのインストール
VScodeで使えるのね。拡張機能でインストールすればいいらしい。

VScodeに新しいアイコンが増えた

家アイコンを押すとPlatformIOの画面が開く
家の形をしたアイコンがVScodeの下部に。
PIO HOMEが開いた。

プロジェクトの新規作成
Create New Projectを押してプロジェクトを作成する。
Project Wizardが開いて、プロジェクト名と基板やフレームワークを選べる。
どうやら Arduino や ESPIDF はフレームワークってことなのか。

プロジェクト作成中

準備が出来たっぽい

main.cpp
srcディレクトリを見てみるとmain.cppがある。中にはコードが書かれている。
とりあえずbuildしてみる。
buildはVSCodeの下部にあるチェックマークっぽい。
メッチャエラー

エラーの原因はウィルス対策ソフト
ウィルス対策ソフトを無効にしたら正常にbuildが完了した。
一度成功すると、ウィルス対策ソフトを起動してもbuildが成功する。なぜだかわからないけどこの辺は追々調べてみる。

ウィルス対策ソフトを有効にすると、その後も何度かエラーに遭遇。
対象のディレクトリを除外設定。その後はエラーが出ていない。
C:/Users/XXXX/.platformio

ダウンロードモード
よくわからないけどプログラムを流すときにはデバイスをダウンロードモードで接続することになるらしい。側面のG0Btnを押しながらUSBをさせばいいらしい。本体の電源はOFFのまま。
Windowsからデバイスを認識する音が聞こえた。
PlatformIOからプログラムを流すときはアップロードボタンを押す。
いっぱいエラーが出る。

プログラムを書き換えて
#include <M5Cardputer.h>
void setup() {
M5Cardputer.begin();
M5Cardputer.Display.print("My Name is Kazuki Niibori.");
}
void loop() {
// キー入力を取得して表示するなどもできるよ
}
として、再度アップロード。NG。buildもNG。

ライブラリがダメらしい
ChatGPTと相談したらライブラリがダメらしい。自分のデバイスにあったライブラリを選択する。
platformIOのLibrariesメニューから必要なライブラリを選択してインストールする。
- M5Unified
- M5GFX
- M5CardPuter
の3つをインストール。
[env:m5stack-stamps3]
platform = espressif32
board = m5stack-stamps3
framework = arduino
lib_deps =
m5stack/M5Unified@^0.2.5
m5stack/M5GFX@^0.2.6
m5stack/M5Cardputer@^1.0.3
下は変更前のplatformio.in。m5stack/M5Stackの行は手動で消した。
[env:m5stack-stamps3]
platform = espressif32
board = m5stack-stamps3
framework = arduino
lib_deps =
m5stack/M5Stack@^0.4.6

再度アップロード
再度ダウンロードモードで接続してプログラムをアップロード。
Terminal的にはSuccess。
一切success感ないけど。デバイスのUSBを抜いて電源を入れてみると
動いた。
これは嬉しい。
でも、元々入っていた素敵なアプリ達が…何も遊んでないうちに消えた。

ESP-IDFを使ってみたい
なんとなくArduinoを使ってサンプルを動かしてみたけど、じゃあ、ESP-IDFを使ったらどうなるんだろう。
いざ、文献を探してみたけどなかなか見当たらず。結局ChatGPTに相談することになった。

freeRTOS と タスク
色々調べたりコードをみたりしていると freeRTOS や Task という言葉がよく出てくる。この辺に違いがありそうな予感。Arduinoではあまり見なかった。

Arduino も ESP-IDF も
どちらもフレームワークなので、結局作り方の違いってことか。
- ESP-IDFはfreeRTOSとタスクを使ってプログラミングする。なんとなく嫌いじゃない。
- ArduinoはfreeRTOSとかタスクとか気にせずプログラミングする。ESP-IDFのように細かい事は気にする必要がないから書きやすい。逆を言えば、細かい事は隠れてしまっているので制御出来ない部分もでてくる。
M5StackはマイコンがESP32
ESP32 は Espressif Systems が開発していて、Espressif Systems が提供してくれているフレームワークがESP-IDF。
ArduinoをつかってESP32の開発をする場合、Espressif Systemsが提供するArdinoIDE向けライブラリを使うことでそれが実現出来る。
ESP-IDFの記述よりもArduinoの記述の方がわかりやすいし、入門しやすいよな。文献も多くなるよね。

ESP-IDF版
ESP-IDF版のプログラムを試すが、やや手間がかかった。
とりあえずFreeRTOSとかそういうのは気にせず、画面に文字が出るプログラム。シンプルなものをChatGPTと相談しながら作成。
#include "M5Cardputer.h"
extern "C" void app_main(void){
M5Cardputer.begin();
M5Cardputer.Display.setCursor(0, 0);
M5Cardputer.Display.setTextColor(WHITE);
M5Cardputer.Display.setTextSize(2);
M5Cardputer.Display.setTextWrap(true);
M5Cardputer.Display.print("My Name is Kazuki Niibori. esp-idf version is ");
}
もともとmain.cがsrcに用意されていたがmain.cppに作り替えた。
プログラム的にはこれで十分。でも、PlatformIOの設定を正しく行う必要がありこのままだとbuildエラーになる。

platformio.ini と sdkconfig.defaults
platformio.ini
M5Cardputer.h
を使うためにはplatformio.iniのframeworkにarduino
も追加する必要がある。
[env:m5stack-stamps3]
platform = espressif32
board = m5stack-stamps3
framework = espidf, arduino
monitor_speed = 115200
lib_deps =
m5stack/M5Cardputer@^1.0.3
m5stack/M5GFX@^0.2.6
sdkconfig.defaults
更にbuildしても以下のようなエラーが出る。
esp32-arduino requires CONFIG_FREERTOS_HZ=1000 (currently 100)
esp32-arduinoを使うためにはCONFIG_FREERTOS_HZの設定を1000する必要があって、現在は100になっている。ってことのよう。
詳しいことは後ほど調べるとして…
sdkconfig.defaultsというファイルを作成して以下の通り記述
CONFIG_FREERTOS_HZ=1000
※ プロジェクトのディレクトリにはsdkconfig.m5stack-stamps3
というファイルも出来ていて、ここにも同じ記述がある。このファイルにはCONFIG_FREERTOS_HZ=100
の記述が残っていたためsdkconfig.defaultsの内容が反映されなかった。試しにファイルを別名に変えてbuildするとCONFIG_FREERTOS_HZ=1000
が記載されたsdkconfig.m5stack-stamps3が新しく作成された。