Open21

M5STACK CARDPUTER v1.1

NiiboriNiibori

M5Stack、M5StackCardputer v1.1

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

NiiboriNiibori

プログラミングする方法を探る

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

NiiboriNiibori

ArduinoIDEとかESP-IDFとかPlatformIOとか

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

NiiboriNiibori

家アイコンを押すとPlatformIOの画面が開く

家の形をしたアイコンがVScodeの下部に。
家の形をしたアイコン

PIO HOMEが開いた。
PIO HOME

NiiboriNiibori

プロジェクトの新規作成

Create New Projectを押してプロジェクトを作成する。
Create New Project

Project Wizardが開いて、プロジェクト名と基板やフレームワークを選べる。

Project Wizard

どうやら Arduino や ESPIDF はフレームワークってことなのか。

NiiboriNiibori

main.cpp

srcディレクトリを見てみるとmain.cppがある。中にはコードが書かれている。

とりあえずbuildしてみる。
buildはVSCodeの下部にあるチェックマークっぽい。

build

メッチャエラー
error

NiiboriNiibori

エラーの原因はウィルス対策ソフト

ウィルス対策ソフトを無効にしたら正常にbuildが完了した。

一度成功すると、ウィルス対策ソフトを起動してもbuildが成功する。なぜだかわからないけどこの辺は追々調べてみる。

NiiboriNiibori

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

C:/Users/XXXX/.platformio

NiiboriNiibori

ダウンロードモード

よくわからないけどプログラムを流すときにはデバイスをダウンロードモードで接続することになるらしい。側面のG0Btnを押しながらUSBをさせばいいらしい。本体の電源はOFFのまま。

Windowsからデバイスを認識する音が聞こえた。

PlatformIOからプログラムを流すときはアップロードボタンを押す。

いっぱいエラーが出る。

NiiboriNiibori

プログラムを書き換えて

main.cpp
#include <M5Cardputer.h>

void setup() {
  M5Cardputer.begin();
  M5Cardputer.Display.print("My Name is Kazuki Niibori.");
}

void loop() {
  // キー入力を取得して表示するなどもできるよ
}

として、再度アップロード。NG。buildもNG。

NiiboriNiibori

ライブラリがダメらしい

ChatGPTと相談したらライブラリがダメらしい。自分のデバイスにあったライブラリを選択する。
platformIOのLibrariesメニューから必要なライブラリを選択してインストールする。

Libraries

  • M5Unified
  • M5GFX
  • M5CardPuter

の3つをインストール。

platformio.ini
[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の行は手動で消した。

platformio.ini(変更前)
[env:m5stack-stamps3]
platform = espressif32
board = m5stack-stamps3
framework = arduino
lib_deps = 
	m5stack/M5Stack@^0.4.6
NiiboriNiibori

再度アップロード

再度ダウンロードモードで接続してプログラムをアップロード。
Terminal的にはSuccess。

一切success感ないけど。デバイスのUSBを抜いて電源を入れてみると

動いた。

これは嬉しい。

でも、元々入っていた素敵なアプリ達が…何も遊んでないうちに消えた。

NiiboriNiibori

ESP-IDFを使ってみたい

なんとなくArduinoを使ってサンプルを動かしてみたけど、じゃあ、ESP-IDFを使ったらどうなるんだろう。

いざ、文献を探してみたけどなかなか見当たらず。結局ChatGPTに相談することになった。

NiiboriNiibori

freeRTOS と タスク

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

NiiboriNiibori

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の記述の方がわかりやすいし、入門しやすいよな。文献も多くなるよね。

NiiboriNiibori

ESP-IDF版

ESP-IDF版のプログラムを試すが、やや手間がかかった。
とりあえずFreeRTOSとかそういうのは気にせず、画面に文字が出るプログラム。シンプルなものをChatGPTと相談しながら作成。

main.cpp
#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エラーになる。

NiiboriNiibori

platformio.ini と sdkconfig.defaults

platformio.ini

M5Cardputer.hを使うためにはplatformio.iniのframeworkにarduinoも追加する必要がある。

platformio.ini
[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になっている。ってことのよう。

詳しいことは後ほど調べるとして…
https://docs.espressif.com/projects/esp-idf/en/v3.2.5/api-reference/kconfig.html#config-freertos-hz

sdkconfig.defaultsというファイルを作成して以下の通り記述

sdkconfig.defaults
CONFIG_FREERTOS_HZ=1000

※ プロジェクトのディレクトリにはsdkconfig.m5stack-stamps3というファイルも出来ていて、ここにも同じ記述がある。このファイルにはCONFIG_FREERTOS_HZ=100の記述が残っていたためsdkconfig.defaultsの内容が反映されなかった。試しにファイルを別名に変えてbuildするとCONFIG_FREERTOS_HZ=1000が記載されたsdkconfig.m5stack-stamps3が新しく作成された。