ArduinoでCH32X035のUSBSerial
CH32X035をArduinoから使うときには、通常はWCHサポートを使うが、それだけではCH32X035のUSBSerialは使えない。 WCH社が公開している CH32X035EVT には、 MounRiver Studio用のプログラムの例がある。 これをArduinoで活用することも可能だろうが、どのようにして組み込むかを検証するのはそれなりに面倒であろう。
いろいろと探していたら、CH32X035_USBSerialというライブラリを発見した。 これは、Arduinoでスケッチ-ライブラリをインクルード-ライブラリを管理…-CH32X035_USBSerialを選択してインストールできる。 Arduinoのスケッチは、こんな感じである。
#include <CH32X035_USBSerial.h>
using namespace wch::usbcdc;
void setup() {
USBSerial.begin();
USBSerial.waitForPC(); // Wait for host connection
USBSerial.println("USB CDC ready!");
}
void loop {
if(USBSerial.available()){ USBSerial.read(); }
}
しかし、このライブラリはWCHサポートでは動かず、そのフォークを使う必要がある。 環境設定で以下のURLを加えて、それをインストールする。
https://raw.githubusercontent.com/jobitjoseph/CH32_Arduino_Core/main/board_manager/package_ch32_index.json
ボードはCH32 EVT boards supportからCH32X035を選ぶ。 オリジナルのWCHサポートではCH32V EVT boards supportとなっているので、“V"の有無で区別ができる。 少し調べたところでは、WCHのgithubのファイルと比較して、 system/CH32X035/SRC/Peripheral/src/ch32x035_misc.cと system/CH32X035/SRC/Startup/startup_ch32x035.S などを更新しているようである。 コンパイルして、バイナリを出力して、wchispで書き込むと、USBSerialが使えるようになる。
USBSerialを組み込んだときと組み込まないときで、コンパイルしたときのサイズを比較すると、3k弱の違いである。 以前、CH32V203でTinyUSBを組み込んでみたときには、10kぐらい増加したので、条件の違いはあるが、このライブラリはUSBSerialにしては、それなりにコンパクトだと言えるだろう。 以後、CH32X035でUSBSerialが必要な時には、このライブラリを使ってみようと思う。 このライブラリはCDCしか対応していないので、USBの他のデバイスを作ることは出来無いが、参考にはなるかも知れない。