ESP32 Firmware Performance
September 18, 2026 · View on GitHub
Generated by: tools/benchmark_firmware.py --chip esp32 --port <serial-port>
Git revision: a75f4d16f537
Run started: 2026-09-18T08:25:07+02:00
Selected monitor duration: 60 seconds
Overall result: PASS
Git revision at completion: a75f4d16f537
Worktree dirty: yes → yes
Source fingerprint: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 → e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Source consistency: stable
Snapshot scope: The header identifies the run that generated this report. Cases preserved by --update or --resume may come from earlier runs; use the per-run artifacts for exact case provenance.
Detector coverage: ESPHome, Native, and Matter support Lightweight and High Accuracy. All three C++ frontends support persisted runtime switching, while Micro-ESPectre deploys Lightweight only on its supported chips. The matrix below samples representative cases rather than every supported combination.
Summary
| Frontend | Detection profile | Result | Occupancy | Binary size | Partition free | CPU load | Min free heap |
|---|---|---|---|---|---|---|---|
| Native | Lightweight | PASS | 71.87% | 1.16 MiB | 729.2 KiB (38.0%) | 6.03% | 135.7 KiB |
| Native | High Accuracy | PASS | 70.83% | 1.16 MiB | 729.2 KiB (38.0%) | 7.62% | 131.9 KiB |
| ESPHome | Lightweight | PASS | 85.17% | 1011.2 KiB | 780.9 KiB (43.6%) | 3.90% | 127.3 KiB |
| ESPHome | High Accuracy | PASS | 86.60% | 1011.2 KiB | 780.9 KiB (43.6%) | 4.92% | 121.4 KiB |
| Matter | Lightweight | PASS | 81.23% | 1.57 MiB | 2.25 MiB (59.0%) | 7.89% | 38.1 KiB |
| Matter | High Accuracy | PASS | 80.48% | 1.57 MiB | 2.25 MiB (59.0%) | 9.67% | 38.1 KiB |
| Micro-ESPectre | Lightweight | PASS | 74.92% | 1.26 MiB | 757.3 KiB (38.0%) | 83.29% | 53.0 KiB |
Results
Native Lightweight
Result: PASS
| Metric | Value |
|---|---|
| Benchmark mode | runtime |
| Build duration | 43.5s |
| Flash duration | 1m 32.6s |
| Monitor duration | 2m 41.3s |
| Firmware binary | 1,219,344 bytes (1190.8 KiB) |
| Application partition used | 1,219,344 bytes (1190.8 KiB) |
| Application partition free | 746,736 bytes (729.2 KiB) |
| Verified detector | lightweight |
| Frontend setup final BSSID requested | yes |
| Frontend setup final BSSID applied through Direct | yes |
| Frontend setup final BSSID already associated | yes |
| Frontend setup final BSSID reassociation exercised | yes |
| Frontend setup final BSSID association verified | yes |
| Direct control attempts | 60/60 succeeded |
| Direct censored failures | 0 |
| Direct diagnostics samples | 60/60 expected |
| Status cadence | 1.00 s mean, 1.02 s max gap |
| Status gaps over tolerance | 0 |
| Device uptime restarts | 0 |
| Packet-rate samples | 60 |
| Packet rate | 71.66 pps mean, 62 min, 79 max, 3.77 standard deviation |
| CSI occupancy | 71.87% mean, 63% min, 79% max |
| Motion samples | 159/5 expected |
| Last free heap | 151,672 bytes (148.1 KiB) |
| Heap stability previous-window median | 152,352 bytes (148.8 KiB) |
| Heap stability final-window median | 152,144 bytes (148.6 KiB) |
| Heap stability change | -208 bytes, -0.14% |
| Minimum free heap | 138,936 bytes (135.7 KiB) |
| Last largest heap block | 110,592 bytes (108.0 KiB) |
| Runtime load | 6.03% mean |
| Loop average | 794.14 us |
| Loop maximum | 10527 us |
| Detection samples | 245 |
| Detection average | 399.57 us |
| Detection minimum | 44 us |
| Detection maximum | 4178 us |
Native High Accuracy
Result: PASS
| Metric | Value |
|---|---|
| Benchmark mode | runtime |
| Build duration | 43.5s |
| Flash duration | 1m 32.6s |
| Monitor duration | 2m 41.3s |
| Firmware binary | 1,219,344 bytes (1190.8 KiB) |
| Application partition used | 1,219,344 bytes (1190.8 KiB) |
| Application partition free | 746,736 bytes (729.2 KiB) |
| Verified detector | high_accuracy |
| Frontend setup final BSSID requested | yes |
| Frontend setup final BSSID applied through Direct | yes |
| Frontend setup final BSSID already associated | yes |
| Frontend setup final BSSID reassociation exercised | yes |
| Frontend setup final BSSID association verified | yes |
| Direct control attempts | 60/60 succeeded |
| Direct censored failures | 0 |
| Direct diagnostics samples | 60/60 expected |
| Status cadence | 1.00 s mean, 1.03 s max gap |
| Status gaps over tolerance | 0 |
| Device uptime restarts | 0 |
| Packet-rate samples | 60 |
| Packet rate | 70.62 pps mean, 63 min, 80 max, 3.54 standard deviation |
| CSI occupancy | 70.83% mean, 65% min, 80% max |
| Motion samples | 145/5 expected |
| Last free heap | 148,428 bytes (144.9 KiB) |
| Heap stability previous-window median | 146,380 bytes (142.9 KiB) |
| Heap stability final-window median | 148,739 bytes (145.3 KiB) |
| Heap stability change | +2,359 bytes, +1.61% |
| Minimum free heap | 135,023 bytes (131.9 KiB) |
| Last largest heap block | 110,592 bytes (108.0 KiB) |
| Runtime load | 7.62% mean |
| Loop average | 1036.43 us |
| Loop maximum | 9709 us |
| Detection samples | 270 |
| Detection average | 946.43 us |
| Detection minimum | 44 us |
| Detection maximum | 4103 us |
ESPHome Lightweight
Result: PASS
| Metric | Value |
|---|---|
| Benchmark mode | runtime |
| Build duration | 1m 44.1s |
| Flash duration | 1m 17.4s |
| Monitor duration | 2m 40.9s |
| Firmware binary | 1,035,488 bytes (1011.2 KiB) |
| Application partition used | 1,035,371 bytes (1011.1 KiB) |
| Application partition free | 799,637 bytes (780.9 KiB) |
| Build RAM used | 49,848 bytes (48.7 KiB) |
| Verified detector | lightweight |
| Frontend setup final BSSID requested | yes |
| Frontend setup final BSSID applied through Direct | yes |
| Frontend setup final BSSID already associated | no |
| Frontend setup final BSSID reassociation exercised | yes |
| Frontend setup final BSSID association verified | yes |
| Direct control attempts | 60/60 succeeded |
| Direct censored failures | 0 |
| Direct diagnostics samples | 60/60 expected |
| Status cadence | 1.00 s mean, 1.03 s max gap |
| Status gaps over tolerance | 0 |
| Device uptime restarts | 0 |
| Packet-rate samples | 60 |
| Packet rate | 85.06 pps mean, 76 min, 89 max, 2.87 standard deviation |
| CSI occupancy | 85.17% mean, 77% min, 90% max |
| Motion samples | 235/5 expected |
| Last free heap | 142,688 bytes (139.3 KiB) |
| Heap stability previous-window median | 143,646 bytes (140.3 KiB) |
| Heap stability final-window median | 143,571 bytes (140.2 KiB) |
| Heap stability change | -75 bytes, -0.05% |
| Minimum free heap | 130,331 bytes (127.3 KiB) |
| Last largest heap block | 110,592 bytes (108.0 KiB) |
| Runtime load | 3.90% mean |
| Loop average | 699.83 us |
| Loop maximum | 9146 us |
| Detection samples | 215 |
| Detection average | 472.17 us |
| Detection minimum | 33 us |
| Detection maximum | 1260 us |
ESPHome High Accuracy
Result: PASS
| Metric | Value |
|---|---|
| Benchmark mode | runtime |
| Build duration | 1m 44.1s |
| Flash duration | 1m 17.4s |
| Monitor duration | 2m 40.9s |
| Firmware binary | 1,035,488 bytes (1011.2 KiB) |
| Application partition used | 1,035,371 bytes (1011.1 KiB) |
| Application partition free | 799,637 bytes (780.9 KiB) |
| Build RAM used | 49,848 bytes (48.7 KiB) |
| Verified detector | high_accuracy |
| Frontend setup final BSSID requested | yes |
| Frontend setup final BSSID applied through Direct | yes |
| Frontend setup final BSSID already associated | no |
| Frontend setup final BSSID reassociation exercised | yes |
| Frontend setup final BSSID association verified | yes |
| Direct control attempts | 60/60 succeeded |
| Direct censored failures | 0 |
| Direct diagnostics samples | 60/60 expected |
| Status cadence | 1.00 s mean, 1.03 s max gap |
| Status gaps over tolerance | 0 |
| Device uptime restarts | 0 |
| Packet-rate samples | 60 |
| Packet rate | 86.58 pps mean, 76 min, 94 max, 3.17 standard deviation |
| CSI occupancy | 86.60% mean, 77% min, 94% max |
| Motion samples | 234/5 expected |
| Last free heap | 136,387 bytes (133.2 KiB) |
| Heap stability previous-window median | 140,257 bytes (137.0 KiB) |
| Heap stability final-window median | 140,160 bytes (136.9 KiB) |
| Heap stability change | -97 bytes, -0.07% |
| Minimum free heap | 124,319 bytes (121.4 KiB) |
| Last largest heap block | 110,592 bytes (108.0 KiB) |
| Runtime load | 4.92% mean |
| Loop average | 902.71 us |
| Loop maximum | 6934 us |
| Detection samples | 273 |
| Detection average | 1251.00 us |
| Detection minimum | 25 us |
| Detection maximum | 4536 us |
Matter Lightweight
Result: PASS
| Metric | Value |
|---|---|
| Benchmark mode | runtime |
| Build duration | 3m 28.6s |
| Deploy duration | 24.4s |
| Flash duration | 1m 57.1s |
| Monitor duration | 4m 5.3s |
| Firmware binary | 1,641,648 bytes (1603.2 KiB) |
| Application partition used | 1,641,648 bytes (1603.2 KiB) |
| Application partition free | 2,356,048 bytes (2300.8 KiB) |
| Verified detector | lightweight |
| Frontend setup final BSSID requested | yes |
| Frontend setup final BSSID applied through Direct | yes |
| Frontend setup final BSSID already associated | no |
| Frontend setup final BSSID reassociation exercised | yes |
| Frontend setup final BSSID association verified | yes |
| Direct control attempts | 60/60 succeeded |
| Direct censored failures | 0 |
| Direct diagnostics samples | 60/60 expected |
| Status cadence | 1.00 s mean, 1.02 s max gap |
| Status gaps over tolerance | 0 |
| Device uptime restarts | 0 |
| Packet-rate samples | 60 |
| Packet rate | 80.98 pps mean, 71 min, 87 max, 3.03 standard deviation |
| CSI occupancy | 81.23% mean, 72% min, 87% max |
| Motion samples | 234/5 expected |
| Last free heap | 96,740 bytes (94.5 KiB) |
| Heap stability previous-window median | 100,615 bytes (98.3 KiB) |
| Heap stability final-window median | 100,577 bytes (98.2 KiB) |
| Heap stability change | -38 bytes, -0.04% |
| Minimum free heap | 39,036 bytes (38.1 KiB) |
| Last largest heap block | 47,104 bytes (46.0 KiB) |
| Runtime load | 7.89% mean |
| Loop average | 922.00 us |
| Loop maximum | 12637 us |
| Detection samples | 273 |
| Detection average | 620.29 us |
| Detection minimum | 41 us |
| Detection maximum | 2188 us |
Matter High Accuracy
Result: PASS
| Metric | Value |
|---|---|
| Benchmark mode | runtime |
| Build duration | 3m 28.6s |
| Deploy duration | 24.4s |
| Flash duration | 1m 57.1s |
| Monitor duration | 4m 5.3s |
| Firmware binary | 1,641,648 bytes (1603.2 KiB) |
| Application partition used | 1,641,648 bytes (1603.2 KiB) |
| Application partition free | 2,356,048 bytes (2300.8 KiB) |
| Verified detector | high_accuracy |
| Frontend setup final BSSID requested | yes |
| Frontend setup final BSSID applied through Direct | yes |
| Frontend setup final BSSID already associated | no |
| Frontend setup final BSSID reassociation exercised | yes |
| Frontend setup final BSSID association verified | yes |
| Direct control attempts | 60/60 succeeded |
| Direct censored failures | 0 |
| Direct diagnostics samples | 60/60 expected |
| Status cadence | 1.00 s mean, 1.02 s max gap |
| Status gaps over tolerance | 0 |
| Device uptime restarts | 0 |
| Packet-rate samples | 60 |
| Packet rate | 80.25 pps mean, 71 min, 85 max, 3.46 standard deviation |
| CSI occupancy | 80.48% mean, 72% min, 86% max |
| Motion samples | 234/5 expected |
| Last free heap | 96,347 bytes (94.1 KiB) |
| Heap stability previous-window median | 97,222 bytes (94.9 KiB) |
| Heap stability final-window median | 96,888 bytes (94.6 KiB) |
| Heap stability change | -334 bytes, -0.34% |
| Minimum free heap | 39,036 bytes (38.1 KiB) |
| Last largest heap block | 47,104 bytes (46.0 KiB) |
| Runtime load | 9.67% mean |
| Loop average | 1159.83 us |
| Loop maximum | 12635 us |
| Detection samples | 233 |
| Detection average | 1809.17 us |
| Detection minimum | 41 us |
| Detection maximum | 4800 us |
Micro-ESPectre Lightweight
Result: PASS
| Metric | Value |
|---|---|
| Benchmark mode | runtime |
| Deploy duration | 24.7s |
| Flash duration | 2m 18.1s |
| Monitor duration | 1m 41.9s |
| Firmware binary | 1,317,616 bytes (1286.7 KiB) |
| Deployed Python source | 172,573 bytes (168.5 KiB) |
| Application partition used | 1,256,176 bytes (1226.7 KiB) |
| Application partition free | 775,440 bytes (757.3 KiB) |
| Verified detector | lightweight |
| Direct control attempts | 14/14 succeeded |
| Direct censored failures | 0 |
| Status samples | 13/14 expected |
| Status cadence | 4.50 s mean, 5.01 s max gap |
| Status gaps over tolerance | 0 |
| Device uptime restarts | 0 |
| Packet-rate samples | 13 |
| Packet rate | 74.90 pps mean, 70 min, 77 max, 2.26 standard deviation |
| CSI occupancy | 74.92% mean, 71% min, 78% max |
| Motion samples | 233/5 expected |
| Last free heap | 54,320 bytes (53.0 KiB) |
| Heap stability previous-window median | 54,351 bytes (53.1 KiB) |
| Heap stability final-window median | 54,351 bytes (53.1 KiB) |
| Heap stability change | +0 bytes, +0.00% |
| Minimum free heap | 54,320 bytes (53.0 KiB) |
| Runtime load | 83.29% mean |
| Loop average | 667.50 us |
| Loop maximum | 41412 us |
| Detection samples | 244 |
| Detection average | 1284.50 us |
| Detection minimum | 551 us |
| Detection maximum | 10529 us |
Pass Criteria
- all required builds, flashes, and deployments complete successfully
- Native, ESPHome, Matter, and Micro-ESPectre negotiate Direct v1 and sample canonical diagnostics throughout each scored window
- Native and ESPHome use canonical firmware defaults, clear all device data during flash, and provision through Improv Serial
- Matter clears all device data, commissions through a revision-compatible CHIP Tool controller over BLE and Wi-Fi, and reaches its Direct endpoint
- Native, ESPHome, and Matter report Lightweight detection, configured internal managed traffic, and a 100 pps target before runtime mutations
- Native remains MQTT-unconfigured
- sensing frontends receive at least 5 canonical motion events through Direct SSE
- free heap provides two complete consecutive 10-second windows after startup grace, and the final-window median does not decline by more than 5% from the preceding window
- the device uptime does not restart during a scored runtime window
- Direct diagnostics cadence stays within the runtime gap tolerance, and production motion events remain live on sensing frontends
- Native Lightweight, Native High Accuracy, ESPHome Lightweight, ESPHome High Accuracy, Matter Lightweight, Matter High Accuracy, and Micro-ESPectre Lightweight mean CSI occupancy stays at or above the 70% admitted-slot detector-ready floor
- Native Lightweight, Native High Accuracy, ESPHome Lightweight, ESPHome High Accuracy, Matter Lightweight, Matter High Accuracy, and Micro-ESPectre Lightweight detector timing is present
- Direct send failures and unexpected rejected connections do not increase when the frontend exposes those counters
- the Micro-ESPectre runtime launcher remains active throughout Direct collection