はじめに
つい最近はどのマイコンも高く、気軽に使えるものが減っています。その中でもESP32は様々な種類があり、Wi-FiやBluetoothなど様々な機能が載っており、比較的安価に入手できます。メモリの容量もある程度あり、ロボコンなどではメインマイコンとして使用していました。
しかし、ESP32を使った電子工作やIoT開発をしていると、「なぜかプログラム書き込みができない」「特定のピンに繋いだセンサーが反応しない」「そもそも起動しない」なんていうトラブルに遭遇しがちです。
その原因の多くは、「使ってはいけないピン」や「特殊な制約があるピン」を知らずに使ってしまっていることにあります。
この記事では、一般的なESP32(ESP32-DevKitC-32E)をベースに、「使えないピン」「注意が必要なピン」を分かりやすくまとめました。半分は自分の備忘録代わりの記事ですが、回路設計やブレッドボード試作の参考にしてください!
【結論】ESP32の使えない・制限付きピン一覧
まずは、特に注意が必要なピンをまとめました。
今回主に話していくのは秋月電子でいつも買っているこのESP32です。
1800円と2000円以下で買えるので重宝しています。
| ピン番号 (GPIO) | 状態・制限 | 理由・注意点 |
|---|---|---|
| GPIO 6 〜 11 | 完全使用不可 | 内蔵Flashメモリの接続に使われているため。引き出すと確実に暴走・クラッシュします。 |
| GPIO 34 〜 39 | 入力専用 | 出力(digitalWriteなど)や内部プルアップ/プルダウンができません。 |
| GPIO 0 | 起動モード選択 | LOWでBOOTモードになるため、プルダウン接続等に注意。 |
| GPIO 2 | 内蔵LED接続 / 起動依存 | 起動時にLOWだとフラッシュダウンロードモードになる。内蔵LED(GPIO 2)があるボードでは干渉に注意。 |
| GPIO 5, 12, 15 | ストラップピン | 起動時の電圧レベルで挙動が変わる(Bootstrapping pins)。特にGPIO 12は内蔵Flashの電圧(3.3V/1.8V)に関わるため要注意。 |
| GPIO 4, 0, 2, 13, 14, 25, 26, 27, 32, 33, 34, 35, 36, 39 | ADC2の制限 | Wi-FiやBluetooth(無線機能)を有効にしている間は、ADC2を使用するピンのアナログ入力が使えません。 |
詳細:ピンが使えない/注意が必要な理由
1. 完全に使ってはいけないピン(GPIO 6 〜 11)
これらはESP32モジュール内部で、プログラムやデータを保存しているフラッシュメモリと直接接続されています。
基板のピンヘッダに出ていない場合が多いですが、もし万が一配線等を引き出していてアクセスすると、マイコンが正常に動作しなくなります。回路設計では絶対に触らないようにしてください。
2. 入力しかできないピン(GPIO 34, 35, 36(VP), 39(VN))
これらのピンは入力専用です。正常に出力されてない場合、このピンを使用していることが多いです。また、これらのピンは環境によってはコンパイルが通ることがあるので気づきにくく、注意が必要です。
-
pinMode(pin, OUTPUT)やdigitalWrite()を使っても出力できません。 - 内部プルアップ・プルダウン抵抗が内蔵されていません。 そのため、タクトスイッチなどを繋ぐ場合は、外付けでプルアップ/プルダウン抵抗を入れる必要があります。
3. 起動時の挙動に影響するピン(ストラップピン)
ESP32は、電源を入れた瞬間(リセット解除時)に特定のピンの電圧レベルを読み取って、動作モードを決定しています。以下のピンは回路の組み方によって起動しなくなるトラブルが起きやすいです。
特に、GPIO2,5は使っている人を見ることが多いですが、このピンが下人で動きにくくなることもあるので別のピンを使用する方が安定して動作します。
- GPIO 0: 起動時にLOWだとファームウェア書き込み(フラッシュ)モードになります。スイッチなどでGNDに落ちっぱなしになっていると起動しません。
- GPIO 12 (MTDI): 起動時にHIGHだと、フラッシュメモリの動作電圧(VDD_SDIO)が1.8Vに設定されてしまい、通常の3.3Vフラッシュを搭載したモジュールでは起動に失敗します。外部回路でプルアップしない、あるいはフローティングにしておくのが無難です。
- GPIO 2, 5, 15: 起動時のブートモードやデバッグ出力に関わるため、意図しないプルアップ・プルダウン抵抗を接続すると起動不良の原因になります。
4. 無線機能(Wi-Fi / BT)とADC(アナログ入力)の排他利用
ESP32にはADC1とADC2の2系統のアナログ入力がありますが、Wi-FiやBluetoothを利用しているときはADC2(GPIO 0, 2, 4, 12, 13, 14, 25, 26, 27など)を使ったアナログ読み取りが正常に動作しません。
「最初はWi-Fiなしで問題なく動いていたのに、Wi-Fiを使い始めたら突然動かなくなった…」
という場合、まさにこの(ADC2などの)制約が原因であることが非常に多いです。普段使いやすいピンが多いため、いつも通りの感覚で使用して引っかかることが多いポイントです。
アナログセンサーを読み取りたいときは、**ADC1に属するピン(GPIO 32 〜 39)**を使いましょう。
おすすめのピンの選び方(まとめ)
「結局、どのピンを使えば安全なの?」という場合は、以下のピンから優先的に使うのがおすすめです。
-
汎用デジタル入出力 / PWM / I2C / SPIなどに使いやすい安全なピン:
-
GPIO 4, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33あたりは比較的制約が少なく使いやすいです。
-
-
センサーなどを繋ぐとき:
- アナログ入力なら GPIO 32 〜 35(※34, 35は入力専用なので注意)を選ぶと、Wi-Fi環境下でも安定して動きます。
参考資料
- ESP32 Datasheet (Espressif Systems)
- https://akizukidenshi.com/goodsaffix/esp32_devkitc_v4-sch.pdf
おわりに
ここまで読んでいただきありがとうございます。
基本的に自分向けの備忘録ですが、誰かの役に立てればと思い書き始めました。
普段は、ESP32を使った電子工作をメインにしていますので、そちらの方も投稿していければと思います。