Open-source project
BitMaker-hub/NerdMiner_v2 avatar
BitMaker-hub/NerdMiner_v2

NerdMiner v2: an ESP32 that runs the Stratum protocol on your desk

Improved version of first ESP32 NerdMiner

2,798 stars638 forksCNOASSERTION

At a glance

What is it?
Free firmware that turns a ten dollar ESP32 board into a solo Bitcoin miner, built for learning about mining rather than for earning anything, with prebuilt binaries for about twenty supported boards.
Who is it for?
NerdMiner v2 is best understood as an educational project with a nice enclosure, not a mining product. The firmware does real work: it speaks the Stratum protocol, keeps both CPU cores and several threads busy, updates its current job on every stratum notification so it does not submit stale shares, and reports network mining statistics across three screens.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 119 days ago.
What is it written in?
Mainly C, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What the project says it is for

The README is unusually direct about intent, which is worth quoting before anything else. This is a free and open source project that lets you try to reach a bitcoin block with a small piece of hardware, and the main aim is to let you learn more about mining and to have a beautiful piece of hardware on your desktop. The project credits an original called HAN as its predecessor.

So the framing is a learning project with an aesthetic payoff, and the author says so rather than implying the hardware is competitive. An ESP32 is an microcontroller with a dual core running at a few hundred megahertz and no dedicated hashing hardware, which is several orders of magnitude away from the machines that actually mine Bitcoin blocks. Nothing in the README claims otherwise.

What makes it interesting technically is that the software is not a toy. The firmware implements the Stratum protocol, which is the mining pool coordination protocol Bitcoin miners use to receive job notifications and submit shares. It is multicore and multithreaded, with both cores mining and several threads handling Stratum work and WiFi tasks. Each time a stratum job notification arrives, the miner updates its current work, which is specifically to avoid creating stale shares.

That last detail is the one that tells you a real implementation is underneath. Stale share rejection is the classic failure mode of a slow miner implementation, and handling it correctly is what separates a firmware that participates in the protocol from one that just hashes.

The repository has 2,798 stars, 638 forks and 253 open issues, written in C, not archived, with the last push on 2026-06-14.

Three screens, one small board

The firmware ships with several screens, and the README names three of them. The NerdMiner Screen shows mining data for the device itself. ClockMiner Screen is a fashion style clock that also mines, which is the part most people end up displaying. GlobalStats Screen shows global mining statistics and related data.

Configuration is handled through WifiManager, which means the board runs its own access point on first boot and you configure it from a phone or laptop browser rather than by reflashing. The README states that WifiManager is used to modify miner settings and save them to SPIFF, the flash filesystem that holds the configuration between power cycles.

The pool is configurable and the firmware originally works with public-pool.io, a solo pool where Nerdminers are supported. Solo mining means you do not split a reward with other miners, you either find the block or you get nothing, which is the honest reason a slow device is still worth running: it is the only way to find out what finding a block feels like, and the README's framing as a learning project matches that.

There is a caveat the README puts in bold capitals, and it is the one operational detail that catches people out. The miner is not seen by all standard pools due to its low share difficulty. You can check miner work remotely using the specific pools named in the documentation, or by reading logs over UART. In other words, a miner that appears to be running may simply not be reporting to a pool that expects a different difficulty setting.

The README also notes that the project is still in development and more features will be added.

About twenty supported boards and a 3D printed case

The hardware requirement is a TTGO T-Display S3 or any other supported board, checked against the build tutorial, plus a 3D BOX with files in `3d_files/`. The supported board list is one of the longer parts of the README and is worth reading carefully, because the firmware depends on the display and the board's flash layout.

The list starts with the LILYGO T-Display S3, the original board the project was developed on, and includes the ESP32-WROOM-32 and ESP32-DevkitC variants, the LILYGO T-QT pro, T-Display 1.14, T-Display S3 AMOLED and its touch variant, LILYGO T-Dongle S3, LILYGO T-HMI, the ESP32-2432S028R 2.8 inch board, the ESP32-cam, M5-StampS3, Wemos Lolin S3 Mini and S2 Mini, Weact S3 Mini, WeAct ESP32-D0WD-V3, ESP32-S3 Devkit, ESP32-C3 Devkit, ESP32-C3 Super Mini, the Waveshare ESP32-S3-GEEK, and two 0.42 inch OLED boards.

Several entries name the developer who added support, which is a good sign about how the board list grew: @nitroxgas and @jadeddonald78 for the 2.8 inch ESP32, @elmo128 for the ESP32-cam, @gyengus for the M5-StampS3, @cosmicpsyop for the T-HMI, and @mrthiti for the OLED boards. The AliExpress links are marked as affiliate links with an asterisk in the README.

Note that some listed boards have no display at all, such as the ESP32-cam and the bare devkits. The repository has a `boards/` directory, which is where the per-board build variants live, and `platformio.ini` at the root for the PlatformIO project. If you want to build firmware yourself, the README says you can compile the entire project using Arduino, PlatformIO or Espressif IDF.

Flashing firmware without an IDE

There are two documented routes to get firmware onto the board, and the recommended one is a hosted flasher.

The microMiners Flashtool at flasher.bitronics.store is described as the easiest way to flash firmware, and the README suggests visiting it in a Chrome incognito window. You get a supported board, go to the flasher, and the page handles the serial connection.

The standard alternative is ESPtool in the browser, at espressif.github.io/esptool-js/, using one of the binary files in the `bin` folder. The procedure is: get a board, download the repository, go to the online ESPtool, load the firmware with the binary from the sub-folder of `bin` corresponding to your board, plug the board in, and select each `.bin` file from that sub-folder. The README notes that the online ESP Tool works with Chrome, Chromium and Brave, and recommends 115200bps.

Updating the firmware later is a shortened version of the same process: follow the flashing steps but only load the file 0x10000_firmware.bin. That single-file update is the difference between a two-minute update and a full reflashing dance, and it is the reason the `bin/` folder is organised into per-board sub-folders with a consistent naming scheme.

The build troubleshooting section is the most practically useful part of the documentation. If the upload stops during firmware download, enter the board in boot mode: unplug the cable, hold the right bottom button, then plug the cable back in and try programming. On ESP32-WROOM boards you may need to hold the boot button, press reset, then program. As a last resort, use the Erase all flash option in ESPtool to clear the current configuration before uploading, which the README says has fixed WiFi failures in cases where nothing else worked.

Configuration: the WiFi access point, the BTC address, the SD card

After programming, the README says you only need to set up your WiFi and your BTC address, with a hard requirement attached: when the BTC address of your selected wallet is not provided, mining will not be started.

The WiFi access point flow is four steps. Connect to a network named NerdMinerAP with the password MineYourCoins, set up your WiFi network, add your BTC address, and change the password if needed. If you use public-pool.io and want a custom worker name, you can append a string in the format _.yourworkername_ to the address.

There is also an SD card route, for boards that have one. Format the card as Fat32, create a file named config.json in its root, and fill in the settings.

json
+{
+  "SSID": "myWifiSSID",
+  "WifiPW": "myWifiPassword",
+  "PoolUrl": "public-pool.io",
+  "PoolPort": 3333,
+  "PoolPassword": "x",
+  "BtcWallet": "walletID",
+  "Timezone": 2,
+  "SaveStats": false
+}

Insert the card, then hold down the reset configurations button to reset configurations or boot without settings in the NVMemory, and power down to remove the card. The `Timezone` field is an integer offset and `SaveStats` is a boolean controlling whether mining statistics persist, which is how the GlobalStats screen has anything to show after a reboot.

Those two default values, the access point name and its password, are hard-coded in the firmware, and the README's instruction to change the password is the security note for anyone deploying this. Anyone within radio range of the device can join the access point and reach the configuration portal until you change it.

What you are actually getting when you flash this

The build tooling in the tree tells you how the project is put together. `platformio.ini` is the PlatformIO project definition, `boards/` holds the per-board variants, `src/` and `include/` hold the firmware, `lib/` holds vendored libraries, `SLS/` is the serial logging setup, and `3d_files/` has the case designs.

Two Python scripts are worth naming because they explain how releases work. `auto_firmware_version.py` stamps the version into the firmware at build time, which is how every board sub-folder in `bin/` gets a matching version string without anyone editing files by hand, and `post_build_merge.py` runs after the build to merge the resulting binaries into the combined images the flasher expects. Both are the kind of tooling a project needs once it supports twenty boards, and their presence is a better maintenance signal than the release notes alone.

The releases are frequent and small. nerdminer-release-V1.8.3 on 2025-09-13 and nerdminer-prerelease-V1.8.3 the day before both contain a bitcoin price update fix plus a general fixes and improvements pass. V1.8.2 from 2025-09-09 is three pull requests: fixes, a version bump, and more fixes. Every entry is by the same maintainer. There is a LICENSE file in the tree, though the repository license field reads NOASSERTION, which is what GitHub reports when it cannot classify the licence text, so read the file rather than trusting the badge.

With 253 open issues against 2,798 stars, the queue is large for the size of the codebase, which fits a hobby-hardware project where every user flashing a new board files something. The realistic expectation is that a board listed today works, a board listed recently may need a fix, and the SD card config route is the faster path when the captive portal misbehaves on your hardware.

Editorial conclusion

NerdMiner v2 is best understood as an educational project with a nice enclosure, not a mining product. The firmware does real work: it speaks the Stratum protocol, keeps both CPU cores and several threads busy, updates its current job on every stratum notification so it does not submit stale shares, and reports network mining statistics across three screens. The README says plainly that the aim is to learn more about mining and to have a beautiful piece of hardware on your desktop, and it makes no claim about earnings. What you need before starting is a supported board, and the list runs to roughly twenty of them, plus an optional 3D printed case in `3d_files/`. Flashing is a web page and a binary from `bin/`, with V1.8.3 as the most recent release on 2025-09-13 and the repository last pushed on 2026-06-14. Set the WiFi access point credentials and a BTC address through the captive portal, and expect the miner not to start at all until that address is provided.

Frequently asked questions

How long does it take to mine $1 of Bitcoin?

The README makes no earnings claim, because the project describes itself as a way to learn more about mining and to have a piece of hardware on your desktop. An ESP32 is a microcontroller with no dedicated hashing hardware, and the firmware originally works with a solo pool where you either find a block yourself or get no reward.

Do Bitcoin mining devices like this really work?

They do real protocol work. The firmware implements the Stratum protocol, uses both cores and several threads, and updates its current work on every job notification specifically to avoid creating stale shares. The README does warn that the miner is not seen by all standard pools because of its low share difficulty.

What boards does NerdMiner v2 support?

The README lists around twenty, starting with the LILYGO T-Display S3 the project was developed on, plus the T-QT pro, T-Display 1.14, T-Display S3 AMOLED and touch, T-Dongle S3 and T-HMI, ESP32-C3 devkits, Wemos and Weact S3 minis, the Waveshare ESP32-S3-GEEK, ESP32-cam, M5-StampS3 and two 0.42 inch OLED boards. Prebuilt binaries live in per-board sub-folders of bin/.

Why does my miner not start after flashing?

A BTC address is required. The README states that when the BTC address of your selected wallet is not provided, mining will not be started. You set it through the NerdMinerAP access point with password MineYourCoins, or through a config.json file on a Fat32 SD card, and you should change the access point password.

How do I update the firmware without reflashing everything?

Follow the same flashing steps but load only the file 0x10000_firmware.bin, using the online ESPtool at espressif.github.io/esptool-js/ or the microMiners flasher at flasher.bitronics.store. The README recommends 115200bps, and if the upload stalls you may need to hold the boot button to put the board into boot mode.

Official sources

  1. BitMaker-hub/NerdMiner_v2 on GitHub
  2. Issues
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/bitmaker-hub-nerdminer-v2.svg)](https://hysenlabs.com/projects/bitmaker-hub-nerdminer-v2)