Skip to content
R

Wi-Fi

Interfacing ESP8266 Module Wi-Fi with Raspberry Pi

What is the ESP8266 Module?

ESP8266 Module practical reference

A more fully-broken-out ESP8266 module than the ESP-01, exposing extra GPIO pins alongside its Wi-Fi radio. It packages the same ESP8266 Wi-Fi SoC used across the ESP-01 through ESP-12 family, but on a board layout that surfaces more of the chip's usable GPIO, ADC, and control pins, making it easier to wire directly into a breadboard project without the limited 2-GPIO constraint of the ESP-01.

Key specifications

  • Wi-Fi chipset: ESP8266 SoC, 802.11 b/g/n 2.4GHz Wi-Fi
  • CPU: Tensilica L106 32-bit RISC, up to 80/160 MHz
  • Operating voltage: 3.3V DC (NOT 5V tolerant on GPIO or power input)
  • Operating current: ~80 mA average, spikes to 200-300 mA during Wi-Fi transmit bursts
  • Flash memory: Typically 1MB–4MB onboard SPI flash, depending on module variant
  • GPIO: Multiple usable GPIO pins broken out (varies by exact module, typically 8-9), plus one analog input (ADC)
  • ADC: 1 analog input, 0-1V range (some breakouts add a resistor divider for 0-3.3V)
  • Programming interface: UART (TX/RX) for flashing via esptool or the Arduino IDE, requires GPIO0 pulled LOW to enter flash mode

Pinout and connection notes

All ESP8266 GPIO and power pins are strictly 3.3V — connecting 5V logic or supply will damage the chip, so use a logic-level shifter or a 5V-to-3.3V regulator when interfacing with 5V boards like the Arduino Uno. GPIO0 and GPIO2 have boot-mode roles (LOW/HIGH respectively for normal run) that must be respected or the module will fail to start correctly.

  • VCC: Power, 3.3V DC only — do not supply 5V
  • GND: Ground
  • TX / RXD: UART transmit/receive for programming and serial communication
  • GPIO0: General I/O; must be pulled LOW at boot to enter flashing mode, HIGH for normal run mode
  • GPIO2: General I/O; must be pulled HIGH at boot for normal operation
  • CH_PD / EN: Chip enable — must be pulled HIGH for the module to run
  • RST: Active-LOW reset pin
  • A0 (ADC): Analog input, present on modules that expose it (e.g. ESP-12 based boards)

Integration checklist

  1. Confirm the exact part number and breakout-board revision.
  2. Verify supply voltage, current demand, logic levels, and signal direction against the datasheet.
  3. Check controller pin assignments and bus address or interface mode against the example code.
  4. Power up with external loads disconnected, then test signals before full integration.
  5. If readings or communication fail, check power and ground first, then pin mapping, interface settings, and library initialization.

Troubleshooting and reproducibility

Record the board used, wiring, library/version, supply arrangement, and measured behavior. Use the selected board-specific wiring example as the source of truth. Never assume visually similar modules share identical voltage tolerance or pin order.

Setting Up ESP8266 Module with Raspberry Pi

Library

pyserial

pip3 install pyserial — then enable the hardware serial port (not the serial console) via raspi-config

Wiring

Component pinRaspberry Pi pinNote
VCC3.3V (physical pin 1)
GNDGND
TXGPIO15 / RXD (physical pin 10)Pi RX is already 3.3V-max, so this connects directly — no divider needed, unlike wiring this module to a 5V-logic board
RXGPIO14 / TXD (physical pin 8)
CH_PD / EN3.3VMust be pulled HIGH to run
GPIO03.3VHIGH for normal run mode

Swipe sideways to see every column →

Python
  • This is mainly useful for a Pi model without its own Wi-Fi, like an original Pi Zero (non-W) — a Pi Zero W or any Pi 3/4/5 already has Wi-Fi built in and doesn't need this.
  • Enable the hardware UART and disable the serial console in raspi-config first, same as any other UART-based component on the Pi.
  • Same CH_PD/EN and GPIO0 HIGH-for-run-mode requirement, and same baud-rate-varies-by-firmware caveat, as the other boards.

Related Components

Related Guides & Projects