Breadboard
docs
05 · The radio

ESP32 & Wi-Fi

The unmodified Espressif Wi-Fi stack runs against a virtual ether: scan it, join it, sniff it, and let two boards talk.

Bringing the radio up

At any ESP32 REPL (or in a Code-tab script):

import network
w = network.WLAN()
w.active(True)          # real RF calibration runs here
w.scan()                # finds the bench's virtual networks
w.connect('BreadboardNet')
w.ifconfig()            # ('192.168.4.2', ...) after the DHCP lease

The bench's ether has three networks: BreadboardNet (channel 1), Workshop-2G (6), and ESP-Lab (11). Joining a WPA2-protected network performs the genuine 4-way handshake (the WPA2 example ships one with a password). After a lease you can talk to the in-network test server with ordinary sockets: GET /1000 at 192.168.4.1 streams a deterministic 1000-byte body.

The packet sniffer

Toggle 📡 Sniffer in the header for a Wireshark-style view of every 802.11 frame that crosses the air: probe requests during a scan, auth/assoc, EAPOL messages 1–4 during a WPA2 join, DHCP, ARP, TCP. Click a row for the raw frame breakdown. Watching a connect conversation frame by frame is the best Wi-Fi lesson the bench offers.

Two boards, one ether

Put two ESP32s on a bench and they share the radio medium with unique MACs. ESP-NOW frames fly directly between them (watch the glowing packets cross the canvas), and with both joined to the same network, two real IP stacks talk end-to-end: the bundled two-board example runs an HTTP server on one board and a client on the other, every hop a real frame.

The board's radio state (MAC, channel, SSID, IP, handshake progress, RX/TX counters) lives in the Inspector when an ESP32 is selected.