11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【JLCPCB / 電子工作】オートリセット(自動書き込み)対応!ESPマイコン書き込みボード(プログラマ)の製作

こちらの記事の追記となります。

【自作基板】ESP32-S3を使った自作ボードやオートリセット機能付きプログラマの製作を考えています!

最近、ESP32-S3ボードを使いよく遊んでいました!

ネイティブUSBが使えることもあり、このような自作ボードを作る場合でもシンプルなハードウェア構成で実現でき、手軽に書き込みや動作確認ができるのも魅力です。

【電子工作 / PCB】自作ESP32-S3ボードを製作してみました!(ESP32-S3-WROOM-1)

ESP系ボードを使った開発では、UART経由でプログラムを書き込む場合やネイティブUSBのみで構成された上記のようなシンプルなボードであっても、シリアル経由での書き込みやデバッグを行いたい場面が出てきます。

そのような場合、USB-シリアル変換ボードが必要になってくるわけですが、ESP系ボードへの書き込み時に自動書き込み(オートリセット機能)が行えるものを、そういえば持っていなかったことに気付きました!

ESP系ボードへのシリアル経由での書き込みでは、EN(RESET)スイッチBOOTスイッチを使って手動で書き込みモードに移行させることもできますが、DTRやRTS信号で制御することで自動書き込み(オートリセット)が出来ると何かと便利です。

市販されているUSB-シリアル変換モジュールや自作したボードはいくつか手元にあるのですが、ESP用にオートリセット機能が付いたものを持っていなかったことから、今回自作ボードとして製作することにしました。

オートリセット(自動書き込み)機能付きESP系マイコン プログラマボードの製作!

市販されているUSB-シリアル変換モジュールの多くは汎用用途を前提としており、ESPの自動書き込みに必要なオートリセット機能(DTR/RTS制御)に対応した専用の書き込みボードは、意外と選択肢が少ない印象です。

ESP用途に特化したものとなるため、市販品ではどうしても選択肢が限られてしまいます。

オートリセット機能(自動書き込み)を備えたシリアルモジュールは比較的簡単に構成できることもあり、今回自作ボードとして製作することにしました。

ボード設計

ESP系ボードのリセット操作を自動化(オートリセット)するには、DTR信号RTS信号を使用します。

メインとなるUSB-シリアル変換チップは、CH340シリーズやFT232シリーズなど、DTR信号やRTS信号を扱えるものであれば基本的にどれを使用しても問題ありませんが、今回は少し違ったものを試してみることにしました。

上記チップはこれまでの自作基板製作で何度も使用してきたため、今回はあえて、これまで使用したことのないものを選択することに。

CH340シリーズではCH340CやCH340K、FT232シリーズではFT232RLなどがDTR/RTS信号に対応していますが、今回はチップサイズが小さいCP2102Nを選択しました。

DTRやRTSといった制御信号に加えデータラインのTXD/RXD、さらにインジケーターLED(TX/RX)も扱えること、そして入手性の良さも考慮してCP2102N(QFN28)を採用しています。

これにより、ボード全体の小型化にもつながりました。

オートリセットの流れ

ESP32やESP8266などへの自動書き込みは、USBシリアル変換チップのDTR信号とRTS信号を利用し、IO0ピンとENピン(RESET)を自動制御することで実現します。

BOOTスイッチ(IO0)やリセットスイッチ(EN)を使った手動操作を行うことなく、IDEからプログラムを書き込むことが可能になります。

このオートリセット回路には、一般的に2つのNPNトランジスタやMOSFETを使用し、DTR/RTSの組み合わせによってESPのENピンとGPIO0ピンを制御します。

簡単に自動リセットの仕組みを見ておきます。

IDEが通信を開始すると、DTR/RTS信号が制御され、以下のようなシーケンスが実行されます。

オートリセットの流れ
  1. IO0ピンをLOW(GND)に固定する(書き込みモードの予約)
  2. ENピン(リセット)を一度LOWにして、ESPを再起動させる
  3. ENピンをHIGHに戻す。 この瞬間にIO0がLOWであれば、ESPはフラッシュ書き込み待ち状態(ダウンロードモード)で起動しプログラムの転送が始まる
  4. 書き込み後、IO0ピンをHIGHに戻して再度ENピンをリセットする。この再起動の瞬間にIO0がHIGHであれば、ESPは通常モード(内蔵フラッシュ実行)で立ち上がります。

上記動作により、ESPはダウンロードモードへ移行から書き込み完了後に自動的に通常モードへ復帰します。

今回の設計では、使い勝手などを考慮しボードサイズを小型化することを想定していたので、パーツ数を極力減らすためオートリセット回路にはデュアルNPNトランジスタチップUMH3Nを使用しました。

ボード概要

外部に引き出すピン(ESP側に接続)は、シリアルチップのTXD/RXD、リセット制御用のBOOT(IO0)RST(EN)、そして電源(VOUT/GND)の計6ピンとしています。

接続方法としては、表面のJST-SHコネクタ、または背面のピンソケットのどちらでも使用出来る構成としています。

また、本プログラマはESP専用の書き込みボードであるため基本的に3.3Vでの動作&使用となりますが、ターゲットボードへの電源供給を行うVOUTピンについては、スイッチ切り替えにより5Vも出力できるようにしています。

ターゲット側で5Vを使用する回路を含む場合でも、本ボードから電源供給を行い書き込み後もそのまま動作させることが可能です。(ターゲットボード側に3.3V LDOが入っていることが前提です)

あと、ESP32やESP8266などで無線機能をアクティブにすると瞬間的に500mA程度(またはそれ以上)の電流を消費することがあります。

そのため、ターゲット側のESPボードで無線機能を有効にした状態でのテストや動作確認を行う場合、電源の供給能力が不足していると動作が不安定になったりリセットがかかる原因になることがあります。

本ボードでは、ターゲットボードへ電源供給を行いながら安定して書き込みや動作確認が行えるように、3.3V LDOレギュレータとして最大出力1.0AのTLV75733PDBVRを採用しました。

無線通信時のピーク電流にも余裕を持って対応でき、外部電源を別途用意することなく本ボード単体で安定した動作確認が出来ると思います。(以前テスト済み)

【電子工作 / PCB】電圧レギュレータ(LDO)テストボードの製作!

以上が本ボードの全体構成となります。

JLCPCBに基板を発注

基板の製造は、今回もJLCPCBを利用しました。

動作確認ができたので、今回製作したESPプログラマボードの基板データ(Gerber / BOM / CPL)をダウンロードできるようにしておきます。
何かの参考になれば幸いです。

JLCPCBへの発注内容についても簡単に見ていきます。

発注項目の選択は特記すべきところはありませんが、今回このように選択して発注しました。

自身でパーツを調達して実装する場合は、ステンシルもあわせて発注しておくと、はんだペーストの塗布が安定し作業がしやすくなります。
また、使用しているパーツについては後述の「使用パーツ一覧」も参考にして下さい。

JLCPCBの基本的な基板発注方法については、こちらの記事で詳しくまとめています。
あわせて見て頂ければと思います。

【電子工作 / 基板製作】これから始める自作基板。JLCPCBでの基板発注ガイド(2025年版)

今回はアセンブリサービスを利用することで、パーツ実装まで含めてJLCPCBにやってもらいました。

自身で実装する場合と比べるとコストはかかりますが、その分、パーツの入手や実装の手間・時間を大きく削減でき、安定した品質で基板を用意できるのは大きなメリットです!

JLCPCBのPCBAサービスの利用方法については、こちらの記事で詳しくまとめていますので、あわせて参考にして頂ければと思います。

【JLCPCB】自分で設計しなくてもOK!オープンソース基板をJLCPCBのPCBAサービスを利用して実装済み基板を発注する手順

基板の到着

配送方法にOCS Expressを利用し、発注から10日ほどでパーツ実装済みの基板が手元に届きました。

今回のようにPCBA(部品実装サービス)を利用した場合でも、通常の基板単体発注と比較して納期は1〜2日ほど延びる程度なので、JLCPCBのPCBAサービスは非常に早い印象を受けます!

実装済みの状態で届くため、手元に届いてすぐに動作確認へ進めるのも大きなメリットです。

未実装のピンソケットとスイッチを取り付けて基板の完成です!

CP2102NのインジケーターLED(TX・RX)を有効にする

本ボードには、CP2102Nの通信状態を表示するインジケーターLED(TX LED / RX LED)を搭載しています。

CP2102Nのシリアル通信の状況に応じてLEDが点灯するようにしていますが、初期状態では無効(通常のGPIOモード)になっています。

これを有効にするには、Silicon Labsが提供している専用ソフトウェア(Simplicity Studio v5)を使い内蔵設定を書き換える必要があります!

CP2102NのTX/RXインジケーターLEDを有効にする方法をザックリと書いておきます。

[①ツールの準備] Simplicity Studio v5をインストール後、ツール内の「Xpress Configurator」という機能を使用します。(ダウンロード)

[②デバイスの認識] 本ボードをPCと接続後、Simplicity Studioでデバイスを認識させ、Xpress Configuratorで接続されているCP2102Nの設定(Config)を読み込みます。

[③GPIOの割り当て]
GPIO0をTX ToggleGPIO1をRX Toggleにそれぞれ割り当てます。

[④設定の反映] 画面下の [Program Device] ボタンをクリックして、設定をチップへ書き込めば完了です。

設定書き込み後、USBケーブルを一度抜き再度通電(起動)すると、書き込んだ設定が有効になります。
データ通信が発生したときだけ対応するピンがLOWになり、LEDが点灯するようになります。

動作テスト

簡単に動作テストを行ってみました。

こちらは、以前製作したネイティブUSBのみで構成したシンプルな自作ESP32-S3ボードへの書き込みの様子です。

USBシリアルでの書き込みやデバッグを行う場合は、UARTピンであるGPIO43(TX) / GPIO44(RX)を使います。

このTX/RXピンに加え、IO0およびENピンを本プログラマに接続し、オートリセットによる自動書き込みが正常に行えることを確認できました!

また同様に、ESP8266モジュールへの書き込みも問題なく行うことができました!

これまでこのような試作回路をテストする際は、ターゲットボード側にあるBOOT(IO0)スイッチを押した状態でEN(リセット)スイッチを押す…といった手動操作での書き込みを行っていましたが、このようなオートリセット機能が付いたESP専用のシリアルモジュール(プログラマ)があると、快適に作業を進めることができますね!

付けた基板名が製品名と被る

本ボードの名称(基板名)は、製作過程では『ESP32 Programmer』としていましたが、ESP32に限らずESP8266などでも使用できることから、最終的に『ESP Programmer』としました。

基板名や名称については、これまであまり深く考えた事はなく分かりやすさ重視で付けることが多かったのですが、既に販売されている製品と名称が被っているとのご指摘をSNSで頂きました。

私自身は趣味として製作を楽しんでいるスタイルではありますが、電子工作界隈では同人ハードウェアとして販売されている方も多く、名称一つでも混乱を招いてしまう可能性があることを改めて認識しました。

今後はこのような点にも少し気を配りつつ、製作を楽しんでいきたいと思います。
イチロヲさん(@ichirowo)、確認不足で申し訳ありませんでした!

使用パーツ一覧

本ボードで使用したパーツの一覧です。

今回、JLCPCBのPCBAサービスを利用してパーツの実装まで行いましたが、これから同様のボードを製作される方の参考になれば幸いです。

パーツ定数入手先
コンデンサ
(0805)
C1 4.7μF
C2/C7 10μF
C9 100nF
AliExpress
コンデンサ
(0603)
C3/C4/C5/C6 100nF
C8 4.7μF
AliExpress
ダイオード
(SOD-123)
D1 1N5819WAliExpress
端子J1 USB Type-Cコネクタ(16P)AliExpress / 秋月電子
J2 L型ピンソケット(6P)秋月電子
J3 JST-SH(SMD 6P)AliExpress
LED
(0603)
LED1(PWR)/LED2(TX)/LED3(RX)AliExpress
抵抗
(0603)
R1/R2 5.1kΩ
R3/R4/R5 2.2kΩ
R6 22.1kΩ
R7 47.5kΩ
R8 1kΩ
R9/R10 470Ω
R11 10kΩ
AliExpress
スイッチSW1/SW2 3mm×4mm(4P SMD)AliExpress
SW3 Slide(6P DPDT)AliExpress / 秋月電子
3.3V LDOU1 TLV75733PDBVRAliExpress
ESD保護U2 USBLC6-2SC6(SOT-23-6)AliExpress
デュアルNPNU3 UMH3N(SOT-363)AliExpress
理想ダイオードU4 XC8111AA01MR-G秋月電子
USB-シリアルU5 CP2102N-Axx(QFN-28)AliExpress

最後に!

今回、オートリセット(自動書き込み)機能を備えたESPプログラマボードを製作してみました。

USB-シリアル変換チップとシンプルな回路構成で実現出来るものではありますが、実際に使ってみると手動でのリセット操作が不要になり、書き込み作業が快適になります。

ESP専用のこのような書き込みボードは、調べてみると意外に市販されているものが少なく、用途に合うものを探すのが難しい場合もあります。

その点、自作であれば必要な機能や使用環境に合わせたボードサイズなど、自由に設計出来るのも大きなメリットです!

ESP系マイコンを使った開発をされている方は、比較的簡単な構成で製作できるので、興味があればぜひ試してみてはいかがでしょうか。

コメントを残す

メールアドレスが公開されることはありません。