To connect to a WiFi terminal module like the ESP-01S on a Raspberry Pi, you must wire the module's UART TX/RX pins to the Pi's GPIO 14 and 15, supply a strict 3.3V to VCC, and bridge the grounds. This creates a hardware serial-to-WiFi bridge, allowing the Pi to offload network tasks or act as a remote serial console over the air. Because the ESP8266 chipset is highly sensitive to voltage sags and logic-level mismatches, precision in your physical wiring and decoupling is mandatory.
Terminal Pin Mapping and Electrical Specifications
Before cutting wire or plugging in jumpers, review the physical terminal mapping. The Raspberry Pi 4 (and Pi 3) uses the BCM2711/BCM2837 SoC, which operates its GPIO bank at exactly 3.3V. The ESP-01S (the black-PCB variant with 1MB flash and an improved onboard LDO compared to the older blue ESP-01) is also a 3.3V logic device. This means we can wire them directly without a logic level shifter, provided we respect the current limits.
| Pi Physical Pin | Pi BCM GPIO | ESP-01S Terminal | Function | Wire Color | Voltage / Logic |
|---|---|---|---|---|---|
| Pin 1 | 3V3 Power | VCC | Main Power Supply | Red | 3.28V - 3.32V DC |
| Pin 6 | GND | GND | Common Ground Return | Black | 0V Reference |
| Pin 8 | GPIO 14 (TXD) | RXD | Pi Transmit -> ESP Receive | Yellow | 3.3V CMOS High |
| Pin 10 | GPIO 15 (RXD) | TXD | ESP Transmit -> Pi Receive | Orange | 3.3V CMOS High |
| Pin 1 (Jumper) | 3V3 Power | EN (CH_PD) | Chip Enable (Pull High) | Brown | 3.3V Logic High |
| Pin 6 (Jumper) | GND | GPIO 0 | Boot Mode Select (Pull High for Run) | Blue | 3.3V Logic High |
When the ESP-01S transmits WiFi data, it can pull instantaneous current spikes up to 170mA. The Raspberry Pi's 3.3V rail can generally handle this, but long jumper wires introduce inductance and resistance that cause voltage droops below 3.0V, resetting the module. Always solder a 100µF electrolytic capacitor and a 0.1µF ceramic capacitor directly across the VCC and GND pins on the ESP-01S breakout board to buffer these transients.
Node-by-Node Wiring Trace and Symbol Guide
When reading or drawing the schematic for this bridge, you will encounter standard UART and power symbols. Here is the exact node-by-node trace from the power source to the load, including what the diagram symbols represent.
1. Power and Polarity Trace (Source to Load)
Source: Raspberry Pi Pin 1 (3.3V Output). Load: ESP-01S VCC pin.
Trace the red wire from Pi Pin 1 to the ESP-01S VCC terminal. On a schematic, VCC is denoted by a solid horizontal line or a '+3V3' label. Polarity is strict here: The ESP8266 silicon will suffer permanent gate oxide breakdown if VCC exceeds 3.6V. Never connect this to the Pi's 5V rail (Pin 2 or 4).
2. Ground Path and Equipotential Bonding
Source: Raspberry Pi Pin 6 (GND). Load: ESP-01S GND pin.
Trace the black wire from Pi Pin 6 to the ESP-01S GND. The schematic symbol for this is the standard earth/chassis ground: three horizontal lines of decreasing width. This connection establishes equipotential bonding between the two boards. Without this shared 0V reference, the UART logic highs and lows will float, resulting in garbage characters in your terminal output.
3. UART Data Crossover Trace
Source (Pi TX): Pi Pin 8 (GPIO 14). Load (ESP RX): ESP-01S RXD pin.
Source (ESP TX): ESP-01S TXD pin. Load (Pi RX): Pi Pin 10 (GPIO 15).
Notice the cross-over: Transmit always connects to Receive. In schematic diagrams, TX and RX are often represented by arrows. An arrow pointing away from the chip indicates TX (output), while an arrow pointing into the chip indicates RX (input). Follow the yellow wire from Pi Pin 8 to ESP RXD, and the orange wire from ESP TXD to Pi Pin 10.
4. Enable and Boot Mode Trace
The ESP-01S will not boot into normal WiFi run-mode unless the EN (Chip Enable) pin is pulled HIGH and GPIO 0 is pulled HIGH. Trace a brown jumper from Pi Pin 1 (3.3V) to the EN terminal. Trace a blue jumper from Pi Pin 1 (3.3V) to GPIO 0. (Note: If you ever need to flash new firmware to the ESP-01S, you would temporarily move the GPIO 0 jumper to GND to enter bootloader mode).
Verifying the Physical Connections with a Multimeter
Do not apply power until you have verified the physical wiring. A single misplaced jumper on the Pi header can short the 5V rail to ground or feed 5V into the ESP's 3.3V RX pin, instantly bricking the module.
- Continuity Test (Power Off): Set your multimeter to the continuity/diode setting (the soundwave icon). Place the black probe on the Pi's metal USB port shield (known good ground) and the red probe on the ESP-01S GND pin. You should read less than 1.0 ohm and hear a beep. Next, check between VCC and GND on the ESP-01S. You should read an open circuit (OL) or a high resistance (typically >10k ohm due to the onboard LDO). If it reads near 0 ohms, you have a short—do not power on.
- Voltage Rail Verification (Power On, Module Disconnected): Power up the Raspberry Pi. Set your meter to DC Voltage. Place the black probe on Pi Pin 6 (GND) and the red probe on Pin 1 (3.3V). You must read between 3.28V and 3.32V. If it reads 5V, your Pi's PMIC has failed. If it reads below 3.1V, your Pi is experiencing a brownout; check your main USB-C power supply.
- Logic High Verification (Power On, Module Connected): With the ESP-01S plugged in and booted, back-probe the EN pin. Your meter should read ~3.3V. If it reads 0V, the module is being held in reset.
- TX Line Idle State: Back-probe the Pi's TX pin (Pin 8). UART lines idle HIGH. Your meter should read ~3.3V. When data is actively transmitting, the voltage will drop to an average of 1.5V - 2.0V due to the PWM nature of the serial bitstream.
Enabling the UART Serial Console in config.txt
Once the physical wiring and multimeter checks pass, the Raspberry Pi's operating system must be configured to route the serial terminal to the GPIO header instead of the default Bluetooth module (which shares the same UART hardware on Pi 3 and Pi 4 models).
Open your Pi's boot configuration file via the command line:
sudo nano /boot/firmware/config.txt
Add the following lines to the bottom of the file to disable the Bluetooth overlay and enable the primary UART (ttyAMA0) on GPIO 14/15:
enable_uart=1
dtoverlay=disable-bt
According to the official Raspberry Pi configuration documentation, disabling the Bluetooth overlay is mandatory on Pi 3/4 to ensure the UART runs at a stable crystal-driven baud rate rather than a variable core-clock-driven rate. Furthermore, the Espressif ESP8266 Hardware Design Guidelines dictate that the UART baud rate should be kept at 115200 bps or lower for reliable transmission over standard jumper wires without hardware flow control (RTS/CTS).
Reboot the Pi (sudo reboot). You can now use a terminal emulator like screen or minicom on the Pi to communicate with the WiFi module:
sudo apt install minicom
minicom -b 115200 -o -D /dev/serial0
You should now see the ESP-01S boot logs and be able to send AT commands to connect to your local WiFi network, completing your serial-to-WiFi terminal bridge.






