概要
- WCHのCH340XというUSB-シリアル変換ICを購入してみたので検証
- ArchLinuxとWindowsで動作確認した
- linuxですこし詰まったので解決法も書いておく
CH340Xとは
ESP32などのマイコンはUARTで書き込みができるので、USB-シリアル変換ICを使うことが多いが、その中でも安価で使いやすいものの一つにCH340シリーズがある。
本来、ESP32にUARTで書き込むためには、IO0ピンをLOWに落とした状態で起動(ENピンをH→L→Hにするなど)してboot modeに入る必要があるが、CH340KなどのRTSピンとDTRピンが出ているICとMOSFET2個を使って自動で書き込みができるようにする回路がある。
このMOSFETでやっていることをシリアル変換ICの内部でやってくれたらいいのに、と考えて調べたら、CH340XというICならそれができるという情報を見つけて、試してみることにした。
ここらへんの情報から、次のような回路で使えそうなことがわかった。
データシート↓
ちなみに、今回のESP32とはBOOTピンの論理が逆になっているマイコンについては、DTRピンを4.7kΩでプルダウンすればいいらしい。
ということで、AliExpressのWCH公式ストアから購入してみた。
2026-02-03購入、2026-02-10到着。
購入時点で1,636円/20個だった。
検証
検証には、部室に転がっていたESP32-WROVER-Eの開発ボードを使った。
自分は開発環境としてPlatformIO Coreを使っている。その設定やファイルは以下のようにした。
.
├── platformio.ini
└── src
└── main.cpp
2 directories, 2 files
[env:main]
platform = espressif32
framework = arduino
board=esp-wrover-kit
targets=upload
monitor_speed = 115200
#include <Arduino.h>
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("hello, world");
delay(1000);
}
前述の回路で書き込みをしたところ、問題なく自動で書き込むことができた。
WindowsとLinuxで同じファイルを用意して書き込みを行なったが、後述の通り自分のLinux環境ではすこし詰まった。
また、74thさんの記事では、シリアルモニターで見ようとするとRTS(=EN)ピンとDTR(=IO0)ピンがLOWのままになってESP32が起動しないという問題が示されていたが、自分が使っているPlatformIOのpio device monitorというコマンドでは、RTS, DTRそれぞれを明示的にinactiveにすることができるため、その問題を回避できた。
pio device monitor --rts 0 --dtr 0
platformio.iniに以下のように書いておけば、毎回オプションを指定しなくてもよい。
[env:main]
platform = espressif32
framework = arduino
board=esp-wrover-kit
targets=upload
monitor_speed = 115200
+monitor_rts = 0
+monitor_dtr = 0
LinuxでUSBが接続と切断を繰り返す
これはCH340Xの機能に直接関係ないが、自分のArchLinux環境で発生して数時間悩んだので、備忘録として残しておく。
なぜか自分のArchLinuxでは、CH340Xを認識してから数秒後に切断され、それからまた接続され、それ以降も切断と接続を繰り返すという無限ループが発生していた。
dmesgを確認しても、とくにエラーもなく、原因がわからず困っていたが、結論としてはusbcoreのautosuspendによるものだった。
対策として、以下のようなudevルールを追加した。
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", ATTR{idProduct}=="7523", TEST=="power/control", ATTR{power/autosuspend}="-1"
udevルールを適用したら、勝手にUSBが切断されることはなくなった。
sudo udevadm control --reload-rules
sudo udevadm trigger
結論
CH340Xには次のようなメリットがあった:
- 抵抗1個だけで自動書き込みの回路が作れる
- パッケージが小さい
- 値段も安い(1個100円以下)
逆に、多少の欠点もある:
- 入手性が微妙
- シリアルモニターを使うには、RTS, DTRを制御できるソフトウェアが必要
入手性については、今回購入したAliExpressの他に、LCSCでも取り扱われているようだ。
もっとこのICの知名度が上がって秋月電子などで購入できるようになればいいなと思う。




