概要
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はその低コストと小型さから引き続き需要がありました。
技術仕様
チップスペック
| 項目 | 値 |
|---|---|
| CPU | Xtensa L106 シングルコア(最大160MHz、通常80MHz) |
| ROM | 64KB(命令用)+ 96KB(データ用) |
| SRAM | 160KB(システム)+ 無線スタック用は別途 |
| 外部Flash | 512KB〜16MB(SPI接続) |
| Wi-Fi | IEEE 802.11 b/g/n 2.4GHz、最大速度: 72.2Mbps(802.11n)、モード: Station / AP / Station+AP |
| GPIO | 17本(モジュールにより実使用可能本数は異なる) |
| ADC | 1ch(10bit、0〜1V入力) |
| UART | 2本(UART0はプログラム書き込み兼用) |
| SPI | 2本(SPI0はFlash接続用) |
| I2C | ソフトウェアI2C(1本) |
| I2S | 1本 |
| PWM | ソフトウェアPWM(最大1000Hz) |
| 動作電圧 | 3.0〜3.6V(最大3.6V!5V非対応) |
| 消費電流 | Wi-Fi送信時 170mA(ピーク)、Deepsleep 20µA |
代表的なモジュール
| モジュール | ピン数 | フラッシュ | アンテナ | 特徴 |
|---|---|---|---|---|
| ESP-01 | 8ピン | 1MB | チップアンテナ | 最小構成、ATコマンド用 |
| ESP-12E/F | 22ピン | 4MB | PCBアンテナ | GPIOが多く開発用途に広く使用 |
| ESP-07 | 16ピン | 1MB | U.FLコネクタ | 外付けアンテナ対応 |
| NodeMCU v3 | 30ピン | 4MB | PCBアンテナ | ブレッドボード対応の開発ボード |
| Wemos D1 Mini | 16ピン | 4MB | PCBアンテナ | 小型開発ボード |
動作原理
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
| 項目 | ESP8266 | ESP32 |
|---|---|---|
| CPUコア数 | 1 | 2 |
| 最大クロック | 160MHz | 240MHz |
| Bluetooth | なし | BT4.2 + BLE |
| GPIO数 | 17本(実用11本程度) | 34本 |
| ADC | 1ch(10bit) | 18ch(12bit) |
| 価格 | 非常に安い | やや高い |
| 消費電力 | 低い | やや高い |
| 開発サポート | 縮小傾向 | 活発 |
ESP32との比較では、新規設計でESP8266を選ぶ理由はコスト以外にほぼありません。しかし既存のESP8266採用製品や超低コスト要件では引き続き選択肢となります。