電子工作 ESP32
部品の役割を整理しよう

ESP32-DevKitC-32E ってどんなマイコンボード? ― 部品の役割を整理する

使用するマイコンボード

今回は ESP32-DevKitC-32E マイコンボードを使用します。
このボードは ESP32-WROOM-32E モジュールをメインチップとして搭載しており、BluetoothやWi-Fiが標準で内蔵されています。 今回作成するものに通信機能が必要だったため、Bluetooth機能を標準搭載しているESP32-DevKitC-32Eを選定しました。

「ボード」「モジュール」「チップ」の関係

名前が似ていて混乱しやすいのですが、中身はこのような階層で分類できます。
ESP32-DevKitC-32E(マイコンボード全体)<br />  └ ESP32-WROOM-32E(モジュール)← ボードに乗っている部品<br />    └ ESP32(チップ/SoC)← モジュールの中核にあるCPU等が入ったチップ
チップのデータシートを、マイコンボードのデータシートだと勘違いしないように注意してください。 私はこれで「3.3Vしか出力がない」と思い込んでしまいました。詳しい説明は実際につなげる記事で触れます。

ESP32 のスペック概要

ESP32 は非常に多機能で、小さいボードながら以下のような性能を持っています。
  • CPU:Xtensa 32bit デュアルコア(最大 240MHz)
  • SRAM:520KB
  • Flash:4MB(ESP32-WROOM-32E の場合)
  • Wi-Fi:2.4GHz(802.11 b/g/n)
  • Bluetooth:Classic + BLE(Bluetooth Low Energy)
  • GPIO 数:約 25 本(ボード上で利用可能なもの)
これだけのスペックが数百円〜千円台で手に入るのが ESP32 の大きな魅力です。 Wi-Fi と Bluetooth の両方を内蔵している点も、IoT 用途ではかなり強力です。

Raspberry Pi との違い

よく聞く似たカテゴリのボードに Raspberry Pi がありますが、ESP32 は基本的にOSが入っておらず、センサーの制御に特化したコンピュータになっています。
OSが入っていなくても動くの?
OSには、複数のプログラムを同時に管理したり、ハードウェアを抽象化したりといった「橋渡し」の役割があります。 今回は1つのプログラムのみを動かす予定なので、OSが入っていなくても問題ないと判断しました。
OSなしで直接動く仕組みのことを ベアメタル(Bare Metal) と呼んだりします。

今回使いそうな部品の紹介

PCB ANTENNA

電波を送受信するための部品です。 BluetoothもWi-Fiも、実態は2.4GHz帯の電波なので、このアンテナで送ったり受け取ったりしています。

マイクロUSB

マイコンボードへの電源として利用します。コンセントに差したACアダプタから給電してください。
USB 経由ではボードへの給電だけでなく、PC との シリアル通信(プログラム書き込み・ログ出力) も同じケーブル1本で行えます。

EN(リセット)ボタン/BOOT ボタン

ボード上には2つの物理ボタンが付いています。
  • EN … 押すとマイコンがリセットされ、書き込み済みのプログラムを最初から実行し直します。
  • BOOT … 押しながら EN を押すことで「書き込みモード」に入れます。通常の書き込みは自動で切り替わりますが、うまくいかないときに役立ちます。
プログラムの書き込みに失敗するときは、BOOT を押しながら EN を1回押し、BOOT を離す、という手順を試してみてください。

LED インジケータ

ボード上には小さなLEDが付いており、動作状況を目視で確認できます。
  • 電源LED … USBから給電されているときに常時点灯します。
  • ユーザーLED … GPIO2 と連動しているLEDで、プログラムから自由に点滅制御できます(動作確認用の「Lチカ」にも使えます)。

GPIO

センサーからの入力を受け取ったり、センサーへ信号を出力したりするのに利用します。

ピンの見方

データシートには、1本のピンに対して下記のような情報が並んでいます。
IO25 10 I/O GPIO25, DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0
それぞれの意味は以下の通りです。
  • IO25 … ピンの名前
  • 10 … ピン番号
  • I/O … 入力・出力の両方に対応
  • GPIO25 … 普通のデジタル入出力(ON/OFF)として使える
  • DAC_1 … アナログ電圧出力
  • ADC2_CH8 … アナログ電圧入力(ADC2の8番ch)
  • RTC_GPIO6 … 省電力スリープ中でも使えるGPIO
  • EMAC_RXD0 … 有線LAN用
1本のピンが複数の役割を兼ねているため、「このピンは何として使うか」を回路設計のときに決めておくと迷いません。

ストラッピングピンに注意

ESP32 の GPIO の中には、起動時の状態によってブート動作が変わる「ストラッピングピン」があります。 具体的には GPIO0、GPIO2、GPIO12、GPIO15 の4本です。
これらのピンに何かを繋ぐときは、起動時の電圧レベル(HIGH/LOW)によってはマイコンが起動しなくなるケースがあります。 入出力として使うこと自体は可能ですが、「起動時に影響しない状態にしておく」という配慮が必要です。

3V3

今回利用するHX711モジュールの電源として使います。
HX711モジュールはアンプの役割と、ADコンバータ(アナログ信号からデジタル信号への変換)としての役割を担います。

5V

5Vピンがあることを後から知ったため、こちらをマイコンから繋げる部品の電源として利用します。
データシートを最初にしっかり確認していれば、5Vピンの存在にもっと早く気づけたはずです。 チップ単体ではなく「ボード」のデータシートを見る、という基本を改めて意識しました。

GND

接地(アース)用のピンです。 マイコンと外部部品をつなぐときは、電源ラインだけでなく GND も必ず共通にしておく必要があります。
「電源は繋いでいるのに動かない」というときは、GND の繋ぎ忘れが原因であることが意外と多いです。 複数の電源系統を使う場合でも GND は必ず1か所にまとめましょう。

ADC

アナログ信号を読み取るピンです。 今回はセンサーの出力が微弱なため、このピンは使わず別途コンバーター(HX711)を用意します。
ESP32 の ADC は ADC1 と ADC2 の2系統がありますが、この2つには大きな違いがあります。
  • ADC1 … Wi-Fi/Bluetooth 使用中でも問題なく利用可能。
  • ADC2 … Wi-Fi/Bluetooth を使っている間は使用できない。
今回のように Bluetooth 通信を利用するプロジェクトで ADC を使う場合、ADC2 のピンを選んでしまうと値が取れなくなります。 ADC を使うときは ADC1 側のピンを選ぶのが無難です。

開発環境について

ESP32 の開発には、いくつかの選択肢があります。
  • Arduino IDE … 最も手軽。ライブラリが豊富で、初心者向けの情報も多い。
  • PlatformIO … VSCode 上で動く本格的な開発環境。補完やデバッグが充実。
  • ESP-IDF … Espressif 公式のフレームワーク。低レベルまで触れるが学習コスト高め。
今回は手軽さを優先して Arduino IDE を使いました。 慣れてきて「補完が欲しい」「複数ファイル構成で管理したい」と感じたら、PlatformIO への移行がおすすめです。