M5Stackでは、らびやんさんの LovyanLauncher や tobozo さんの M5Stack-SD-Updater を用いることで、端末単体でプログラムファイルの入れ替えを行うことができます。
キーボード&液晶一体型の小型端末 M5Cardputer にこそ、必須のツールだと思うのですが、現状では上記ツールは M5Cardputer 対応されていません。
それらが対応されるまでのつなぎとして、最低限の機能(アプリケーションバイナリファイルを選択して再起動)だけができるプログラムを書いてみました。
プログラムはこちら。
CardputerSimpleLaucher
https://github.com/shikarunochi/CardputerSimpleLaucher
VSCode + PlatformIOでビルドして出来上がった .pio\build\m5cardputer\firmware.bin を、menu.bin 等の任意の名前に変更して、microSDカードのルートにコピーしてください。
動作の様子です。
Lovyan Launcher for Cardputer が出るまでのとりあえずで、microSD ルートの bin ファイルを選択して再起動するだけのランチャーを作ってみました。#M5Stack pic.twitter.com/85IS6lLGBo
— Nochi(ドウスル?▮) (@shikarunochi) November 5, 2023
このメニューを呼び出したいプログラム側では、最初のところで以下のように記載してください。
#include <M5Cardputer.h> #include <SD.h> #include <M5StackUpdater.h> SPIClass SPI2; void setup() { auto cfg = M5.config(); M5Cardputer.begin(cfg, true); SPI2.begin( M5.getPin(m5::pin_name_t::sd_spi_sclk), M5.getPin(m5::pin_name_t::sd_spi_miso), M5.getPin(m5::pin_name_t::sd_spi_mosi), M5.getPin(m5::pin_name_t::sd_spi_ss) ); while (false == SD.begin(M5.getPin(m5::pin_name_t::sd_spi_ss),SPI2)) { delay(500); } M5Cardputer.update(); if (M5Cardputer.Keyboard.isKeyPressed('a')) { updateFromFS(SD,"/menu.bin"); //"/menu.bin" 以外のファイル名も指定可能です。ファイル名指定しない場合は"/menu.bin"が読み込まれます。 ESP.restart(); } : (以下、アプリ側のsetupプログラムを続ける) }
[A]を押しながらリセットボタンを押すと、”/menu.bin” を読み込みます。読み込み画面が出るまで[A]を押したままにしておいてください。
起動すると microSD のルートに存在する *.bin ファイルの一覧が表示されますので、カーソルキー上下(Fn を押す必要はないです。[;]と[.]です)で、ファイル選択し、Enterで選択してください。bin ファイルをアプリケーションとして書き込みした後、端末再起動を行います。
最初は、トリガーを右上の [G0] ボタンにしようと思ってたのですが、[G0] + [リセット] だとダウンロードモードに入ってしまうのでした…。
個人用プログラムであれば、[A] を押しながらリセットでプログラムAを起動、[B]を押しながらリセットでプログラムBを起動、みたいな決めうちで作っちゃうのも便利かもしれないですね。
This is amazing work! You should join the Cardputer sub-reddit. We could use your expertise! Thank you very much for your hard work on this project.
reddit.com/r/cardputer