Embedded

ESP32 vs ESP8266

By CourseTron Team ·  7 min read ·  Updated Oct 2026 💬 𝕏 in f
Table of Contents
    ? Print / Save as PDF

    In short: The ESP8266 is a cheap, single-core Wi-Fi-only chip that still suits simple sensor nodes, while the ESP32 adds a second core, far more RAM, Bluetooth/BLE and a richer set of peripherals, making it the right default for almost every new design.

    Two chips, one family, very different ambitions

    Espressif released the ESP8266 in 2014 as a Wi-Fi bridge that happened to contain a capable CPU. Hobbyists discovered they could run their own code on it and a whole ecosystem followed. The ESP32 (2016) was designed from the start as a full microcontroller with radios attached. That difference in intent explains almost every row of the comparison below. If you are also weighing these against classic boards, our ESP32 vs Arduino guide covers that side of the decision.

    Cores and clock speed

    The ESP8266 uses a single Tensilica L106 32-bit core running at 80 MHz, which can be pushed to 160 MHz. The ESP32 uses two Xtensa LX6 cores (PRO_CPU and APP_CPU) at up to 240 MHz. In practice the second core matters more than raw clock: the Wi-Fi and Bluetooth stacks on the ESP32 run under FreeRTOS and can be pinned to core 0, leaving core 1 for your application loop.

    On the ESP8266 the Wi-Fi stack shares the only core with your code. If your loop() blocks for a few hundred milliseconds, the stack starves and the watchdog resets the chip. That is the single most common beginner crash on the platform, and it is solved architecturally, not by clever coding, on the ESP32.

    Key fact: the ESP32 can run a blocking sensor-read routine on one core while the other keeps the TCP connection alive, which the single-core ESP8266 cannot do without cooperative yield() calls.

    Task scheduling: one core vs two cores ESP8266 (80 MHz) Core 0: your code Wi-Fi stack (same core) Both fight for one CPU Long loop = Wi-Fi starves = reset ESP32 (up to 240 MHz) Core 0 Wi-Fi / BT Core 1 Your app 520 KB shared SRAM Radio work is isolated from app work CourseTron · coursetron.com
    With one core, application code and the Wi-Fi stack compete; the ESP32 lets you separate them.

    RAM and flash

    The ESP8266 has roughly 80 KB of data RAM, of which a typical Arduino sketch with Wi-Fi and TLS leaves 30 to 50 KB free. A single HTTPS handshake can need 20 to 30 KB for buffers, so secure connections are fragile. The ESP32 has 520 KB of internal SRAM and optionally 4 to 8 MB of external PSRAM on modules such as the WROVER. Flash is external for both, usually 1 to 4 MB on ESP8266 boards and 4 to 16 MB on ESP32 boards.

    Concretely: parsing a 20 KB JSON weather response with ArduinoJson is routine on the ESP32 and a heap-fragmentation gamble on the ESP8266. Over-the-air updates need free flash for two images, so small ESP8266 modules with 1 MB flash leave roughly 500 KB for your firmware.

    Wireless: Wi-Fi and Bluetooth

    Both chips support 802.11 b/g/n at 2.4 GHz, with up to 72.2 Mbit/s PHY rate in 20 MHz mode. Neither supports 5 GHz. The headline difference is Bluetooth: the ESP8266 has none, while the original ESP32 supports Bluetooth Classic (BR/EDR) plus Bluetooth Low Energy 4.2. That enables phone provisioning (send the Wi-Fi password over BLE), beacons, and BLE sensor gateways. Newer variants differ: the ESP32-S3 adds BLE 5, and the RISC-V ESP32-C3 is single-core but still includes BLE 5, so "ESP32" is really a family.

    Key fact: Wi-Fi and Bluetooth on the ESP32 share one 2.4 GHz radio, so heavy simultaneous use means time-slicing and lower throughput for both.

    GPIO count and pin quirks

    The ESP8266 exposes 17 GPIO numbers, but on a typical NodeMCU or Wemos D1 mini only about 9 to 11 are practical. GPIO0, GPIO2 and GPIO15 are strapping pins that decide boot mode, and GPIO6 to GPIO11 talk to the flash chip and must be left alone. The ESP32-WROOM-32 has up to 34 GPIO numbers with roughly 25 safely usable. Its quirks are different: GPIO34 to GPIO39 are input-only with no pull-ups, and GPIO12 is a strapping pin that selects flash voltage, so a pull-up there can stop boot.

    The ESP32 also routes almost any peripheral to almost any pin through its GPIO matrix, offers 16 LEDC PWM channels, two I2S, three UARTs, 10 capacitive touch inputs and two 8-bit DACs. The ESP8266 has software-driven PWM and a single UART plus a transmit-only second one.

    ADC quality: the overlooked difference

    FeatureESP8266ESP32
    CPU1 x L106, 80/160 MHz2 x LX6, up to 240 MHz
    Data RAM~80 KB520 KB (+ PSRAM option)
    Wi-Fi802.11 b/g/n802.11 b/g/n
    BluetoothNoneClassic + BLE 4.2
    GPIO (chip / usable)17 / ~1134 / ~25
    ADC1 channel, 10-bit, 0 to 1 VUp to 18 channels, 12-bit, 2 units
    DACNone2 x 8-bit

    The ESP8266 has exactly one ADC input (A0) with 10-bit resolution, meaning 1024 steps over about 0 to 1 V, so each step is roughly 1 mV. Dev boards add a resistor divider to accept 3.3 V, which costs further accuracy. The ESP32 offers 12-bit conversion (4096 steps) across many channels, but its SAR ADC is notoriously nonlinear: readings flatten near 0 V and near full scale unless you apply the calibration eFuse data through Espressif's esp_adc_cal routines. ADC2 channels are also unavailable while Wi-Fi is active on the original ESP32, which surprises many people who wired a sensor to GPIO25 or GPIO27. Use ADC1 pins (GPIO32 to GPIO39) for Wi-Fi projects, and for precise measurement add an external ADS1115 over I2C on either chip.

    Animated: same sine input, 10-bit vs 12-bit steps ESP8266: 1024 levels, 0 to 1 V ESP32: 4096 levels (finer steps, needs calibration) CourseTron · coursetron.com
    The marker sweeps along the analog waveform; the ESP32 quantises it into four times as many levels.

    Power, price and software ecosystem

    Active current is about 70 to 80 mA for the ESP8266 and 80 to 240 mA for the ESP32 during Wi-Fi transmit. Deep sleep is where the ESP8266 historically wins in simplicity at about 20 µA, while the ESP32 reaches roughly 10 µA with its ultra-low-power coprocessor enabled, which can poll a sensor while the main cores sleep. Prices have converged: ESP8266 modules cost about 1.5 to 2 USD in volume and ESP32 modules about 2 to 4 USD, so the saving rarely justifies the limitations.

    Both run under the Arduino core and MicroPython. Espressif's own ESP-IDF supports the ESP32 fully, while the ESP8266 RTOS SDK is in maintenance mode. For production products, that matters more than any benchmark. Teams that later spin custom silicon often prototype wireless sub-systems like this before moving to full ASIC flows with Cadence or Synopsys tools, and Avecas design services help bridge that gap. Our ESP32 deep sleep guide goes deeper on battery design.

    How to choose

    • Pick the ESP8266 for a single-sensor Wi-Fi node, a relay or smart plug, or when you maintain an existing fleet with known firmware.
    • Pick the ESP32 for anything needing BLE, more than one analog input, TLS-heavy cloud connections, camera or display work, or two concurrent tasks.
    • Pick an ESP32-C3 if you want the lowest-cost modern part with BLE 5 and a RISC-V core.

    For new designs, default to the ESP32 family and justify the ESP8266 on the bill of materials, not the other way round.

    Decision flow Need Bluetooth / BLE? Yes Choose ESP32 No Over 3 I/O, TLS, or 2 tasks? No ESP8266 is enough Yes CourseTron · coursetron.com
    Two questions settle most real-world choices.

    Ready to build real wireless products? Explore the embedded and IoT tracks on our CourseTron courses page, and see our ChipXpert training programs for hands-on silicon-level learning.

    FAQ

    Is the ESP8266 obsolete?

    Not obsolete, but it is a mature part with limited headroom. It still ships in millions of cheap devices, though new feature work happens on the ESP32 family.

    Can the ESP8266 do Bluetooth?

    No. It has no Bluetooth radio. You would need an external module or choose an ESP32.

    Which has the better ADC?

    The ESP32 has more channels and 12-bit resolution, but it is nonlinear without calibration. The ESP8266 has one 10-bit channel limited to about 1 V.

    Can I reuse my ESP8266 code on ESP32?

    Mostly yes in the Arduino framework, but you must adjust library names (for example ESP8266WiFi to WiFi), pin numbers and any use of the ESP8266-specific yield behavior.

    Advertisement