Peripheral MCU で使用している ESP32の起動時の動作と、プログラム書き込みを説明します。
◀ この記事の前に: リセットとプログラム書き込み(Leafony)
▶ この記事の次に: 二つの Leafony Block
ESP32 のリセット
ESP32のリセットは ENピン( Pin.3 )を Lowします。
ENピンは、R71(10kΩ)を介して電源(+3.3V)に接続しています。電源の立ち上がりと同時に Hi になります。
C71(0.1uF)はリセットに必要な Low時間を確保するためのコンデンサです。( 最低必要時間:50ms 〜 100ms )
遅延リセット( オプション )
ESP32には電源 ON時にすぐにリセットスタートせずに、遅らせてリセットスタートする回路をプリント基板上に提供しています。電源 ON時に各回路が同時に ONになることにより電流が急激に増えることを抑えます。
ESP32の動作モード
ESP32は起動時に動作モードを選択できます。動作モードは以下の2種類です。GPIO0( Pin.25 )の電位により動作モードを選択します。
- 通常動作モード: GPIO0 = High / 通常のプログラムの動作を行う。
- プログラム書き込みモード: GPIO0 = Low / フラッシュモード、プログラムを書き込む。
ESP32の主要なモードは以下のとおりです。
- Normal Boot(通常起動モード): ESP32に書き込まれたプログラムを実行する標準的なモード
- Flash Mode(書き込みモード): ESP32に新しいプログラムを書き込む際に使用
- UART Download Mode: UART経由でプログラムを書き込む特別なモード
- OTA Update Mode(Over-The-Air更新モード):
- SD Card Boot Mode: SDカードからプログラムを実行するモード
- Recovery Mode(リカバリーモード): SDカードからプログラムを実行するモード
- Deep Sleep Mode(ディープスリープモード): 不正なファームウェアや起動失敗時に使用されるモード
- Light Sleep Mode(ライトスリープモード): 一部の周辺機能を維持しつつ、電力消費を抑えるモード
- Modem Sleep Mode: Wi-Fiを低消費電力モードで動作させる場合に使用
GPIOピンによるモード選択
起動時に特定の GPIOピンの状態に応じてモードが決まります。
モード | GPIO0 | GPIO2 | GPIO15 | その他の条件 |
---|---|---|---|---|
Normal Boot | HIGH | Don’t care | Don’t care | 通常起動 |
Flash Mode | LOW | HIGH | Don’t care | 書き込みモード |
Deep Sleep | – | – | – | プログラム制御で選択 |
OTA Update | – | – | – | プログラム制御で選択 |
プログラムの書き込み
前項のリセットと動作モードを組み合わせることによりプログラムの書き込みができます。
開発環境とプログラムの書き込みはこちらをご覧ください。
手動で書き込む場合
IO0ピンを Lowにした状態でリセットすると UARTからプログラムが書きこめるようになります。
操作としては、SW1( EN = Reset ) と SW2( Boot )のスイッチを両方押して、SW1を離してから SW2 を離すことによりプログラム書き込みモードになります。その後に PC側でプログラム書き込み操作をします。
自動で書き込む場合
デバッグ中はプログラムを頻繁に書き込みます。毎回、手動で操作するのは煩雑です。
Arduino IDEなどの開発ツールには通信の制御線を使用して自動で動作モードの変更を行う機能を持たせたものがあります。この機能を使用することにより、自動的に動作モードの変更を行いプログラムの書き込みを行うことができます。
プリント基板上の実装( リセット回路 )

Peripheral MCU( ESP32 )はリセット回路を内蔵しています。
リセットは動作モードと関連しています。プログラム書き込みも動作モードのひとつです。そのため、リセット回路とプログラム書き込み回路は連携しています。
手動操作による押しボタンスイッチ SW1と SW2もこの回路に含まれます。
隣接している U7(部品未搭載)は電源 ON時に起動電流を低減するために、起動を遅延する回路です。( オプションです。)
USBシリアル変換モジュールの接続
プログラムの書き込みは外部に追加した USBシリアル変換モジュールを介してPCと接続します。
Arduino IDE などの開発ツールによっては、IDE( 開発ツール )からの操作により書き込みモードと通常起動モードを切り換えることができます。USBシリアル変換モジュールの RTSと DTRによりモード切換えをします。手動ブートリセット回路は押しボタンスイッチがありモードの選択をスイッチで行うこともできます。
接続コネクタ
シリアル変換モジュールとは以下のコネクタ CND1で接続します。コネクタは以下のとおりです。
- CND1: 0010897120 / 2.54mm Pitch C-Grid Breakaway Header, Dual Row / Datasheet / Molex, LLC
Pin No. | Name | Category | Port / Pin | Source |
---|---|---|---|---|
1 | +3.3V | |||
2 | +3.3V | |||
3 | RTS | UART | ||
4 | DTR | UART | ||
5 | RXD0 | UART | IO3 | Peripheral MCU |
6 | TXD0 | UART | IO1 | Peripheral MCU |
7 | JTAG-TDI | JTAG | IO12 | Peripheral MCU |
8 | JTAG-TCK | JTAG | IO13 | Peripheral MCU |
9 | JTAG-TMS | JTAG | IO14 | Peripheral MCU |
10 | JTAG-TDO | JTAG | IO15 | Peripheral MCU |
11 | GND | |||
12 | GND |
Technical Considerations DTR と RTS
DTR、RTSは UART(シリアル通信)を使用したときに、データの受け渡しをスムースに行う制御のための信号線です。この信号線を流用して、動作モードの切り換えやリセットをおこないます。DTR、RTSの制御は開発ツール側の機能です。それに応えられるように Q1、Q2 で回路を構成しています。ここでは抵抗入りのトランジスタを使用してコンパクト( PCB面積と部品点数の削減 )にしています。
詳しい情報: ESP8266にDTRとRTSで自動書き込みをする: こちらに詳しい情報があります。 / プログラミングな日々
Technical Considerations EN と Boot( IO0 )のプルアップ
ENにはプルアップ抵抗( R71 )が接続しています。Boot( IO0 )にもプルアップ抵抗が必要です。ESP32のGPIO0(IO0)は、起動時に動作モードを決定するためのピンとして使用されます。GPIO0の初期状態(リセット直後の状態)は通常、プルアップ(HIGH)されています。そのため外部にプルアップ抵抗はありません。
Design Considerations USB用ドライバICをどこに置くか
本体ボードに USB用ドライバICを設置していません。
USBドライバ用ICを本体ボードに搭載すると、直接 USBケーブルを接続できるため便利ですが、USBドライバICを設置しなかった理由は以下のとおりです。
・PCB面積と部品点数の削減
・USBシリアル変換モジュールを自由に選択( PC側のドライバの対応 )
・Peripheral MCUは周辺回路の制御が主目的であまり変更がないこと
・JTAGを同時使用した場合、USBを2系統持つIC( FT2232など )を使用することを想定
プリント基板上の実装( プログラム書き込み用コネクタ )

ESP32のプログラム書き込み用のコネクタ CND1 はメインボードの右下にあります。
コネクタはピンヘッダの形状です。ブレッドボード・ジャンパー線( メス – オス )で接続することもできますし、レセプタと接続することもできます。
レセプタ: 2.54mm Pitch C-Grid / Datasheet / Molex, LLC
隣接して Leafony に搭載する STM32の SWDデバッグ用コネクタ CND2, CND3 があります。
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。
他のWebサイト
- SN74LVC1G3157 SPDT アナログスイッチ Datasheet
- IO0 and IO2 pullup / pulldown resistors / Espressif Systems.