Espruino 1v96 でのメモ。バージョンが変わると変更されうるので、注意。
一般的なボードにコードを保存する手順はこう。
- スケッチに
E.on("init", callback);
を記述する、かつまたはonInit
という関数を定義する。 - SEND ボタンでデバイスに送信する
- コンソールで
save()
を実行する
もちろんコンソールで直接関数を定義して save()
までやってしまっても問題ない。デフォルトでは、SEND ボタンは reset()
とスケッチの実行までをやってくれる。つまり中身を分解すると次のようになる。
-
reset()
実行 - コードの定義
-
save()
実行
電源投入時は "init" イベントハンドラが順番に処理された後に、onInit
が存在すれば、それも呼び出される。
BootCode
実は上記の仕組み以外にコードを流し込む setBootCode()
という仕組みがある。電源投入時は次のようになる
- boot code を上から実行
- "init" イベントハンドラが順番に処理される
-
onInit
が存在すれば、それも呼び出される。
設定の COMMUNICATIONS > Save on Send の項目で YES とすると、スケッチの内容が boot code に設定される。
Save on Send を YES にしたり NO にしたりして実行すると、boot code 領域と、通常の領域の両方にコードが設定される。起動時に両方とも実行されるので、大混乱することに注意。混乱したら、下の初期化手順で初期化しよう。
built-in init
ボードによって環境初期化時に実行されるコードが設定されるものもある(ex: jswrap_wio_lte_init
)。これも含めると、こういう手順になっている。
- 隠された
init
を上から実行 - boot code を上から実行
- "init" イベントハンドラが順番に処理される
-
onInit
が存在すれば、それも呼び出される。
Wrap-up
以上をまとめて、結局 dump()
で確認できる。
ボードの初期化はコンソールで次を実行するのがいいだろう。
E.setBootCode() // reset() does not erase boot-code
reset()
save()
Wio-LTE は上記の初期化でもコードが残るけれど、正常な動作(jswrap_wio_lte_init
の効果)。
>dump()
pinMode(A2, "af_output", true);
pinMode(A3, "af_output", true);
digitalWrite(A15, 1);
pinMode(C8, "input_pullup");
digitalWrite(C9, 0);
digitalWrite(C10, 0);
digitalWrite(C11, 1);
digitalWrite(C12, 0);
digitalWrite(D2, 1);
おまけ
しかしまぁ Arduino と比べると消費電力は確実に大きいようで、Arduino で使っていたバッテリーでは Wio LTE の起動状態すら維持できないということが判明。なかなか強いバッテリを用意しないと駄目かも。