ESPRESSIF SYSTEMS
Complete SoC development skill for the ESP32 family, ESP8266, ESP-IDF, Arduino core, and the full Espressif SDK ecosystem. From silicon to cloud.
@espressif
OVERVIEW
Espressif Systems builds the world's most widely deployed IoT SoCs. From the original ESP8266 that democratised Wi-Fi for makers, to the ESP32-S3 powering edge AI cameras, to the ESP32-C6 bringing Matter and Thread to smart homes. 147+ open-source repositories on GitHub.
SOC FAMILIES
Eight SoC families spanning Xtensa and RISC-V architectures. Each targets a different price/performance/radio combination.
| SoC | CPU | Wi-Fi | BLE | 802.15.4 | Key Feature |
|---|---|---|---|---|---|
| ESP32 | Xtensa LX6, 2x240MHz | b/g/n | 4.2 | — | Original workhorse, PSRAM, CAN |
| ESP32-S2 | Xtensa LX7, 1x240MHz | b/g/n | — | — | USB-OTG, Secure Boot V2 |
| ESP32-S3 | Xtensa LX7, 2x240MHz | b/g/n | 5.0 | — | AI vector instructions, camera, voice |
| ESP32-C3 | RISC-V, 1x160MHz | b/g/n | 5.0 | — | Low cost RISC-V, small footprint |
| ESP32-C6 | RISC-V, 1x160MHz + LP | Wi-Fi 6 | 5.3 | Thread/Zigbee | Tri-radio, Thread Border Router |
| ESP32-H2 | RISC-V, 1x96MHz | — | 5.3 | Thread/Zigbee | No Wi-Fi, ultra-low power endpoint |
| ESP32-P4 | RISC-V, 2x400MHz | — | — | — | No radio, MIPI-CSI/DSI, USB 2.0 HS |
| ESP8266 | Tensilica L106, 80MHz | b/g/n | — | — | Legacy, still deployed. Use C3 for new |
General IoT: ESP32 or ESP32-C3. Edge AI / Camera: ESP32-S3. Matter / Thread: ESP32-C6 (with Wi-Fi) or ESP32-H2 (without). USB devices: ESP32-S2. HMI / Display: ESP32-P4. Cost-optimised sensor: ESP32-C3.
ESP-IDF FRAMEWORK
The primary development framework. FreeRTOS-based, component-driven, with menuconfig for build-time configuration.
Project Structure
my_project/
+-- CMakeLists.txt # Top-level build
+-- sdkconfig # Generated config
+-- partitions.csv # Flash partition table
+-- main/
| +-- CMakeLists.txt # Component build
| +-- main.c # Entry point (app_main)
| +-- Kconfig.projbuild # Custom menuconfig
+-- components/ # Custom components
+-- my_driver/
+-- CMakeLists.txt
+-- include/my_driver.h
+-- my_driver.c
Build, Flash, Monitor
. $IDF_PATH/export.sh # Setup environment
idf.py set-target esp32s3 # Select SoC
idf.py menuconfig # Configure
idf.py build # Build
idf.py -p /dev/ttyUSB0 flash monitor # Flash + serial
Key APIs
| Subsystem | API | Notes |
|---|---|---|
| Wi-Fi | esp_wifi_init(), esp_wifi_connect() | Station, AP, provisioning |
| BLE | NimBLE stack (preferred) | GATT server/client, mesh |
| GPIO | gpio_config(), ISR service | 34 GPIO on ESP32 |
| SPI/I2C | spi_bus_initialize() | Master/slave, DMA |
| MQTT | esp_mqtt_client_init() | TLS, QoS 0/1/2, LWT |
| HTTP | esp_http_client, httpd | Client + embedded server |
| OTA | esp_https_ota() | HTTPS + rollback |
| NVS | nvs_open(), nvs_set_*() | Key-value flash storage |
| Console | esp_console | REPL over UART for debug |
ARDUINO CORE
Arduino-compatible layer on top of ESP-IDF. setup()/loop() model with full access to ESP-IDF APIs underneath.
// Board Manager URL:
// https://espressif.github.io/arduino-esp32/package_esp32_index.json
// PlatformIO:
// platform = espressif32
#include <WiFi.h>
#include "esp_wifi.h" // Can still use ESP-IDF directly
void setup() {
Serial.begin(115200);
WiFi.begin("SSID", "password");
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println(WiFi.localIP());
}
void loop() {
// Your application logic
}
SDKS & FRAMEWORKS
| SDK | Purpose | Chips |
|---|---|---|
| ESP-Matter | Matter smart home protocol. Commission via QR/BLE. Thread Border Router on C6 | ESP32, C3, S3, C6, H2 |
| ESP-RainMaker | End-to-end IoT platform: provisioning, cloud, mobile apps, OTA, scenes | All ESP32 |
| ESP-NOW | Connectionless Wi-Fi P2P. 250-byte packets, 200m range, encrypted, 20 peers | All ESP32 + ESP8266 |
| ESP-AT | AT command firmware. Control ESP32 as modem from external MCU via UART | ESP32, C3, C6 |
| ESP-Mesh-Lite | Self-healing Wi-Fi mesh. Root connects to router, nodes relay. IP layer | All ESP32 |
| ESP-SR | On-device wake word + command recognition. AEC, BSS, NS for far-field | ESP32-S3 |
| ESP-DL | Neural network inference. INT8/INT16 quantised models. MobileNet, TFLite | ESP32-S3 |
| ESP-WHO | Camera + AI. Face detection/recognition, human detection, QR reader | ESP32-S3 |
| ESP-Zigbee | Zigbee 3.0. Coordinator, Router, End Device. ZCL, Green Power | C6, H2 |
| ESP-DSP | Digital signal processing library. FFT, FIR/IIR filters, matrix ops | All ESP32 |
SECURITY
Secure Boot V2 (S2/S3/C3/C6/H2)
RSA-3072 or ECDSA signature verification on every boot. Key digest burned to eFuse — irreversible.
Flash Encryption
AES-XTS (S2/S3/C3/C6) or AES-256 (original ESP32). Development mode allows re-flash; Release mode is permanent.
Secure OTA
esp_http_client_config_t config = {
.url = "https://ota.example.com/firmware.bin",
.cert_pem = server_cert,
};
esp_https_ota_config_t ota_config = {
.http_config = &config,
};
esp_https_ota(&ota_config); // Download, verify, install, reboot
Enabling Secure Boot or Flash Encryption burns one-time programmable fuses. In Release mode this is irreversible — you cannot re-flash without the signing key. Always test in Development mode first.
POWER MANAGEMENT
| Mode | Current | Wake Sources | Use Case |
|---|---|---|---|
| Active | ~240 mA (Wi-Fi TX) | — | Processing, transmitting |
| Modem Sleep | ~20 mA | Timer, GPIO | Wi-Fi connected, low duty |
| Light Sleep | ~0.8 mA | Timer, GPIO, touch, UART | Periodic sensing |
| Deep Sleep | ~10 uA | Timer, EXT0/EXT1, touch, ULP | Battery sensors |
| Hibernation | ~5 uA | EXT0 only | Ultra-low duty |
ULP Coprocessor
Runs during deep sleep. Reads ADC, GPIO, I2C. Wakes main CPU when threshold met. Assembly (ESP32) or RISC-V C (S2/S3).
DEVELOPMENT TOOLS
| Tool | Purpose |
|---|---|
| ESP-IDF VS Code Extension | Full IDE: menuconfig GUI, flash, monitor, OpenOCD debug |
| PlatformIO | pio run -t upload -t monitor. Multi-board, dependency management |
| esptool.py | Direct flash: esptool.py --chip esp32s3 write_flash 0x0 firmware.bin |
| ESP-Prog | JTAG debugger hardware. Supports OpenOCD |
| ESP-Launchpad | Web-based flashing via WebSerial API |
| ESP Insights | Remote diagnostics: crash logs, metrics, OTA status |
KEY GITHUB REPOSITORIES
147+ repos under github.com/espressif. The essential ones:
| Repo | Purpose |
|---|---|
| esp-idf | Core IoT Development Framework |
| arduino-esp32 | Arduino core for ESP32 |
| esp-matter | Matter protocol SDK |
| esp-rainmaker | Cloud IoT platform |
| esp-now | Connectionless Wi-Fi protocol |
| esp-sr | Speech recognition |
| esp-dl | Deep learning inference |
| esp-who | Camera AI pipeline |
| esp-zigbee-sdk | Zigbee 3.0 stack |
| esp-hosted | Communication processor firmware |
| esp-at | AT command firmware |
| esp-dsp | Digital signal processing |