Passer au contenu

Nous améliorons nos opérations pour mieux vous servir. Les commandes sont expédiées normalement depuis Laval, QC. Questions? Contactez-nous

Bitcoin accepté au paiement  |  Expédié depuis Laval, QC, Canada  |  Soutien expert depuis 2016

NM_WROOM_CONFIG Critical

NerdMiner – Configuration Mode Fails on ESP32-WROOM-32

NerdMiner v2 on ESP32-WROOM-32 / ESP32-Devkit1 / ESP32-2432S028R (Cheap Yellow Display) targets will not enter configuration mode via the documented hold-BOOT-at-power-up gesture. The `NerdMinerAP` portal never broadcasts; the device boots straight into mining and the user has no way to change WiFi credentials, `bc1q` Bitcoin address, or pool. The hold-BOOT gesture is wired for LILYGO T-Display S3 hardware and `GPIO0` on WROOM instead routes to the Espressif ROM bootloader - so the user lands in USB serial bootloader mode, not the firmware config portal. Documented in `BitMaker-hub/NerdMiner_v2` issue #369 (open since 2024). Workaround: long-press the screen-cycle button at runtime for 5+ seconds, or short `GPIO0` to `GND` briefly while running, or full `esptool.py erase_flash` and reflash.

Critical — Immediate action required

Affected Models: NerdMiner v2 flashed to ESP32-WROOM-32 / ESP32-Devkit1 targets. Includes bare `ESP32-WROOM-32` modules, `ESP32-2432S028R` 2.8" Cheap-Yellow-Display (CYD) boards, Wemos Lolin32 Lite, generic `ESP32 Devkit V1`, and community forks (e.g. `matlen67/NerdMiner_V2_ESP32-ST7735`) targeting the ESP32 (not ESP32-S3) silicon family. LILYGO T-Display S3 / T-Dongle S3 NerdMiners are NOT affected - their documented hold-BOOT-at-power-up gesture works as intended.

Symptoms

  • Holding the button during USB power-up does NOT drop the miner into config mode - it boots straight into mining screens
  • `NerdMinerAP` SSID is not visible from any phone or laptop after reboot - no access point to connect to
  • User needs to change WiFi credentials, pool URL, `bc1q` Bitcoin address, or timezone but has no visible path to the portal
  • Serial console at `115200 baud` shows normal mining boot, no `WiFiManager: starting config portal` line
  • Device is an ESP32-WROOM-32, ESP32-Devkit1, ESP32-2432S028R CYD, or Wemos Lolin32 - NOT a LILYGO T-Display S3 / T-Dongle S3
  • Firmware is `NerdMiner_v2` `v1.6.3`, `v1.7.x`, or a community fork built for the ESP32 (not ESP32-S3) target
  • `esptool.py chip_id` enumerates the chip as `ESP32` (not `ESP32-S3`), confirming the affected hardware family
  • User has tried holding `BOOT`, holding `IO0`, holding both at power-up, cold vs warm boot - same result every time
  • Display shows live hashrate / BTC price / block height screens so firmware is clearly running (not bricked at bootloader level)
  • Official nerdminers.com trouble-shooting guide says 'hold BOOT during power-up' and this does nothing on this board
  • Holding `GPIO0` low during reset drops the chip into USB serial bootloader (`esptool`-flashable download mode) rather than config mode
  • User just flashed fresh `NerdMiner_v2` firmware via Web Flasher but `NerdMinerAP` still never appears on first boot

Step-by-Step Fix

1

Long-press the screen-cycle button for 5+ seconds while the miner is already running. Do NOT power-cycle first - the miner should be booted, display showing hashrate / BTC-price / block-height screens. On two-button builds it is the top button (screen-cycle), on single-button WROOM it is the only button. Hold a full 5 seconds until the display flashes or shows `RESETTING` / `CONFIG`. Release. The miner reboots. Within 30-60 s your phone should see `NerdMinerAP` in the WiFi list. Connect with password `MineYourCoins`, browse to `http://192.168.4.1`, configure. This is the community-confirmed path from `BitMaker-hub/NerdMiner_v2` discussion #187 and is the first thing to try - zero tools, zero risk, no flashing.

2

On two-button boards, try BOTH buttons held simultaneously for 5+ seconds at runtime. CYD / ESP32-2432S028R boards and several NerdMiner forks map the factory-reset gesture to both buttons together rather than a single long-press. D-Central's NerdMiner setup guide documents this path for two-button variants. Same outcome: reboot into `NerdMinerAP`. If single-button long-press did nothing, this is worth trying before you open a terminal.

3

Verify `NerdMinerAP` appeared after the reset gesture. Watch your phone's WiFi list for up to 60 seconds after the reboot. The SSID is literally `NerdMinerAP` on most WROOM builds. Password `MineYourCoins`. If visible, connect, load `http://192.168.4.1`, enter your WiFi credentials, `bc1q` SegWit Bitcoin address (NOT `bc1p` Taproot - see sibling `nerdminer-taproot-bc1p-address-rejected`), and pool URL. Save. Device reboots to mining. If the SSID does NOT appear within 60 s, advance to Tier 2.

4

Confirm you are holding the correct button. On the ESP32-2432S028R CYD, two buttons sit on the bottom edge flanking the USB. On Wemos Lolin32 Lite the button labelled `EN` / `RST` is the chip-enable line, NOT the config-mode button - that is `BOOT` (`GPIO0`), which often has no physical button on a Lolin32 Lite. On bare WROOM modules there may be no button at all. Check your specific board's silkscreen or pinout diagram before concluding button-holding does not work. Holding the wrong button all day produces zero results.

5

Power the miner from a known-good USB wall brick - not a laptop port, not a USB hub, not a random phone charger. A proper `5 V / 2 A` wall adapter with a data-capable USB cable. Marginal power during WiFi TX burst browns out the ESP32 and `NerdMinerAP` SoftAP fails to actually radiate even when firmware believes it is running. Swap power, retry the reset gesture. This alone fixes a surprising fraction of 'config mode not working' tickets that are actually PSU failures on WROOM boards.

6

Short `GPIO0` to `GND` briefly while the miner is running, then release. Works on bare WROOM modules, Lolin32 Lite, and any board with no usable config button. Locate `GPIO0` (labelled `IO0`, `BOOT`, or `GPIO0` on the silkscreen) and any `GND` pin. With the miner running normally on USB power, touch a short jumper wire or straightened paperclip between the two for 2-3 seconds, then remove. The miner reboots. Note: if `GPIO0` is held LOW during the reset transition, the chip enters USB serial bootloader mode instead of firmware config mode - brief taps at runtime, not holds through reset, are the pattern you want here.

7

Open a serial console at `115200 baud` over USB. PuTTY on Windows, Arduino IDE serial monitor, `screen /dev/ttyUSB0 115200` on macOS / Linux, or `minicom`. Power-cycle the miner and watch the boot log. Healthy boot includes `WiFiManager: no saved config` → `starting config portal` → `NerdMinerAP`. Broken boot shows `WiFiManager: connecting to <stored SSID>` with no portal line. The log tells you whether NVS has stored credentials the firmware is trying to use, or whether firmware crashes before the WiFi stack. Save the log - useful for Tier 3 decisions and filing upstream issues.

8

Erase NVS partition only via `esptool.py` - preserves firmware, clears stored WiFi config. Put the WROOM into download mode (hold `GPIO0` to `GND`, tap `EN`/`RST`, release both), then: `esptool.py --chip esp32 --port COMx erase_region 0x9000 0x6000`. That 24 kB region is the NVS partition on stock NerdMiner partition tables. Tap `EN`/`RST` to reset. Firmware boots with no stored WiFi config, goes directly to `WiFiManager` config portal, broadcasts `NerdMinerAP`. Less destructive than full `erase_flash` and doesn't require app reflash. Verify your partition table first (`esptool.py read_flash 0x8000 0xC00 partitions.bin`) - offsets vary across NerdMiner forks.

9

Identify `EN` vs `BOOT` vs `IO0` on the silkscreen. Easy confusion point. `EN` (sometimes labelled `RST`) is the hardware chip-enable line - pressing it power-cycles the chip. `BOOT` / `IO0` is `GPIO0`. To enter USB download mode: hold `BOOT`, tap `EN`, release `BOOT`. To just reboot: tap `EN`. To trigger runtime GPIO0-based config: momentarily short `GPIO0` to `GND` without pressing `EN`. Learn which is which on your specific board before mashing buttons - doing the wrong sequence won't damage anything but will waste 20 minutes.

10

Try an SD-card `config.json` workaround if your board has an SD slot (e.g. ESP32-2432S028R CYD). Format the SD card FAT32. Create `config.json` with the keys `{"ssid":"YourWiFi","pass":"YourPass","btc_address":"bc1q...","pool":"public-pool.io","port":21496}`. Insert the card. Boot the miner. Some NerdMiner forks read the SD at boot and apply config even with corrupt NVS - completely sidesteps the config-portal issue. Support is fork-dependent; check your fork's readme before betting on this path.

11

Full flash erase via `esptool.py`. Hold `BOOT` (`GPIO0`) to `GND`, tap `EN`/`RST`, release `BOOT` to enter download mode. Connect USB. Run: `esptool.py --chip esp32 --port COMx --baud 921600 erase_flash`. Wait 60-120 seconds. Entire 4 MB / 8 MB flash zeroed - NVS, SPIFFS, OTA, app. The WROOM is now a blank ESP32 module. This is the nuclear option that always works when software-based state is blocking `NerdMinerAP`. You will need to reflash firmware after.

12

Reflash `NerdMiner_v2` for your specific WROOM variant. Go to `https://github.com/BitMaker-hub/NerdMiner_v2/releases` and pick the correct binary: `NerdMiner_v2_ESP32_Devkit_v1.x.x.bin` for bare WROOM, `NerdMiner_v2_CYD_2432S028R_v1.x.x.bin` for the Cheap Yellow Display, variant-specific binaries for community forks. Flash via `https://nerdminer.io/` Web Flasher (Chrome / Edge / Opera with WebSerial - not Firefox, not Safari) or via `esptool.py write_flash 0x1000 bootloader.bin 0x8000 partitions.bin 0x10000 firmware.bin`. First boot after a clean flash broadcasts `NerdMinerAP`.

13

Match the firmware binary to the board EXACTLY - wrong binary produces black screen or no `NerdMinerAP`. The bare `ESP32-WROOM-32` binary assumes no display and exposes `NerdMinerAP` via `WiFiManager` immediately. The CYD binary expects the ILI9341 TFT on specific SPI pins and the XPT2046 touch - flashing CYD on a bare WROOM hangs waiting for a display that does not exist. Check your board silkscreen, cross-reference against `platformio.ini` environments in `BitMaker-hub/NerdMiner_v2`, match the variant before flashing. Wrong binary is the single most common cause of 'flashed fresh firmware, still no portal'.

14

File or reference an issue on `BitMaker-hub/NerdMiner_v2`. Issue #369 is the canonical reference for this class of bug. If your specific WROOM variant has a quirk not covered here - a board rev where the single-button long-press still doesn't fire, a new CYD variant, a forked firmware with different config-mode handling - file a new issue with your serial-console boot log attached. NerdMiner is community-maintained; reproducers from the field are how it gets better, and D-Central contributes reproducers to the tracker too.

15

PSU sanity check - one more time, because it matters. WROOM is less power-hungry than ESP32-S3 at mining load (no fast ASIC, just CPU SHA256 grind), but WiFi provisioning pulls `500 mA`+ peak during `NerdMinerAP` SoftAP TX burst. A `5 V / 1 A` phone charger sags under that burst and `NerdMinerAP` never comes up on-air even though firmware believes it is running. Use `5 V / 2 A` data-capable USB source, proper wall brick - not a laptop port or USB hub - during provisioning.

16

When to stop DIY. If you have tried long-press at runtime (single and two-button variants), `GPIO0`-to-`GND` short at runtime, full `esptool.py erase_flash` + fresh reflash of the correct binary for your exact board, known-good USB cable and `5 V / 2 A` wall brick, captured a serial-console boot log - and the device still refuses to broadcast `NerdMinerAP` - you have exhausted the standard playbook. Open a D-Central support ticket with your serial log attached, or drop into the D-Central Discord `#nerd-family` channel. The community has seen most WROOM board revs by now.

17

D-Central bench process for NerdMiner-class work: intake log review, board-variant identification from silkscreen photos, `esptool` chip ID confirmation, serial-console boot log capture, NVS dump, full `erase_flash` baseline reflash of the correct binary, validation that `NerdMinerAP` radiates at `192.168.4.1`, 12-24 h stability soak on a test pool before return. Flat bench-diagnostic fee applied to any repair cost if hardware turns out to be the issue. D-Central stocks and supports the full Nerd family - units purchased through our store get warranty honoured, units from elsewhere diagnosed for a modest bench fee.

18

Ship safely if the NerdMiner heads to the bench. Anti-static bag, 5 cm of foam on every side of the outer box. Include a note: specific board variant (photo of the silkscreen is ideal), NerdMiner firmware version flashed, exact symptoms, whether you reached `NerdMinerAP` before something broke, your router model if relevant. Context saves triage time and triage time saves your bench dollar. Canada-wide turnaround on NerdMiner-class work 3-7 business days. US / international welcomed - D-Central ships worldwide from Canada.

When to Seek Professional Repair

If the steps above do not resolve the issue, or if you are not comfortable performing these repairs yourself, professional service is recommended. Attempting advanced repairs without proper equipment can cause further damage.

Related Error Codes

Still Having Issues?

Our team of Bitcoin Mining Hackers has been repairing ASIC miners since 2016. We have seen it all and fixed it all. Get a professional diagnosis.