akira.kei が 2026年03月14日23時49分39秒 に編集
コメント無し
本文の変更
[次の記事>](https://elchika.com/article/360370e6-604d-417a-afea-192728699e92/) ## 最初に この記事の初めに書いておくが、公式にはUIAPduinoはmacで使うのは難しそうだよと[公式ページ](https://www.uiap.jp/uiapduino/pro-micro/ch32v003/v1dot4)に示されているように、macは開発の前提になっていない。というか全般的に「使えたら使ってね」みたいなトーンでもある。だから公式には**使いこなせないのは使う人が悪い**のだ。こんなマニアックなんだから[百均の棚には並ばない](https://fabscene.com/new/interview/uiapduino-290yen-mass-production-interview/)んじゃないかな。そもそも「100円で売る」のと「それこそ百戦錬磨の選び抜かれた低価格商品」とは同じじゃない。 ## UIAPduinoをmacで試す 290円で買える[UIAPduino Pro Micro CH32V003 V1.4](https://www.uiap.jp/uiapduino/pro-micro/ch32v003/v1dot4)はなかなか良い開発ボードなのだが、安いけどマニアックだよね、という感じになってしまっている。Arduino IDEを使う前提になっているのだから「Arduinoみたいに使える」ことを勝手に期待しちゃうのだが残念ながらそうではない。特に「ずっと繋ぎっぱなしで書き換えができる上にそのままシリアルモニタできる」という手軽さは無い。だがまぁ[2026/03/14現在¥4,710のイタリアン謹製Uno](https://akizukidenshi.com/catalog/g/g107385/)と比べちゃうのは酷だ。 ## macで試される俺様 基本的に[公式ページ](https://www.uiap.jp/uiapduino/pro-micro/ch32v003/v1dot4)から辿れる[macで使えるようにした記事](https://qiita.com/tomorrow56/items/6cae8ddc7470cb64ad7d)の内容とほとんど同じなのだが、[先に紹介されたページ](https://qiita.com/NWLab/items/82bcfd8d3300df087445)だけ読んで、これを読まずに苦労したのでここに書いておきたい。 Arduinon IDEは普通にインストールできるとして、[追加のボードマネージャ](https://github.com/YuukiUmeta-UIAP/board_manager_files/raw/main/package_uiap.jp_index.json)を指定すれば、一見、環境をインストールできたみたいに見える。いつものBlinkの冒頭に```#define LED_BUILTIN 2```を追加して、「検証」ボタンを押すと普通にコンパイルできる。 一方で、ボードに書き込もうとするとコンパイルの後のメッセージとしてこう出る。 ``` Failed uploading: cannot execute upload tool: fork/exec /Users/akira.kei/Library/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink: exec format error ``` この場合の「exec format error」とは**実行ファイルがmac用じゃない**ということらしい。公式ページにもさらっと以下のように書いてある。つまり「**mac遣いならソースからビルドなんて普通にできるでしょ知らんけど**」ということだ。 ``` minichlinkが原因で書き込みできない場合は、環境に合わせてビルドして~/.arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlinkを置き換えます。 ``` ## 良い本を見つけてある [CH32V003を使うと決めてから見つけた良い技術書](https://www.switch-science.com/products/10547?_pos=1&_sid=f84b6e57a&_ss=r)があるので、これを見て「minichlinkのソースはch32funにある」ことは知っていた。従って、minichlink(ソース)のダウンロードなどお手のものだ(強がり ``` % git clone https://github.com/cnlohr/ch32fun.git Cloning into 'ch32fun'... remote: Enumerating objects: 12100, done. remote: Counting objects: 100% (991/991), done. remote: Compressing objects: 100% (380/380), done. remote: Total 12100 (delta 780), reused 636 (delta 611), pack-reused 11109 (from 4) Receiving objects: 100% (12100/12100), 12.06 MiB | 4.53 MiB/s, done. Resolving deltas: 100% (7502/7502), done. ``` [macに対するch32fun以外の開発環境インストール](https://github.com/cnlohr/ch32fun/wiki/Installation#macos)については[さらに別のページが紹介されている](https://github.com/riscv-software-src/homebrew-riscv)のだが、タライ回され感が半端ない。いずれにしろどんどんbrewしていくしかないわけで、ただでさえ空き容量の少ない安いmac miniには酷な感じになってくる。 ## minichlinkをソースからビルドしちゃう俺様 ビルド自体はch32funディレクトリの下にあるminichlinkで```make all```するだけでいいから簡単だ。 ``` % cd ch32fun/minichlink % make all % file minichlink minichlink: Mach-O 64-bit executable arm64 % sudo cp minichlink /usr/local/bin % minichlink -i VID:0x1209, PID:0xb003 Error: Could not initialize any supported programmers ``` うん繋がらないな。macOSのシステム設定→一般→情報、の一番下にある「システムレポート...」を開き、左のメニューでUSBを選ぶと、接続されているUSB機器の情報が見れるのだが、その中に「32V003」が出ているなら、macOSには認識されていることになる。  USBベンダーIDは```0x1209```でUSB製品IDが```0xb803```であることがわかるが、先のエラーメッセージではPIDは```0xb003```と表示されていた。0とか8とか何がどうなってんだ。 ## minichlinkのソースを勝手に変更しちゃう俺様 お試しでソースの中身を見てみると、どうやらb003bootという書き込み機?に対応する部分がVID 0x1209+PID 0xb003に対応しているらしい。このb003bootってのを知らんので、ここをそのまま置き換えてしまおう。 ``` % cd ch32fum/minichlink % grep 'b003' minichlink.c else if( strcmp( specpgm, "b003boot" ) == 0 ) dev = TryInit_B003Fun(SimpleReadNumberInt(init_hints->serial_port, 0x1209b003)); else if ((dev = TryInit_B003Fun(SimpleReadNumberInt(init_hints->serial_port, 0x1209b003)))) hints.specific_programmer = "b003boot"; fprintf( stderr, " -c [serial port for Ardulink, try /dev/ttyACM0 or COM11 etc] or [VID+PID of USB for b003boot, try 0x1209b003]\n" ); fprintf( stderr, " -C [specified programmer, eg. b003boot, ardulink, esp32s2chfun, funprog, isp]\n" ); ``` 下のソースをminichlink.c→minichlink.c.bakに変更して、b003を全てb803に置き換えてしまう。 ``` % mv minichlink.c minichlink.c.bak % sed 's/b003/b803/g' minichlink.c.bak > minichlink.c % make all % ./minichlink -i VID:0x1209, PID:0xb803 Found B003Fun Bootloader Halting Boot Countdown Detected CH32V003 Flash Storage: 16 kB Part UUID: 8a-ce-ab-cd-f2-a3-bc-08 Read protection: disabled Interface Setup USER/RDPR : 08f7/5aa5 DATA1/DATA0: 00ff/00ff WRPR1/WRPR0: 00ff/00ff WRPR3/WRPR2: 00ff/00ff R32_ESIG_UNIID1: 8aceabcd R32_ESIG_UNIID2: f2a3bc08 R32_ESIG_UNIID3: ffffffff ``` おっと```B003Fun Bootloader```って認識されてるけどまぁいいか。ちゃんとUIAPduinoは認識されたみたいだ。これを指示通り```~/.arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink```ではなく(!?) ```~/Library/Arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink```と入れ替えればいい。 ## USBシリアル変換モジュール外付け 公式ページから紹介されているように[USBシリアル変換モジュールを外付けする](https://robo164.com/archives/1245)と```Serial,print```は使えるようになる。この記事がこれ以上書いていないので問題点を書いておこう。 ++USBシリアル変換器は抜かないとボード電源が切れない++ デバック中に書き込みモードに入るには - USBケーブルを抜く - USBシリアル変換器を抜く(new!) - リセットボタンを押しながらUSBケーブルを接続してボタンから手を離す - USBシリアル変換器を接続する(new!) という手順になる。うん、めんどくさ。 ## MCH-LinkE接続... QFPを変換しただけの(CH32V203K8T6)[https://akizukidenshi.com/catalog/g/g118063/]をMCH-LinkEで接続すると、 ``` % minichlink -i Found WCH Link WCH Programmer is LinkE version 2.20 Detected CH32V203 Flash Storage: 64 kB Part UUID: 07-c6-ab-cd-6f-e8-bc-55 Part Type: 20-32-05-00 Read protection: disabled Interface Setup USER/RDPR : c03f/5aa5 DATA1/DATA0: 00ff/00ff WRPR1/WRPR0: 00ff/00ff WRPR3/WRPR2: 00ff/00ff R32_ESIG_UNIID1: 07c6abcd R32_ESIG_UNIID2: 6fe8bc55 R32_ESIG_UNIID3: e339e339 % ``` と認識される。同じように[8ピンのCH32V003J4M6](https://akizukidenshi.com/catalog/g/g118062/)だって以下の通り接続できている。 ``` % minichlink -i Found WCH Link WCH Programmer is LinkE version 2.20 Detected CH32V003 Flash Storage: 16 kB Part UUID: dc-7f-ab-cd-44-c8-bc-7c Part Type: 00-33-05-00 Read protection: disabled Interface Setup USER/RDPR : 6897/5aa5 DATA1/DATA0: ff00/ff00 WRPR1/WRPR0: 00ff/00ff WRPR3/WRPR2: 00ff/00ff R32_ESIG_UNIID1: dc7fabcd R32_ESIG_UNIID2: 44c8bc7c R32_ESIG_UNIID3: ffffffff ``` Windowsで何度やっても何故か接続できなかったUIAPduinoも先ほど試してみたらあっさり接続できた。 ``` % minichlink -i Found WCH Link WCH Programmer is LinkE version 2.20 Detected CH32V003 Flash Storage: 16 kB Part UUID: 8a-ce-ab-cd-f2-a3-bc-08 Part Type: 00-31-05-10 Read protection: disabled Interface Setup USER/RDPR : 08f7/5aa5 DATA1/DATA0: 00ff/00ff WRPR1/WRPR0: 00ff/00ff WRPR3/WRPR2: 00ff/00ff R32_ESIG_UNIID1: 8aceabcd R32_ESIG_UNIID2: f2a3bc08 R32_ESIG_UNIID3: ffffffff ``` これで行けるならArduino IDEで開発する必要もない(開発しても良い)ことになる。USB-Cコネクタには接続不要でUSBシリアル変換器も外付けする必要もなく、WCH-LinkEは繋げっぱなしで```Serial.print```も使用可能だ。WCH-LinkEさえあればUIAPduinoにUSB-Cコネクタは必要ないってことになる。どうやらパワーサイクルも不要なのでUSB-Cコネクタを差しっぱなしでWCH-LinkEの2本(GND、SWDIO)または3本(TX→RX)を繋げばmacでも普通に開発が可能だ。 ## UIAPduino固有
こうなるとUIAPduino固有の開発(USB-Cコネクタ経由の書き込み)を行うモチベーションがない。だからタイトルに(その1)とか付いてない。
こうなるとUIAPduino固有の開発(USB-Cコネクタ経由の書き込み)を行うモチベーションがない。だからこの記事のタイトルには(その1)とか付けてない。以降はUIAPduinoを普通の開発ボード扱いでWCH-KinkEで繋いで開発していこう。
[次の記事>](https://elchika.com/article/360370e6-604d-417a-afea-192728699e92/)