Skip to content

Latest commit

 

History

History
239 lines (175 loc) · 9.75 KB

flashing-firmware_ja.md

File metadata and controls

239 lines (175 loc) · 9.75 KB

プログラムのビルドと書き込み

English

スタックチャンのプログラム構成について

ホストと MOD

スタックチャンのプログラム構成

スタックチャンのファームウェアは、スタックチャンの基本動作を提供するプログラム(ホスト)とユーザアプリケーション(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"キーの配下にリスト形式で他のマニフェストファイルのパスを指定できます。

設定例: スタックチャン M5Bottom 版キットを動かす

紅木タカオ氏(@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 沼人の日記

設定例: mod の書き込み領域を増やす

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

xsbugを使うとログの確認やブレークポイントの設定(プログラムの特定行で一時停止する)、ステップ実行(プログラムを1行ずつ実行する)などができます。 xsbugの詳しい使い方は公式ドキュメント(英語)を参照してください。

(オプション)ユーザアプリケーション(MOD)の書き込み

次のコマンドでユーザアプリケーション(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 ドキュメントです。