# [ESP8266: Pinout, Minimal Circuit and Technical Specifications](https://blog.hirnschall.net/esp8266-reference/)

author: [Sebastian Hirnschall](https://blog.hirnschall.net/about/)

meta description: Datasheet-accurate pinout for ESP-01, ESP-01S, ESP-07, ESP-12E/F. Covers boot mode pin states, minimal circuits, and rst pin differences per module.

meta title: ESP8266 GPIO Reference: Pinout, Boot Modes & Circuit

date published: 09.01.2023 (DD.MM.YYYY format)
date last modified: 03.04.2026 (DD.MM.YYYY format)

---

Introduction
------------

In recent years the ESP8266 has become one of my go-to choices for smart home/IoT devices or projects requiring WiFi. It is cheap [(around $1.5 on Amazon)1](https://amzn.to/3r9XX2D), has WiFi, and can be programmed using the Arduino IDE, making it an easy replacement for Arduinos if we need WiFi connectivity.

This post concentrates on the technical specifications of different ESP8266 modules and the minimal circuit required to use each ESP module. It is part of [a complete ESP8266 reference you can find here.](https://blog.hirnschall.net/esp8266/)

Technical Specification
-----------------------

The information in this chapter is primarily taken from the datasheets of the different modules [8,9,10,11,12].

### Power:

* Supply Voltage: 2.8-3.6V
* avg. current: 80mA
* Max current: 430mA
* avg. Light Sleep current: 0.4-1.8mA
* avg. Deep Sleep current: 20µA

### Memory:

* RAM: 80kB
* Cache: 32kB
* Flash Memory: up to 16MB external flash
* Max Program size: 1MB

### Connectivity:

* Digital I/O: 11 programmable pins, 12mA max.
* Analog in: 1 pin, 0-1V, 10 bit resolution
* Serial: 1 SPI, 1 IIC, 1 UART, 1 UART (output only)
* WiFi: 802.11 b/g/n 2.4GHz, WPA/WPA2 PSK
* IPv4 and IPv6 (with Arduino Core 2.5.0 or later)
* UDP and TCP, max 5 simultaneous connections
* Ping: 4-10ms (up to 200 on crowded channels)
* Soft-AP, up to 4 simultaneous connections

ESP-01 and ESP-1
----------------

The ESP-01 and ESP-1 modules are among the cheapest options. They feature eight exposed pins (2.54mm pin header), of which only two are usable GPIO pins. The modules differ in the following way:

| Module | Flash memory | LEDs | Other |
| --- | --- | --- | --- |
| AI-Thinker ESP-01 | 512kB (blue) or 1MB (black) | Power (red), GPIO2 (green) |  |
| AZ-Delivery ESP-01S | 1MB | GPIO2 (blue) | additional pull-up resistor on EN pin |
| DOIT ESP-1 (ESP82855) | 1MB | TxD (blue) |  |

Table 2.1: ESP-01, ESP-01S and ESP-1 modules compared

### Minimal Circuit

The minimal circuit required to run an ESP-01 is shown in Fig. 2.1 below. Pins 2, 4, and 6 need to be connected to VCC, while pin 7 has to be connected to ground. Pulling pin 3 low during boot enables the firmware upload mode. As always, a decoupling capacitor is placed close to the microcontroller.

![esp8266 esp-01 minimal standalone circuit diagram scetch](https://blog.hirnschall.net/esp8266-reference/resources/img/esp-01-minimal.png)


Figure 2.1: ESP-01 minimal circuit

### Pinout

| Pin No. | Name | Description | Behavior on boot |
| --- | --- | --- | --- |
| 1 | GPIO3 (RxD) | Serial input/GPIO | pulled high |
| 2 | VCC | +3.3V, uses up to 430mA | pulled high |
| 3 | GPIO0 | low on boot to enter programming mode, high or floating for normal boot |  |
| 4 | RESET | low to reset, see Fig. 2.2 |  |
| 5 | GPIO2 (TxD1) | normal gpio | serial output, not allowed to be low |
| 6 | CHIP\_EN | high to enable chip, low to shut down |  |
| 7 | GND | ground |  |
| 8 | GPIO1 (TxD) | serial output or normal gpio | serial output, not allowed to be low |

Table 2.2: ESP-01, ESP-01S and ESP-1 pin names and behavior on boot

### Reset Pin differences

Furthermore, the modules differ slightly in how the reset pin circuit is realized. Figure 2.2 below shows how the module's pin 1 (labeled "1") is connected to the ESP8266's reset pin (labeled "RST").

![esp8266 esp-01 reset pin circuit diagram scetch](https://blog.hirnschall.net/esp8266-reference/resources/img/reset-01-blue.png)


(a) ESP-01 blue




![esp8266 esp-01 reset pin circuit diagram scetch](https://blog.hirnschall.net/esp8266-reference/resources/img/reset-01-black.png)


(b) ESP-01 black




![esp8266 esp-01s reset pin circuit diagram scetch](https://blog.hirnschall.net/esp8266-reference/resources/img/reset-01S.png)


(c) ESP-01S and ESP-1



Figure 2.2: ESP-01, ESP-01S and ESP-1 reset pin comparison [1]

ESP-07 and ESP-12
-----------------

In contrast to the ESP-01 module, the ESP-07 and ESP-12 modules have additional flash memory and more exposed pins. While the ESP-07 has 16 exposed pins, the ESP-12E and F modules have 22 pins, of which six are unusable.

| Module | Flash memory | LEDs | Other |
| --- | --- | --- | --- |
| ESP-07 | 1MB | Power (red), GPIO2 (blue) | Built in ceramic antenna, external antenna can be used (remove capacitor!) |
| ESP-07S | 1MB | no LEDs | requires external antenna |
| ESP-12S | 4MB | GPIO2 (blue) | built in antenna only |
| ESP-12E ESP-12F | 4MB | GPIO2 (blue) | built in antenna only  6 additional, unusable, pins |

Table 2.3: ESP-07 and ESP-12 modules compared

### Minimal Circuit

Although the minimal circuit required to run the ESP-07 and ESP-12E/F is similar to ESP-01's, the pinout has changed. Pins 1, 3, and 8 need to be connected to VCC, while pin 7 has to be connected to ground. Additionally, pin 16 (gpio15) has to be pulled LOW during boot. Pulling pin 18 (gpio0) low during boot enables the firmware upload mode. Again, a decoupling capacitor is placed close to the microcontroller.

![esp8266 esp-12, esp-07 minimal standalone circuit diagram scetch](https://blog.hirnschall.net/esp8266-reference/resources/img/esp-12-minimal.png)


Figure 2.3: ESP-07 and ESP-12 minimal circuit

### Pinout

| Pin No. | Name | Description | Behavior on boot |
| --- | --- | --- | --- |
| 1 | RESET | low to reset, see Fig. 2.4 |  |
| 2 | ADC | analog input, 0-1V |  |
| 3 | CHIP\_EN | high to enable chip, low to shut down |  |
| 4 | GPIO16 | gpio (no PWM), wakeup timer output when using deep sleep | emits high pulse |
| 5 | GPIO14 (SCK) | normal gpio or serial clock (SPI) | pulled high |
| 6 | GPIO12 (MISO) | normal gpio or master input slave output (SPI) | pulled high |
| 7 | GPIO13 (MOSI) | normal gpio or master output slave input (SPI) | pulled high |
| 8 | VCC | +3.3V, uses up to 430mA | pulled high |
| 9 |  | already used to connect to built-in flash memory |  |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 | GND | ground |  |
| 16 | GPIO15 (CS) | normal gpio or chip select (SPI) | has to be pulled low |
| 17 | GPIO2 (TxD1) | normal gpio, connected to blue LED (illuminate on low) | serial output, not allowed to be low |
| 18 | GPIO0 | low on boot to enter programming mode, high or floating for normal boot |  |
| 19 | GPIO4 | normal gpio |  |
| 20 | GPIO5 | normal gpio |  |
| 21 | GPIO3 (RxD) | Serial input/GPIO | pulled high |
| 22 | GPIO1 (TxD) | serial output or normal gpio | serial output, not allowed to be low |

Table 2.4: ESP-07 and ESP-12 pin names and behavior on boot

### Reset Pin differences

Furthermore, the modules differ slightly in how the reset pin circuit is realized. Figure 2.2 below shows how the module's pin 1 (labeled "1") is connected to the ESP8266's reset pin (labeled "RST").

![esp8266 esp-07 reset pin circuit diagram scetch](https://blog.hirnschall.net/esp8266-reference/resources/img/reset-07.png)


(a) ESP-07




![esp8266 esp-07s reset pin circuit diagram scetch](https://blog.hirnschall.net/esp8266-reference/resources/img/reset-07s.png)


(b) ESP-07S and ESP12S




![esp8266 esp-12e and esp-12f reset pin circuit diagram scetch](https://blog.hirnschall.net/esp8266-reference/resources/img/reset-12ef.png)


(c) ESP-12E and ESP-12F



Figure 2.4: ESP-07, ESP-07S, ESP-12S, ESP-12E, and ESP-12F reset pin comparison [1]

Limitations
-----------

Although the ESP8266 is a great chip, it has several drawbacks.

* The analog input has up to 20% error [8]. Turning off WiFi before reading an analog signal can help reduce the error, as discussed in [1].
* Waking up from deep sleep requires a reset of the chip, causing data in RAM to be lost.
* The RTC is inaccurate in deep-sleep.
* ESP.deepSleep() sometimes does not enter deep sleep correctly [1,6]. Using delay(100) after ESP.deepSleep() helps to mitigate this problem.
* The ESP has no real multitasking, so we must give the WiFi enough time to do the required tasks. This is done in between calls to loop() or during delay() or yield() calls, as discussed in [13]. If not, the ESP's watchdog resets the module.

More Info
---------

This post is part of a complete ESP8266 reference/guide. You can find more information on how to use your ESP8266 module effectively at [blog.hirnschall.net/esp8266/](https://blog.hirnschall.net/esp8266/).