Blog

ESP-01 ESP8266 Serial WiFi Module – Complete Guide

Serial WiFi Module

ESP-01 ESP8266 Serial WiFi Module

Add WiFi to Any Microcontroller Project via UART

The ESP-01 is the smallest, most stripped-down way to work with the ESP8266 chip - a tiny castellated-pin breakout carrying just the chip itself, its antenna trace, and almost nothing else, originally intended exactly as its ”01” naming suggests: a plug-in WiFi modem for an existing microcontroller, controlled entirely over UART using AT commands, the same idea as a cellular modem module but for WiFi instead. That makes it a genuinely different use case from a full NodeMCU development board: rather than replacing your microcontroller, the ESP-01 sits alongside one - an Arduino Uno, for example - receiving simple AT commands like ”connect to this WiFi network” or ”open a TCP connection to this server” over serial and reporting results back the same way, so a project that already has its logic running on another chip can gain WiFi connectivity without a redesign. Advanced users can also flash different firmware onto it to run their own application code directly on the module, but out of the box it ships running Espressif's AT command firmware.

WiFi (802.11 b/g/n)
Connectivity
UART (AT Commands)
Control
2 GPIO
Exposed Pins

Key features

Tiny Footprint

One of the smallest WiFi-capable modules available for hobby use.

AT Command Control

Add WiFi to an existing project over UART with no new microcontroller.

Built-In PCB Antenna

Ready to use without any external antenna hardware.

Low Cost

An inexpensive way to prototype WiFi connectivity.

Reflashable Firmware

Advanced users can load custom firmware to run code directly on the module.

Deep Sleep Support

Capable of low-power modes for battery-conscious designs.

Technical specifications

Supply Voltage 3.3V ONLY (not 5V tolerant)
Microcontroller Tensilica L106 32-bit
WiFi 802.11 b/g/n, 2.4GHz
Interface UART (default 115200 or 9600 baud, firmware-dependent)
Flash Memory Typically 1MB
GPIO Exposed 2 usable pins (GPIO0, GPIO2) plus UART
Default Firmware Espressif AT command set
Antenna Onboard PCB trace antenna
Package 8-pin castellated-edge module

Pinout

PinFunction
VCC 3.3V power supply
GND Ground
TX / RX UART serial data
CH_PD / EN Chip enable - tie HIGH to run
RST Reset input
GPIO0 / GPIO2 General-purpose I/O (also affect boot mode)

Applications

Adding WiFi to an existing Arduino project Simple WiFi-to-serial bridges Low-cost IoT sensor nodes Remote relay/switch control over WiFi DIY WiFi data upload for existing sketches Learning AT-command-based networking

What's in the box

1x ESP-01 ESP8266 module

Downloads

Datasheet (PDF) Arduino AT-Command WiFi Bridge Example Sketch
🔌
Pin Connections
1 Table
Pin Connections Table 1
BoardSensor PinConnection
ESP-01VCC/GND/TX/RX3.3V only / GND / board RX pin / board TX pin
📟
ESP-01 ESP8266 Serial WiFi Module
7 Examples • C/C++ | Boards: Arduino Uno, Arduino Nano, Arduino Mega, ESP32, ESP8266, STM32, Raspberry Pi Pico
ESP-01 ESP8266 Serial WiFi Module - Arduino Uno
ESP-01 ESP8266 Serial WiFi Module - Arduino Nano
ESP-01 ESP8266 Serial WiFi Module - Arduino Mega
ESP-01 ESP8266 Serial WiFi Module - ESP32
ESP-01 ESP8266 Serial WiFi Module - ESP8266
ESP-01 ESP8266 Serial WiFi Module - STM32
ESP-01 ESP8266 Serial WiFi Module - Raspberry Pi Pico
📄 File: esp-01_esp8266_serial_wifi_module_-_arduino_uno.inoArduino Uno
462 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// RX=2, TX=3 on Arduino Uno. 3.3V-only for power AND logic.
6#include <SoftwareSerial.h>
7SoftwareSerial LINK_SERIAL(2, 3);
8
9void setup() {
10 Serial.begin(115200);
11 LINK_SERIAL.begin(115200);
12 LINK_SERIAL.println("AT");
13 LINK_SERIAL.println("AT+CWMODE=1");
14}
15
16void loop() {
17 if (LINK_SERIAL.available()) Serial.write(LINK_SERIAL.read());
18 if (Serial.available()) LINK_SERIAL.write(Serial.read());
19}
📄 File: esp-01_esp8266_serial_wifi_module_-_arduino_nano.inoArduino Nano
463 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// RX=2, TX=3 on Arduino Nano. 3.3V-only for power AND logic.
6#include <SoftwareSerial.h>
7SoftwareSerial LINK_SERIAL(2, 3);
8
9void setup() {
10 Serial.begin(115200);
11 LINK_SERIAL.begin(115200);
12 LINK_SERIAL.println("AT");
13 LINK_SERIAL.println("AT+CWMODE=1");
14}
15
16void loop() {
17 if (LINK_SERIAL.available()) Serial.write(LINK_SERIAL.read());
18 if (Serial.available()) LINK_SERIAL.write(Serial.read());
19}
📄 File: esp-01_esp8266_serial_wifi_module_-_arduino_mega.inoArduino Mega
431 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// RX=19, TX=18 on Arduino Mega. 3.3V-only for power AND logic.
6#define LINK_SERIAL Serial1
7
8void setup() {
9 Serial.begin(115200);
10 LINK_SERIAL.begin(115200);
11 LINK_SERIAL.println("AT");
12 LINK_SERIAL.println("AT+CWMODE=1");
13}
14
15void loop() {
16 if (LINK_SERIAL.available()) Serial.write(LINK_SERIAL.read());
17 if (Serial.available()) LINK_SERIAL.write(Serial.read());
18}
📄 File: esp-01_esp8266_serial_wifi_module_-_esp32.inoESP32
424 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// RX=16, TX=17 on ESP32. 3.3V-only for power AND logic.
6#define LINK_SERIAL Serial1
7
8void setup() {
9 Serial.begin(115200);
10 LINK_SERIAL.begin(115200);
11 LINK_SERIAL.println("AT");
12 LINK_SERIAL.println("AT+CWMODE=1");
13}
14
15void loop() {
16 if (LINK_SERIAL.available()) Serial.write(LINK_SERIAL.read());
17 if (Serial.available()) LINK_SERIAL.write(Serial.read());
18}
📄 File: esp-01_esp8266_serial_wifi_module_-_esp8266.inoESP8266
462 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// RX=D7, TX=D8 on ESP8266. 3.3V-only for power AND logic.
6#include <SoftwareSerial.h>
7SoftwareSerial LINK_SERIAL(D7, D8);
8
9void setup() {
10 Serial.begin(115200);
11 LINK_SERIAL.begin(115200);
12 LINK_SERIAL.println("AT");
13 LINK_SERIAL.println("AT+CWMODE=1");
14}
15
16void loop() {
17 if (LINK_SERIAL.available()) Serial.write(LINK_SERIAL.read());
18 if (Serial.available()) LINK_SERIAL.write(Serial.read());
19}
📄 File: esp-01_esp8266_serial_wifi_module_-_stm32.inoSTM32
427 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// RX=PA10, TX=PA9 on STM32. 3.3V-only for power AND logic.
6#define LINK_SERIAL Serial1
7
8void setup() {
9 Serial.begin(115200);
10 LINK_SERIAL.begin(115200);
11 LINK_SERIAL.println("AT");
12 LINK_SERIAL.println("AT+CWMODE=1");
13}
14
15void loop() {
16 if (LINK_SERIAL.available()) Serial.write(LINK_SERIAL.read());
17 if (Serial.available()) LINK_SERIAL.write(Serial.read());
18}
📄 File: esp-01_esp8266_serial_wifi_module_-_raspberry_pi_pico.inoRaspberry Pi Pico
434 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// RX=1, TX=0 on Raspberry Pi Pico. 3.3V-only for power AND logic.
6#define LINK_SERIAL Serial1
7
8void setup() {
9 Serial.begin(115200);
10 LINK_SERIAL.begin(115200);
11 LINK_SERIAL.println("AT");
12 LINK_SERIAL.println("AT+CWMODE=1");
13}
14
15void loop() {
16 if (LINK_SERIAL.available()) Serial.write(LINK_SERIAL.read());
17 if (Serial.available()) LINK_SERIAL.write(Serial.read());
18}
Bare ESP-01 WiFi module - used as a UART AT-command WiFi peripheral for another board.
This is the single most common way people damage an ESP-01: it must be powered and have its logic pins driven at 3.3V, never 5V, so when pairing with a 5V Arduino Uno, use a separate 3.3V supply capable of at least 300mA and level-shift the Arduino's TX line down to 3.3V before it reaches the module's RX pin. The castellated pin spacing doesn't match a standard breadboard, so a cheap ESP-01 breakout adapter board is close to essential for prototyping with one. And the CH_PD/EN pin must be pulled HIGH for the module to power on and run at all - leaving it floating or LOW is a common ”module does nothing” mistake.