
以前の知られていた方法ではできなくなっていたので、M5Stack UnitV (UnitV K210 AI Camera)のファームウェアを再ビルドする手順をまとめてみました。
あらすじ
ずっと積んでいたUnitV-M12で遊ぼうと思ったところ、UnitVのファームウェア(MaixPy)をカスタマイズして再ビルドする必要が出てきました。ネットで調べてみると、すぐに先人たちの有益な情報がいくつか見つかりました。
M5UnitVの開発環境をセットアップする
(他のサイトもだいたい書いてあることは同じでした)
しかし、実際にこの通りにやってみるとエラーで先に進めません。必要なファイルも無くなっていたりします。さすがに4~5年も経つと変わってしまうのは仕方がないですね。でもせっかくやる気を出したところなので、なんとかできないか調べてみました。
環境
以下の環境で使用することを想定しています。
・Ubuntu 22 (WSLを使用)
・Pythonはuv環境を使用
必要な環境のセットアップ
Pythonのグローバルの環境をいじられたくなかったので、普段使っているuvを使用してます。このへんはcondaとかvenvとかお好みでどうぞ。
まずはuvをインストール。一旦ログアウトして再度ログインします。
curl -LsSf https://astral.sh/uv/install.sh | sh
再ログイン
コンパイルに必要なソフトをインストール。
sudo apt update
sudo apt install build-essential cmake
MaixPyをcloneします。ここが今までと違います。K210ではMaixPy-v1になるそうです。
git clone https://github.com/sipeed/MaixPy-v1.git
cd MaixPy-v1
git submodule update --init --recursive
venv環境を作って必要なパッケージをインストールします。
uv venv
source .venv/bin/activate
uv pip install -r requirements.txt
kendryte-toolchainをインストールします。
wget http://dl.cdn.sipeed.com/kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz
sudo tar -Jxvf kendryte-toolchain-ubuntu-amd64-8.2.0-20190409.tar.xz -C /opt
ls /opt/kendryte-toolchain/bin
コンパイルエラーを避けるために、MaixPyにパッチをあてます。根本的解決策ではないと思いますが、よくわからないので。
curl -s "https://gist.githubusercontent.com/kaz-mac/8ac0b9440adb74d428d068db58677f06/raw/841cee8147890fb275fe9ca40ec3ee75648c3edd/patch.txt" > patch.txt
patch -p0 < patch.txt
カスタムファームウェアのビルド
M5StickVのプロジェクトフォルダに移動して設定メニューを起動します。M5StickVとありますが、UnitVでもこれでいいみたいです。たぶん。
cd projects/maixpy_m5stickv
uv run project.py menuconfig

実行するとメニューが表示されます。今回は最低限必要なものだけを残して不要な機能を外します。
Components configuration –> Micropython configurations –> Modules configurations を開き、以下の2つを選択、
・Enable MaixPy IDE protocol support
・Enable video module
Sで保存→ENTER x2、Qで終了。

ビルドします。先ほどパッチをあてたので、ここでエラーは出なくなったと思います。
uv run project.py build
ls -l build/maixpy.bin
ファイルができたら、Windowsからアクセスできるフォルダーにコピーします。今回はダウンロードフォルダにコピーします。(xxxxxは自分のユーザー名)
cp build/maixpy.bin /mnt/c/Users/XXXXX/Downloads/maixpy_custom.bin
カスタムファームウェアの書き込み
kflash_guiでファームウェアをUnitVに書き込みます。私はM5Stackのドキュメントページのリンクからダウンロードしましたが、新しいバージョンが出てるみたいですね。今気づきました。

書き込みが完了したら起動するかテストしてみましょう。
MaixPy IDEで確認
MaixPy IDEを起動します。私はM5Stackのドキュメントページのリンクからダウンロードしました。ここからもダウンロードできるっぽい。期待通り空きメモリが増えているか、以下のスクリプトを実行してみます。
import KPU as kpu
print(kpu.memtest());

空きメモリが 4248KB になってますね。
ちなみにデフォルトのファームウェアだと、

空きメモリは 2956KB でした。
最新ファームウェアで高速に処理したい
デフォルトでインストールされているファームウェアは v5.1.2 のようですが、これをv6にするとフレームレートが早くなるという情報があったので試してみました。ダウンロードはここかな?このサイト、アクセスするとファイルが表示されなくてerrorと出てるんですが、リロードするとファイルが表示されます。v0.6.3_2のm5stickv用をダウンロードしてみます。実験に使用したプログラムは、こちら。緑色の領域を探すものです。
import sensor
import image
import lcd
import time
lcd.init()
clock = time.clock()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
green_threshold = (0, 80, -70, -10, -0, 30)
while True:
img=sensor.snapshot()
clock.tick()
blobs = img.find_blobs([green_threshold])
if blobs:
for b in blobs:
tmp=img.draw_rectangle(b[0:4])
tmp=img.draw_cross(b[5], b[6])
c=img.get_pixel(b[5], b[6])
lcd.display(img)
fps = clock.fps()
print("%2.1f fps" % fps)
デフォルト
MicroPython v0.5.0-98-g7ec09ea22-dirty on 2020-07-21; Sipeed_M1 with kendryte-k210
デフォルトでは緑色が写ってない状態のときに 15fps くらいでした。(MaixPy IDEの右下の表示がFPS 8.6となっているけど何これ?)
最新
MicroPython v0.6.2-89-gd8901fd22 on 2024-06-17; Sipeed_M1 with kendryte-k210
最新のファームウェアにしたら 42fps まで上がりました!すげー!(IDE右下はFPS 8.9 ??)
リビルドしたやつ
MicroPython v0.6.2-89-gd8901fd22-dirty on 2025-07-18; Sipeed_M1 with kendryte-k210
ちなみに先ほど私がリビルドしたファームウェアだと30fpsくらい。そしてなぜかフリーズしてしまいます。試しにModules configurationsをデフォルトの状態でリビルドしたらフリーズしませんでした。他にも必須のものがあったかのもしれません。
このへんも気になります。
UnitV高速化の術 その1
試したところ、最新ファームウェア dual_buff=True で同じくらい、Falseで26fpsくらいでした。未指定だと30fpsくらい。あれ、さっきよりスピードが落ちてる。デフォルトはどっちなんだ!? よくわからなくなりましたが、とりあえずメモリに余裕があるならダブルバッファを有効にしておいた方がいいという感じですね。
こんなことする必要はなかった!?
ここまで書き終わったところ、衝撃の事実を知ってしまいました。
>> MaixHub Online CompileでMaixPyをカスタマイズする
MaixHub Online Compileは、MaixPyファームウェアのカスタマイズをWEB上で行い、クラウド上でビルドしてダウンロードすることができる画期的なサービスです。
え?今までの苦労は何だったの??
MaixHub
https://maixhub.com/
まじかー!と思って見に行ったらその機能は見つかりませんでした。場所が変わったのか、終了したのか…。
まぁ、それより、あれだけGoogleで調べていたのに、この情報が見つけられなかった自分にショックを受けましたw。変化が早いものをGoogle検索で追うのは難しいですね。でもAIでこういった調査しても、バージョンの違いとか、時系列の流れをうまく把握できないことが多いんですよね。AIは条件を指定しないと、古い情報と新しい情報を同じ時間軸で考えようとする傾向がある気がします。