はじめに
290円マイコンとして話題のUIAPduino Pro Micro。
公式ではArduino IDEでの開発は可能ですが、やはりVSCode + PlatformIO (PIO) でAIを駆使してプログラムを書きたいですよね。
UIAPduino v1.4特有の「USBブートローダー経由」のbinの書き込みをPIOから実行する方法をまとめました。
前提条件
- VSCodeおよびPlatformIOがインストール済みであること
- Arduino IDEでドキュメントの指示に従ってUIAPduinoのボードマネージャが設定済みで、一度は書き込みに成功していること
※ 内部で使われている書き込みツール minichlink.exe を流用するためです。
主なハマりどころ
-
標準のPIOにボード定義がない
→ コミュニティ版のプラットフォームを導入して解決します。 -
「Image for CH32V003 too large」エラー
→ PIOが標準で生成する .elf ファイルはデバッグ情報込みで重いため、16KBの制限に引っかかります。純粋なバイナリ .bin を指定する必要があります。 -
USBブートローダーへの書き込みコマンド
→ ArduinoIDEに表示されてるコマンドを元に解決します。
手順
1: CH32プラットフォームの導入
PlatformIO Home (アリのアイコン) > Platforms > Advanced Installation を開きます。
以下のURLを入力して Install をクリックします。
https://github.com/Community-PIO-CH32V/platform-ch32v
2: PlatformIOでプロジェクトを作成する。boardは後で修正するのでArduino UNOを選んでおいてください。
3: platformio.ini の設定
プロジェクト直下の platformio.ini を以下のように変更します
[env:uiapduino_ch32v003]
platform = ch32v
board = ch32v003f4p6_evt_r0
framework = arduino
build_flags =
-DARDUINO_CH32V003
-DCH32V003
-Iinclude
extra_scripts = post:generate_bin.py
upload_protocol = custom
; ※ Arduino IDEで実行時に表示されているパスを参照してください
; ※ 標準のインストールの場合は以下でpath内の [ユーザー名] はご自身の環境に合わせて書き換えてください
upload_command = "C:/Users/[ユーザー名]/AppData/Local/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink" -w $BUILD_DIR/firmware.bin flash
4: 書き込むbinを作るためのgenerate_bin.pyをプロジェクト直下に作成
Import("env")
# objcopyを使ってelfからbinを生成する命令
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "binary",
"$BUILD_DIR/${PROGNAME}.elf", "$BUILD_DIR/${PROGNAME}.bin"
]), "Building $BUILD_DIR/${PROGNAME}.bin")
)
これでUIAPduinoをリセットボタンを押しながら接続して書き込みを実行すると書き込めます。
p.s.
upload_command = "C:/Users/[ユーザー名]/AppData/Local/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink" -w $BUILD_DIR/firmware.bin flash -b
と最後に-bをつけると勝手にリブートしてくれて実行されます。
リセットボタンを押すのが面倒の場合はこちらで。