UIAPduinoをch32funで使う方法


UIAPduinoの開発環境として,初心者にとって最も簡単なのはおそらくArduino IDEである. 新しい種類のマイコンを使うたびに,そのマイコンの仕様を勉強するのは大変だが, arduinoは,マイコンの種類をあまり意識せずに使えるという点で,優れていると思う. UIAPduinoのArduino環境は,WCH社のArduino環境を用いており,少い重いという欠点がある. また,USBを使ったプログラムを作ることができない.

もう一つのUIAPduinoの開発環境が,ch32funであり,軽くて機能も充実しているが, ch32funでプログラムを組むには,CH32V003について多少の知識が必要となる. 実は,UIAPduinoのUSBによる書き込みは,ch32funのrv003usbを使ってソフト的に実現している. 同様に,ch32funでrv003usbを使うと,USBを利用するようなプログラムも作ることができる. ちなみに,PlatformIOでは,ch32funを使うことができるらしいが,私は使ったことが無い.

ch32funでUIAPduinoを使うには, UIAPduinoのbootloaderは,ch32funのbootloaderとProductIDが異なるので,minichlinkでの書き込み時のコマンドにオプションを指定する必要がある. そこで,ch32fun/ch32fun.mkの中の

FLASH_COMMAND?=$(MINICHLINK)/minichlink -w $< $(WRITE_SECTION) -b

という行を,

FLASH_COMMAND?=$(MINICHLINK)/minichlink -c 0x1209b803 -w $< $(WRITE_SECTION) -b

に変更する. すると,普通のch32funと同様にUIAPduinoを使うことができる. minichlinkをUIAPduinoのものと入れ替えても良いのだが.

ch32funでUIAPduinoを使うもう一つの方法を紹介しておこう. AlexanderManderaさんの環境は,arduino IDEからch32funを使えるようにしたものなので,これを使うと,Arduino IDEからch32funを通して,UIAPduinoを使うことができる. Arduino IDEでファイル-環境設定として,追加のボードマネージャのURLに

https://alexandermandera.github.io/arduino-wch32v003/package_ch32v003_index.json

を入れて, ツール-ボード-ボードマネージャで"ch32"などと検索すると,“WCH Boards"が出てくるので,インストールするとこの環境が使えるようになる. そして,UIAPduinoを使えるように,以下のようにして書き込みソフトをUIAPduinoのもので上書きする.

cp ~/.arduino15/packages/UIAP/tools/minichlink-2982dfd/1.0.0/minichlink ~/.arduino15/packages/alexandermandera/tools/minichlink/1.0.0/

この環境を UIAPduinoの環境と比較をしてみよう. ファイル-スケッチ例-01.Basics-Blinkの例に,

#define LED_BUILTIN 2

を加えてUIAPduinoでコンパイルすると,6972バイトとなる. スケッチ-コンパイルしたバイナリを出力としてできるbinファイルのサイズは7140バイトである. ツール-ボード-WCH Boards-CH32V003として,環境を変えた場合のbinファイルは1640バイトである. ファイルサイズは四分の一となり,プログラムがかなりコンパクトになってることが分かる. ch32funがベースになっているので,うまく設定すればrv003usbも使えるかも知れない. このように,UIAPduinoの環境よりも,こちらの方が良いようにも思えるが,必ずしもそうとは言えない. この環境では,digital IOとSerialはarduinoと同じように使えて,i2cは少し違う形式で使うことができるが,analog IOなどはまだ使えない. また, ch32funも古いものを使っており, しばらく更新が止っているので,進展はあまり望めないように思われる. digital IOとSerialしか使わなくて良い場合を除いて,UIAPduinoの環境を使っておくのが良いのでは無いだろうか. なお上の例で,ピン番号の代わりにPC0などを使う場合には,C0としなければならないことに注意しないといけない.