スタックチャンのファームウェアは、スタックチャンの基本動作を提供するプログラム(ホスト)とユーザアプリケーション(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 のボタンを押すと次のように変わります。
- A ボタン(CoreS3 の場合は画面左下の領域) ... スタックチャンが 5 秒おきにランダムな方向を見る
- B ボタン(CoreS3 の場合は画面中央下の領域) ... スタックチャンが左、右、下、上を向く
- C ボタン(CoreS3 の場合は画面右下の領域) ... スタックチャンの顔の色が反転する
次のコマンドでプログラムのデバッグが可能です
# 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
> [email protected] 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
MODを描き込み後、MODを書き込みする前の挙動に戻したい時は、次のコマンドで書き込んだMODを消去することができます。
Note
コマンドを実行するとMODの領域だけでなく、フラッシュ領域全体を消去します。
Preferenceを使って設定値を書き込んでいる場合、その設定も消去されることに注意してください。
また、コマンド実行後は再度ホストの書き込みが必要になります。
$ npm run erase-flash
> [email protected] erase-flash
> esptool.py erase_flash
esptool.py v4.8.dev4
Found 2 serial ports
Serial port /dev/cu.usbserial-01F05597
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting.........
Detecting chip type... ESP32
Chip is ESP32-D0WDQ6-V3 (revision v3.0)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 8c:aa:b5:81:6c:1c
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 25.4s
Hard resetting via RTS pin...
- mods/README_ja.md: 同梱のサンプル MOD の紹介です。
- API: スタックチャンの API ドキュメントです。