部品の役割を整理しよう
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 への移行がおすすめです。