
スタックチャンのファームウェアは、スタックチャンの基本動作を提供するプログラム(ホスト)とユーザアプリケーション(MOD)から構成されます。 一度ホストを書き込んでしまえば、ユーザアプリケーションのインストールは短時間で終わるため高速な開発が可能です。 最初にホストを書き込み、必要に応じて MOD の書き込みを行います。
ホストと MOD はそれぞれ、設定用のマニフェストファイル(manifest.json)、JavaScript モジュールのソースコード、画像や音声などのリソースから構成されます。 マニフェストファイルでは、JavaScript モジュールの名前と場所(modules)や、モジュール内から参照できる設定(config)などを含みます。 また、マニフェストファイルは他のマニフェストファイルを含める(include)こともできます。
全ての設定項目はModdable の公式ドキュメント(英語)を参照してください。
スタックチャンが使うモータの種類やピンアサインなどをマニフェストファイルから変更できます。
ユーザが変更する設定はstack-chan/firmware/stackchan/manifest_local.jsonにまとまっています。
"config"キーの配下に次のような設定が書けます。
| キー | 説明 | 使用可能な値 |
|---|---|---|
| driver.type | モータドライバの種類 | “scservo”, “rs30x”, “pwm”, “none” |
| driver.panId | パン軸(首の横回転)に使うシリアルサーボの ID | 1~254 |
| driver.tiltId | チルト軸(首の縦回転)に使うシリアルサーボの ID | 1~254 |
| driver.offsetPan | パン軸のオフセット | -90~90 |
| driver.offsetTilt | チルト軸のオフセット | -90~90 |
| tts.type | TTS の種類 | “local”, “voicevox” |
| tts.host | TTS がサーバと通信する場合のホスト名 | “localhost”, “ttsserver.local” などの文字列 |
| tts.port | TTS がサーバと通信する場合のポート番号 | 1~65535 |
また、"include"キーの配下にリスト形式で他のマニフェストファイルのパスを指定できます。
紅木タカオ氏(@mongonta0716)が頒布する スタックチャン組み立てキット M5Bottom 版を本リポジトリのファームウェアで動かすための設定例です。 M5Bottom 版は本リポジトリと違って専用基板を使わず、M5Bottom のポートとサーボを接続します。
M5Stack Core2 の Port.A(M5Stack Core2 本体側面の赤い穴)を使う場合:
manifest_local.json
{
// ...
"config": {
"driver": {
"type": "pwm",
"pwmPan": 33,
"pwmTilt": 32
}
}
}
M5Stack Core2 の Port.C を使う場合:
manifest_local.json
{
// ...
"config": {
"driver": {
"type": "pwm",
"pwmPan": 13,
"pwmTilt": 14
}
}
}
M5Stack Basic の Port.C を使う場合:
manifest_local.json
{
// ...
"config": {
"driver": {
"type": "pwm",
"pwmPan": 16,
"pwmTilt": 17
}
}
}
ファームウェア導入後、スタックチャンが左右に首振りを行うようであれば成功です。
参考: スタックチャン M5GoBottom 版のファームウェアについて | M5Stack 沼人の日記
2023 年 3 月現在、Moddable は SD Card のドライバが実装されていないため、音声や画像などのリソースは mod に含めてコンパイルして書き込む形になります。 多量の音声を含む場合、スタックチャンのデフォルトのパーティションサイズである 4MB を上回って mod が書き込めない場合があります。
最近の M5Stack は 16MB の Flash を備えています。
その場合はstackchan/manifest_8mb_flash.jsonをインクルードすることで、
mod を書き込むパーティションの容量が大幅に増加します。
{
"include": ["./manifest_8mb_flash.json"]
}
前述の通りスタックチャンのファームウェアは基本プログラム(ホスト)とユーザアプリケーション(MOD)から構成されます。 次のコマンドで基本プログラム(ホスト)の書き込みを行います。
コマンドにsudoをつける必要はありません。
# M5Stack Basic/Gray/Fireの場合
$ npm run build
$ npm run deploy
# M5Stack Core2の場合
$ npm run build --target=esp32/m5stack_core2
$ npm run deploy --target=esp32/m5stack_core2
# M5Stack CoreS3の場合
$ npm run build --target=esp32/m5stack_cores3
$ npm run deploy --target=esp32/m5stack_cores3
ビルドしたプログラムは$MODDABLE/build/ディレクトリ配下に保存されます。
正しく書き込めていれば起動から数秒後にスタックチャンの顔が表示されます。 M5Stack のボタンを押すと次のように変わります。
次のコマンドでプログラムのデバッグが可能です
# M5Stack Basic/Gray/Fireの場合
$ npm run debug
# M5Stack Core2の場合
$ npm run debug --target=esp32/m5stack_core2
# M5Stack CoreS3の場合
$ npm run debug --target=esp32/m5stack_cores3
このコマンドはModdableのデバッガxsbugを開き、M5Stackと接続します。

xsbugを使うとログの確認やブレークポイントの設定(プログラムの特定行で一時停止する)、ステップ実行(プログラムを1行ずつ実行する)などができます。
xsbugの詳しい使い方は公式ドキュメント(英語)を参照してください。
次のコマンドでユーザアプリケーション(MOD)の書き込みを行います。
コマンドにsudoをつける必要はありません。
# M5Stack Basic/Gray/Fireの場合
$ npm run mod [modのマニフェストファイルのパス]
# M5Stack Core2の場合
$ npm run mod --target=esp32/m5stack_core2 [modのマニフェストファイルのパス]
# M5Stack CoreS3の場合
$ npm run mod --target=esp32/m5stack_cores3 [modのマニフェストファイルのパス]
例: mods/look_aroundをインストールする
$ npm run mod ./mods/look_around/manifest.json
> stack-chan@0.2.1 mod
> mcrun -d -m -p ${npm_config_target=esp32/m5stack} ${npm_argument} "./mods/look_around/manifest.json"
# xsc mod.xsb
# xsc check.xsb
# xsc mod/config.xsb
# xsl look_around.xsa
Installing mod...complete