Skip to main content

Wi-Fi

The Wi-Fi works, but it is almost deaf on this board. The cause is the board layout, not the firmware.

What was measured (first article, 2026-09-29)​

TestResult
Signal at the desk (same FRITZ!Box the PC sees at 72 %)RSSI −87 to −91 dBm
Ping to the router85–2000 ms
Scan from the board0 access points found
Launcher file server (webui.c), 20 KB fileupload 19 KB/s, download 4.4 KB/s: slower than the USB console (190–490 KB/s)
Same, 1 MB filetimes out

Why: the antenna is buried​

U1 (ESP32-S3-WROOM-1) has a printed antenna at one end of the module. Espressif's layout rule for it: the antenna over the board edge (or beyond it), no copper on any layer under it, and about 15 mm of clearance around it. On this board:

  • U1 sits on the bottom side at (80, 27.5) mm, with the antenna end about 15 mm inside the board edge (antenna at Y ≈ 14.75–20.75 mm, edge at Y = 0).
  • The In1.Cu GND and In2.Cu +3V3 planes cover the whole board, antenna included: the antenna radiates into two copper sheets a fraction of a millimetre away.
  • The SD card lines (SD_MOSI, SD_MISO, SD_CLK) run across the antenna end on the bottom layer.

The verification gate missed it. verify_antenna_keepout.py only checks a 2 mm strip beyond the module and counts "GND plane present on In1.Cu" as a pass. It has to check every layer under the antenna itself and fail on any copper there.

What works today​

  • Wi-Fi is off by default (the Enable switch in /sd/retro-go/config/wifi.json, or the options menu). It costs internal RAM and power, and gives little on this board.
  • The console commands wifi on|off|scan|status (board_ctl.py) are for bench checks.
  • Small files over the web file server work with the console right next to the router. For ROMs and firmware, use the USB cable (sd_update.py --console) or a card reader.

Fixes​

FixWhereProposal
Antenna free of copperrespin, top priority for the next hardware release (decision 2026-09-29)Move U1 so the antenna overhangs the board edge, or cut an all-layer keep-out under and around it (In1 GND and In2 +3V3 zones, tracks, pours). Leave the board clearance Espressif asks for.
Reroute the SD linesrespinSD_MOSI/MISO/CLK away from the antenna end; no track under or next to it on any layer.
Gate that sees itsame respinverify_antenna_keepout.py fails on any copper, on any layer, under the antenna area of the footprint, plus a mutation test that plants a plane under it. Without this, the next layout can bury it again.
Enclosure and displayrespin + enclosureNo metal, screw or display panel over the antenna; check the shell wall in front of it.
External antenna (option, to evaluate)v3.1 buildESP32-S3-WROOM-1U-N16R8: same pads and pinout, no printed antenna, u.FL connector for an antenna on the shell. It avoids moving U1, but it is a module swap (41 pads + thermal pad), not a bench rework, and needs its stock at JLCPCB checked.

No firmware change is needed for any of these.

Proof: at the same desk as the 2026-09-29 measurement, RSSI better than −65 dBm, the scan finds the router and the neighbours' networks, and a 1 MB upload through the web file server completes faster than the USB console.