Find the ESP32 boards with a bad antenna.
Flash an ESP32-C3 or ESP32-S3 from this page, measure it, and get a verdict with the reasoning attached. Add a second board you trust and the two are compared directly. Nothing leaves your machine.
Optional. Without it a run is scored against a stored baseline instead, and the ESP-NOW comparison is skipped.
The password is held in this page only while the tab is open. It is never written to disk, never stored in the browser, and never sent anywhere. Leave both fields empty to run the ESP-NOW pair sweep on its own.
Locking to one BSSID keeps every run on the same access point, so a roaming mesh cannot make two boards look different. Scan lists the access points the board under test can see for the name above.
Compare boards
Every board you have measured, side by side, using its newest run that carries the metric. This is the question the bench exists to answer: not whether one board is good, but which of yours is worse than the rest.
Position swap
One reading at one spot cannot tell a weak antenna from an unlucky position: multipath can move AP scan RSSI more than a real fault does. Measure the boards, physically swap where they sit while leaving the USB cables put, and measure again. Averaging each board across the two positions cancels the spot and leaves the number that follows the board.
Set a Position in the run form before each run: run every board at Position 1, swap the boards, then run them all again at Position 2. Boards measured at two or more positions line up below, worst antenna first, with how much the position alone moved things.
History
Runs are kept in this browser, keyed by the board's Wi-Fi MAC, so a board you measured last month is still the same board. Export writes a JSON file the local application can read, and import brings one back.
| When | Board | Profile | Verdict |
|---|
What it measures
Every stage below runs from this page. The board does its own measuring, which is why none of it needs software on your machine.
| Stage | What it tells you | Second board? |
|---|---|---|
| AP scan RSSI | How well the board hears your access point, averaged over several scans | No |
| Association power | Whether the board can hold an association at full transmit power, or only below it | No |
| Loss and round-trip time | ICMP from the board to your gateway, so the path through the access point is measured end to end | No |
| UDP throughput | Real Mbps between the two boards across the access point, both directions | Yes |
| ESP-NOW pair | Directional receive and transmit RSSI against the reference, swept across transmit power | Yes |
| Hardware details | Flash, heap, PSRAM, chip revision, cores, CPU MHz, SDK version | No |
How a verdict is reached
Antenna verdicts come from the ESP-NOW comparison, measured in both directions across the power sweep. Loss through your access point is recorded and reported, but it describes your network, not the board, so it never sets a hardware verdict on its own. Every verdict carries the reason it landed where it did.
Live reference
Connect a board you trust. The comparison runs in the same spot at the same moment, which cancels out the environment.
Master baseline
Mark an earlier good run as the baseline. Later single-board runs are scored against its scan RSSI and throughput, so you can screen a pile of boards with nothing else connected.
A real fault. One ESP32-C3 SuperMini in the test set fails every association at 20 dBm and connects in under two seconds at 17 dBm and below, on two different access points, while its receive path stays healthy at -36 dBm. That is the known mis-tuned antenna matching network on a batch of C3 SuperMini and LOLIN C3 Mini boards. The run reports it as a hardware FAIL naming the power it managed, then finishes at that power so the rest of the measurements stay usable.
Run locally
The local application runs the same stages and adds what a browser cannot keep: a durable database, charts across runs, batch queues, and an access point lock. It serves its own interface at 127.0.0.1:8765.
| What it adds | Why |
|---|---|
| SQLite history | A real file you can back up and move between machines, rather than one browser profile |
| Comparison charts | Every device plotted together across runs |
| Batch queue | Check several boards, confirm the erase once, and walk away |
| Access point lock | Pins the association to one BSSID and channel and records the neighbourhood, so two boards are compared under the same conditions |
| Credential Manager | Your Wi-Fi password is stored by Windows rather than retyped each session |
Requirements: Windows, PlatformIO, and an ESP32-C3 or ESP32-S3 board on USB.
# 1. get the code git clone https://github.com/Keralots/ESP32WiFiTester.git cd ESP32WiFiTester # 2. set up and start .\tools\setup.ps1 -Dev .\tools\start.ps1
- Connect one or more boards by USB, plus a reference board if you have one.
- Open Run Test. Every connected board appears in one list, and Identify reads each chip and MAC.
- Check the boards to test, pick a reference or an access point lock, choose Quick, Standard or Full.
- Progress streams into the run monitor. When the queue finishes, open a run for charts, measurements and the analysis.
Firmware served here is version -. Your data lives in data\ and never leaves the machine.