デバイス・ボード

ESP8266

Wi-Fi内蔵の低価格マイコン。ESP32の前世代。

概要

ESP8266はEspressif Systemsが開発したWi-Fi内蔵マイコンです。2014年8月に登場し、当時としては破格の低価格(数百円以下)でWi-Fi接続機能を実現できることから、世界中のメーカーズコミュニティに急速に普及しました。

Tensilica(現Cadence)のXtensa L106シングルコアプロセッサ(最大160MHz)を搭載し、802.11 b/g/n(2.4GHz)のWi-Fiを内蔵しています。フラッシュは外付けで1〜16MBのSPI Flashを接続します。初期はATコマンドで動作するWi-Fiモジュールとして使われていましたが、後にフルスタックのマイコンとして独自プログラムを書き込んで動かせることが判明し、独自コミュニティが発展しました。

後継のESP32が登場した現在でも、コスト最優先・シンプルなWi-Fi接続が必要な用途では現役で使われています。ただし新規設計ではESP32-C3などを選ぶことが多く、ESP8266は枯れた技術として既存製品のメンテナンス用途が中心となっています。

歴史・背景

ESP8266の登場は2014年。当初はESP-01という小型モジュールとしてSeeedやAliExpressを通じて流通し始めました。価格は当時1〜2ドル程度で、既存のWi-Fiモジュール(50〜100ドル)と比べて圧倒的に安価でした。

初期は中国語のドキュメントのみでしたが、英語圏のハッカーコミュニティがリバースエンジニアリングを行い、独自ファームウェアの書き込み方法を解明。2014年末にはArduino IDEからプログラムを書き込めるようになり、爆発的な普及が始まりました。

NodeMCU(ESP8266 + LuaスクリプトランタイムをインストールしたDevelopmentボード)が登場し、Wi-Fiセンサーやスマートホームデバイスのプロトタイプ作成が簡単になりました。

2016年にESP32が登場すると、デュアルコア・Bluetooth追加・多数ペリフェラルで優位に立ちましたが、ESP8266はその低コストと小型さから引き続き需要がありました。

技術仕様

チップスペック

項目
CPUXtensa L106 シングルコア(最大160MHz、通常80MHz)
ROM64KB(命令用)+ 96KB(データ用)
SRAM160KB(システム)+ 無線スタック用は別途
外部Flash512KB〜16MB(SPI接続)
Wi-FiIEEE 802.11 b/g/n 2.4GHz、最大速度: 72.2Mbps(802.11n)、モード: Station / AP / Station+AP
GPIO17本(モジュールにより実使用可能本数は異なる)
ADC1ch(10bit、0〜1V入力)
UART2本(UART0はプログラム書き込み兼用)
SPI2本(SPI0はFlash接続用)
I2CソフトウェアI2C(1本)
I2S1本
PWMソフトウェアPWM(最大1000Hz)
動作電圧3.0〜3.6V(最大3.6V!5V非対応)
消費電流Wi-Fi送信時 170mA(ピーク)、Deepsleep 20µA

代表的なモジュール

モジュールピン数フラッシュアンテナ特徴
ESP-018ピン1MBチップアンテナ最小構成、ATコマンド用
ESP-12E/F22ピン4MBPCBアンテナGPIOが多く開発用途に広く使用
ESP-0716ピン1MBU.FLコネクタ外付けアンテナ対応
NodeMCU v330ピン4MBPCBアンテナブレッドボード対応の開発ボード
Wemos D1 Mini16ピン4MBPCBアンテナ小型開発ボード

動作原理

ESP8266のソフトウェアスタックは以下の構成です:

[ユーザーアプリケーション]

[SDK: Non-OS SDK / RTOS SDK]

[LwIP(Wi-Fi TCP/IPスタック)]

[Wi-Fi ドライバー(クローズドソース)]

[Xtensa L106 CPU]

Wi-Fiスタックはシングルコアを占有する時間があるため、Wi-Fi送受信中はユーザーコードの実行が一時的に遅延することがあります。これがESP8266のリアルタイム性の弱点です。

// Arduino ESP8266でWi-Fi接続する例
#include <ESP8266WiFi.h>
#include <PubSubClient.h>  // MQTTライブラリ

const char* ssid = "MySSID";
const char* password = "MyPassword";
const char* mqtt_server = "broker.example.com";

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
    Serial.begin(115200);

    // Wi-Fi接続
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("Connected!");
    Serial.println(WiFi.localIP());

    // MQTTブローカーへ接続
    client.setServer(mqtt_server, 1883);
}

void loop() {
    if (!client.connected()) {
        client.connect("ESP8266Client");
    }
    // センサーデータをパブリッシュ
    float temp = readTemperature();
    char payload[50];
    snprintf(payload, sizeof(payload), "{\"temp\":%.1f}", temp);
    client.publish("sensor/temperature", payload);
    delay(30000);  // 30秒ごとに送信
}

ATコマンドモード

ESP8266をATコマンドモジュールとして使う場合:

AT                      → OK(通信確認)
AT+CWMODE=1             → Station モードに設定
AT+CWJAP="SSID","PASS"  → Wi-Fiに接続
AT+CIPSTART="TCP","192.168.1.100",80  → TCP接続開始
AT+CIPSEND=18           → 18バイト送信準備
GET / HTTP/1.0\r\n      → HTTPリクエスト送信

用途・ユースケース

ESP8266が現在も採用される場面:

  • 低コスト量産品: Wi-Fi接続センサーで大量生産する場合のコスト削減
  • スマートプラグ・スイッチ: シンプルなWi-Fi制御デバイス(市販品に多数搭載)
  • OTAブリッジ: 別のMCUのWi-Fiモジュールとして使うATコマンドモード
  • 教育・学習: ESP32の導入前の学習ステップとして
  • 既存製品のメンテナンス: ESP8266採用製品の継続サポート

実装・開発のポイント

電源設計の注意点

ESP8266はWi-Fi送信時に最大300〜400mAの瞬間電流を要求します。電源が弱いとWi-Fi接続に失敗したりリセットが発生します:

項目
推奨電源3.3V / 500mA以上の安定化電源
デカップリングVCCピン近傍に100µF電解コンデンサ + 100nFセラミックコンデンサ
電圧絶対に3.6Vを超えないこと(チップ破損)
5V → 3.3V変換AMS1117-3.3などのLDOを使用

Flash書き込みモード

ESP8266のファームウェアはUART0(GPIO1/GPIO3)で書き込みます。書き込みモードに入るにはGPIO0をLOWにしてリセットが必要です:

# esptoolを使ったファームウェア書き込み
esptool.py --port /dev/ttyUSB0 --baud 115200 \
  write_flash -fm dout 0x00000 firmware.bin

Deep Sleep

ESP8266のDeep Sleepモードでは約20µAまで消費電流が下がります。ウェイクアップはRST端子をGPIO16でLOWにすることで行います:

// 60秒Deep Sleep後にウェイクアップ
ESP.deepSleep(60e6);  // マイクロ秒
// ハードウェア接続: GPIO16 → RST端子

他技術との比較

ESP8266 vs ESP32

項目ESP8266ESP32
CPUコア数12
最大クロック160MHz240MHz
BluetoothなしBT4.2 + BLE
GPIO数17本(実用11本程度)34本
ADC1ch(10bit)18ch(12bit)
価格非常に安いやや高い
消費電力低いやや高い
開発サポート縮小傾向活発

ESP32との比較では、新規設計でESP8266を選ぶ理由はコスト以外にほぼありません。しかし既存のESP8266採用製品や超低コスト要件では引き続き選択肢となります。

関連用語

参考リンク