デバイス・ボード

ESP32

Wi-Fi/BLE内蔵の安価なマイコン。IoT試作の定番。

概要

ESP32はEspressif Systems(上海)が開発したWi-FiとBluetoothを内蔵する低コストのマイコンです。2016年に量産を開始し、IoTデバイスのプロトタイプから量産製品まで世界中で圧倒的なシェアを誇ります。

デュアルコアのXtensa LX6プロセッサ(最大240MHz)・Wi-Fi(802.11 b/g/n)・Bluetooth Classic / BLE 4.2を1チップに統合し、わずか数百円〜千円程度の価格で入手できます。豊富な開発環境(ESP-IDF・Arduino・MicroPython・CircuitPython)とコミュニティが揃い、電子工作から産業用IoT機器まで幅広く採用されています。

ESP8266の後継として設計され、処理能力・ペリフェラル数・Bluetooth対応などで大幅に強化されています。FreeRTOSが標準で動作し、Wi-Fi接続・MQTT通信・OTA更新などの機能がフレームワークとして提供されます。

歴史・背景

ESP32の前身であるESP8266は2014年に登場し、Wi-Fi内蔵の超低価格マイコンとして世界中のメーカーズコミュニティに広まりました。しかしシングルコア・ペリフェラルの少なさ・Bluetooth非対応という制約がありました。

2016年にEspressifはESP32を発表。デュアルコア化・Bluetooth追加・多数のペリフェラル追加・セキュリティ強化を実現しました。2019年にはESP32-S2(シングルコア・USB対応)、2020年にはESP32-S3(AI命令拡張・USB OTG)、2021年にはESP32-C3(RISC-V・Wi-Fi+BLE)が登場し、ファミリーが拡大しています。

2023年時点でESP32シリーズの累計出荷数は10億個を超え、IoT分野で最も普及したマイコンの一つとなっています。

技術仕様

チップファミリー比較

チップCPUコア数Wi-FiBT特徴
ESP32Xtensa LX62b/g/nBT4.2 + BLEオリジナル、汎用
ESP32-S2Xtensa LX71b/g/nなしUSB OTG、セキュリティ
ESP32-S3Xtensa LX72b/g/nBLE5.0AI拡張、USB OTG
ESP32-C3RISC-V1b/g/nBLE5.0低コスト、小型
ESP32-C6RISC-V1b/g/n/ax(Wi-Fi6)BLE5.0Wi-Fi 6 + Zigbee/Thread
ESP32-H2RISC-V1なしBLE5.2Zigbee/Thread専用

ESP32(オリジナル)の主要スペック

項目
CPUXtensa LX6 デュアルコア(最大240MHz)
ROM448KB
SRAM520KB(データ用320KB + 命令用128KB + RTC 8KB)
Flash外付け4〜16MB(SPI接続)
Wi-Fi802.11 b/g/n 2.4GHz(最大150Mbps)
BluetoothClassic BT 4.2 + BLE 4.2
GPIO34本
ADC18ch(12bit、1V基準)
DAC2ch(8bit)
UART3本
SPI4本
I2C2本
I2S2本
PWM16ch
タッチセンサー10ch(静電容量式)
ホールセンサー1ch
温度センサー内蔵
動作電圧3.0〜3.6V
消費電流アクティブ(Wi-Fi送信)160〜260mA、Deepsleep 10µA

Wi-Fi仕様詳細

項目
規格IEEE 802.11 b/g/n
周波数2.4GHz
変調DSSS(802.11b)、OFDM(802.11g/n)
最大速度150Mbps(802.11n HT40)
セキュリティWPA/WPA2 Personal/Enterprise
ネットワークモードStation / AP / Station+AP 同時
TCP/IPLwIPスタック内蔵

Bluetooth仕様

項目
Classic BTBluetooth 4.2、A2DP・AVRCP・HFP・HID対応
BLEBluetooth 4.2 Low Energy
GATTサーバー・クライアント両対応
BLE広告ADV_IND・ADV_DIRECT・ADV_NONCONN・ADV_SCAN
接続数最大同時9接続(BLE)

動作原理

ESP32はデュアルコア非対称マルチプロセッシング構成で動作します:

  • PRO_CPU(コア0): Wi-Fi・Bluetoothプロトコルスタックを専有
  • APP_CPU(コア1): ユーザーアプリケーションを実行

FreeRTOSが標準OSとして動作し、タスク・セマフォ・キューなどのRTOS機能が使えます:

// ESP-IDF FreeRTOSによるタスク生成例
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"

#define LED_GPIO GPIO_NUM_2

void led_task(void *pvParameter) {
    gpio_set_direction(LED_GPIO, GPIO_MODE_OUTPUT);
    while(1) {
        gpio_set_level(LED_GPIO, 1);
        vTaskDelay(pdMS_TO_TICKS(500));
        gpio_set_level(LED_GPIO, 0);
        vTaskDelay(pdMS_TO_TICKS(500));
    }
}

void app_main(void) {
    xTaskCreate(led_task, "led_task", 2048, NULL, 5, NULL);
}

Wi-Fi接続は内蔵のevent loopとWi-Fiドライバーで管理します:

// Wi-Fi Station接続の例(ESP-IDF)
#include "esp_wifi.h"
#include "esp_event.h"
#include "nvs_flash.h"

void app_main(void) {
    nvs_flash_init();
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_sta();

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);

    wifi_config_t wifi_config = {
        .sta = {
            .ssid = "MySSID",
            .password = "MyPassword",
        },
    };
    esp_wifi_set_mode(WIFI_MODE_STA);
    esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
    esp_wifi_start();
    esp_wifi_connect();
}

用途・ユースケース

ESP32が採用される主な用途:

  • IoTセンサーノード: 温湿度・CO2・照度センサーとWi-Fi/BLEを組み合わせたデータ収集端末
  • スマートホームデバイス: スイッチ・調光器・スマートプラグ(Matter / Zigbee対応はESP32-C6)
  • ウェアラブル: BLE搭載の活動量計・ヘルスモニター
  • 産業用センサー: 工場内の振動・温度監視ノード
  • 電子楽器・音声処理: I2S経由でDAC/DACと接続した音声処理
  • OTAゲートウェイ: UART/SPI接続のメインMCUのOTA更新仲介
  • BLEビーコン: BLEアドバタイズによるロケーション検出・資産管理

実装・開発のポイント

開発環境の選択

環境言語特徴
ESP-IDFC/C++公式SDK。全機能を利用可能
Arduino-ESP32C/C++Arduino APIで手軽に開発
MicroPythonPythonREPL・インタラクティブ開発
CircuitPythonPythonAdafruitのライブラリエコシステム
PlatformIOC/C++IDE非依存のビルドシステム

OTA(Over The Air)更新

ESP-IDFのOTAは2つのOTAパーティションを交互に使う設計です:

パーティションテーブル:
┌──────────────┬──────────────┬──────────────┐
│  factory     │  ota_0       │  ota_1       │
│  (初期FW)  │  (現行FW)  │  (更新先)  │
└──────────────┴──────────────┴──────────────┘
// OTAアップデートの実行例
#include "esp_ota_ops.h"
#include "esp_https_ota.h"

esp_err_t do_ota_update(const char *url) {
    esp_https_ota_config_t config = {
        .ota_config = {
            .http_config = {
                .url = url,
                .cert_pem = server_cert,
            },
        },
    };
    return esp_https_ota(&config);
}

Deep Sleep と消費電力

IoT電池駆動デバイスではDeep Sleep(10µA以下)が重要です:

// 60秒ごとにDeep Sleepから復帰してデータ送信する例
#include "esp_sleep.h"

void app_main(void) {
    // センサー読み取り・データ送信処理
    read_sensor_and_send();

    // 60秒後にウェイクアップするタイマーを設定してDeep Sleep
    esp_sleep_enable_timer_wakeup(60 * 1000000ULL);  // マイクロ秒
    esp_deep_sleep_start();
}

他技術との比較

ESP32 vs STM32

項目ESP32STM32
Wi-Fi/BT内蔵外付け必要
リアルタイム性中(Wi-FIスタックとコア競合)高い(専用コア)
消費電力中(Wi-Fi使用時)低い
価格安い(200〜500円)中程度(200〜2000円)
産業サポート限定的充実(長期供給保証)
開発環境ESP-IDF / ArduinoSTM32CubeIDE / Keil / IAR

ESP32 vs Arduino

ArduinoはATmega328などの単純なMCUボードであり、Wi-Fi・Bluetoothは外付けが必要です。ESP32はArduino IDEで開発できますが、処理能力・無線機能・ペリフェラル数で大幅に優れています。

関連用語

参考リンク