Как запустить майнинг биткоина на микроконтроллере ESP32
Майнинг первой криптовалюты давно превратился в закрытый клуб промышленных дата-центров с гигантскими ангарами шумящих асиков. Обычному разработчику собрать дома ферму ради интереса сегодня бессмысленно и дорого. Но проект Bitaxe и репозиторий ESP-Miner возвращают ощущение гаражного DIY. Ребята создали полноценную открытую прошивку для платы на базе чипа ESP32, которая управляет отдельным ASIC-чипом (например, BM1397 или BM1366 из разобранных Antminer) и майнит биткоин прямо через домашний Wi-Fi.
По сути, это открытый микро-майнер размером с ладонь, который потребляет пару десятков ватт, тихо стоит на столе и выдает честный хешрейт. Разберемся, как устроена эта система изнутри и чем репозиторий интересен программистам.
Что внутри проекта
ESP-Miner написан на чистом C под фреймворк ESP-IDF от Espressif. Прошивка берет на себя всю черновую работу: инициализирует ASIC, настраивает напряжение ядра и частоту, подключается к Wi-Fi и держит связь с майнинг-пулом по протоколу Stratum.
В состав системы входит AxeOS. Это встроенная веб-морда и HTTP-сервер, который отдает метрики, позволяет менять пулы и рулить кулером. Раньше веб-интерфейс компилировался отдельно и заливался в отдельный раздел SPIFFS, но в свежих версиях авторы упаковали фронтенд прямо в основной бинарник приложения (esp-miner.bin), сжав его через gzip. Если нужно накатить кастомную тему или собственный UI, в настройках можно включить отдельный раздел www.bin.
Плата работает не со всеми модулями подряд. Прошивке критически нужен модуль ESP32-S3-WROOM-1 ревизии N16R8, на борту которого распаяно 16 МБ флеш-памяти и 8 МБ октальной PSRAM. Без этой оперативной памяти прошивка просто не заведется, учитывая объемы буферов и встроенные сетевые сервисы.
Управление через REST API и веб-сокеты
Самое приятное для разработчика — устройство не пытается быть «вещью в себе». AxeOS предоставляет полноценный OpenAPI-интерфейс, через который можно автоматизировать любые действия.
Вот так, к примеру, выглядит обычный опрос состояния асика через curl:
curl http://bitaxe.local/api/system/asic
В ответ прилетает JSON с текущей частотой, напряжением, температурой и хешрейтом. Если нужно переключить скорость вентилятора, отправляем PATCH-запрос:
curl -X PATCH http://bitaxe.local/api/system \
-H "Content-Type: application/json" \
-d '{"fanspeed": "80"}'
Поддерживаются оба поколения протокола Stratum: классический V1 и современный V2 с зашифрованными каналами и сниженным трафиком. Настроить пул можно прямо из терминала:
curl -X PUT http://bitaxe.local/api/system/pools/0 \
-H "Content-Type: application/json" \
-d '{
"stratumProtocol": "SV1",
"stratumURL": "solo.ckpool.org",
"stratumPort": 3333,
"stratumUser": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa.worker1",
"stratumPassword": "x",
"stratumSuggestedDifficulty": 0,
"stratumExtranonceSubscribe": true,
"stratumTLS": 0,
"stratumDecodeCoinbase": true
}'
Для потокового мониторинга предусмотрены два веб-сокета. По адресу /api/ws льются текстовые системные логи в реальном времени, а /api/ws/live транслирует JSON-поток с изменениями состояния системы. С помощью утилиты websocat можно сразу перенаправить этот поток в локальный дашборд или скрипт сбора метрик:
websocat ws://bitaxe.local/api/ws/live
Автообнаружение в сети через mDNS
Если вы подключаете не один Bitaxe, а сразу пачку (так называемый swarm), искать IP-адрес каждого через роутер надоедает. Разработчики встроили поддержку многоадресного DNS (mDNS) с рекламой сервисов через DNS-SD.
Устройство регистрирует себя с подтипом _axeos._sub._http._tcp. В TXT-записях оно сразу отдает версию платы, модель ASIC-чипа, их количество и версию прошивки. На Linux найти все активные майнеры в локалке можно одной командой:
avahi-browse _axeos._sub._http._tcp
Если в сети появятся два устройства с одинаковым именем bitaxe, конфликт разрешается автоматически. Прошивка берет суффикс MAC-адреса и переименовывает себя, например, в bitaxe-12ab.
Сборка и прошивка
Для заливки готовых сборок и редактирования настроек NVS команда сделала собственную CLI-утилиту на Python — bitaxetool. Обратите внимание на версию зависимостей: утилита завязана на старую версию esptool 4.9.0 и пока сбоит на пятой ветке.
Установка и заливка фабричного образа выглядят так:
pip install bitaxetool==0.6.1
bitaxetool --config ./config-401.cvs --firmware ./esp-miner-factory-401-v2.4.2.bin
Если захотите покопаться в исходниках и собрать проект локально, вам даже не придется ставить на хост весь стек ESP-IDF. В репозитории есть готовый .devcontainer. Сборку можно запустить внутри изолированного контейнера Docker:
git clone --recursive https://github.com/bitaxeorg/ESP-MINER.git
cd ESP-MINER
docker build -t espminer-build .devcontainer
docker run --rm -it -v $PWD:/workspace espminer-build /bin/bash
Внутри контейнера выполняем стандартную команду idf.py build. Затем запускаем вспомогательный скрипт merge_bin.sh, который склеивает загрузчик, таблицу разделов и образ прошивки в единый файл для прошивки.
С какими странностями можно столкнуться
Есть пара нюансов, о которых создатели честно предупреждают в документации.
Во-первых, домашние роутеры. Некоторые модели ASUS и TP-Link со встроенными системами фильтрации трафика (вроде AiProtection или IoT Shield) молча блокируют протокол Stratum, принимая пакеты майнера за активность вредоносного ПО. В итоге плата успешно держит Wi-Fi, но хешрейт упорно держится на нуле. Приходится отключать эти настройки в админке маршрутизатора.
Во-вторых, разгон. По умолчанию поля регулировки частоты и вольтажа ядра заблокированы в веб-интерфейсе от греха подальше. Чтобы открыть доступ к тонкой настройке, нужно добавить параметр ?oc в адресную строку браузера на вкладке настроек. Без нормального радиатора и хорошего вентилятора делать это явно не стоит.
В-третьих, физическое подключение. Некоторые ревизии плат Bitaxe капризничают при прямом подключении кабелем Type-C — Type-C из-за разводки резисторов CC-линий. Переходник на USB-A сразу решает проблему.
Зачем разработчику смотреть этот проект
ESP-Miner интересен не столько возможностью заработать сатоши (при такой мощности это скорее участие в лотерее соло-майнинга), сколько своей архитектурой. Это отличный референс того, как надо строить сложные устройства на базе ESP32:
- Как организовать полноценный REST API и веб-сокеты на микроконтроллере без зависаний.
- Как подружить веб-интерфейс и низкоуровневый C-код в едином сжатом бинарнике.
- Как реализовывать автопоиск устройств через mDNS без центрального сервера.
- Как работать со сторонними криптографическими библиотеками вроде
libsecp256k1на встраиваемых чипах.
Если у вас лежит без дела ESP32-S3 с PSRAM или вы давно хотели понять протокол Stratum на практике, поковырять репозиторий определенно стоит.
