Como Executar Mineração de Bitcoin em um Microcontrolador ESP32
A mineração da primeira criptomoeda há muito se transformou em um clube fechado de data centers industriais com galpões inteiros cheios de ASICs zumbindo. Para um desenvolvedor comum, construir um rig de mineração caseiro hoje para se divertir é inútil e caro. Mas o projeto Bitaxe e o repositório ESP- Miner trazem de volta a sensação de DIY na garagem. Os caras criaram um firmware open-source completo para uma placa baseada no chip ESP32 que controla um chip ASIC standalone (por exemplo, BM1397 ou BM1366 de Antminers desmontados) e minera Bitcoin diretamente pela Wi-Fi de casa.
Basicamente, é um micro-minerador open-source do tamanho de uma palma da mão que consome algumas dezenas de watts, fica quietamente na mesa e entrega uma taxa de hash honesta. Vamos entender como esse sistema funciona internamente e o que torna o repositório interessante para programadores.
O Que Tem Dentro do Projeto
O ESP- Miner é escrito em C puro sob o framework ESP-IDF da Espressif. O firmware cuida de todo o trabalho pesado: inicializa o ASIC, configura tensão e frequência do núcleo, conecta ao Wi-Fi e mantém comunicação com o pool de mineração via protocolo Stratum.
O sistema inclui o AxeOS. Esta é uma interface web integrada e servidor HTTP que serve métricas, permite alterar pools e controlar o cooler. Anteriormente, a interface web era compilada separadamente e gravada em uma partição SPIFFS separada, mas nas versões recentes os autores bundlaram o frontend diretamente no binário principal da aplicação (esp-miner.bin), comprimindo-o com gzip. Se você precisar aplicar um tema customizado ou sua própria UI, pode habilitar uma partição separada www.bin nas configurações.
A placa não funciona com qualquer módulo. O firmware requer criticamente um módulo ESP32-S3-WROOM-1 revisão N16R8, que tem 16 MB de memória flash e 8 MB de PSRAM octal soldado na placa. Sem essa RAM, o firmware simplesmente não inicializa, considerando os tamanhos de buffer e serviços de rede embutidos.
Controle via API REST e WebSockets
A coisa mais agradável para desenvolvedores é que o dispositivo não tenta ser uma "caixa preta". O AxeOS fornece uma interface OpenAPI completa através da qual você pode automatizar qualquer ação.
Aqui está como fica uma poll típica do status do ASIC via curl:
curl http://bitaxe.local/api/system/asic
A resposta entrega um JSON com frequência atual, tensão, temperatura e taxa de hash. Se você precisar trocar a velocidade do cooler, envie uma requisição PATCH:
curl -X PATCH http://bitaxe.local/api/system \
-H "Content-Type: application/json" \
-d '{"fanspeed": "80"}'
Ambas as gerações do protocolo Stratum são suportadas: a clássica V1 e a moderna V2 com canais criptografados e tráfego reduzido. Você pode configurar o pool direto do terminal:
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
}'
Para monitoramento em stream, há dois WebSockets disponíveis. No endereço /api/ws, logs de sistema em texto fluem em tempo real, e /api/ws/live transmite um stream JSON com mudanças de estado do sistema. Usando o utilitário websocat, você pode imediatamente redirecionar esse stream para um dashboard local ou script de coleta de métricas:
websocat ws://bitaxe.local/api/ws/live
Auto-Descoberta na Rede via mDNS
Se você está conectando não apenas um Bitaxe, mas um lote inteiro (um chamado enxame), procurar cada endereço IP pelo roteador fica tedioso. Os desenvolvedores embutiram suporte a DNS multicast (mDNS) com anúncio de serviço via DNS-SD.
O dispositivo se registra com o subtipo _axeos._sub._http._tcp. Nos registros TXT, ele fornece imediatamente a versão da placa, modelo do chip ASIC, sua quantidade e versão do firmware. No Linux, você pode encontrar todos os miners ativos na rede local com um único comando:
avahi-browse _axeos._sub._http._tcp
Se dois dispositivos com o mesmo nome bitaxe aparecerem na rede, o conflito é resolvido automaticamente. O firmware pega o sufixo do endereço MAC e renomeia a si mesmo, por exemplo, para bitaxe-12ab.
Build e Flash
Para gravar releases pré-buildados e editar configurações NVS, o time fez seu próprio utilitário CLI Python — bitaxetool. Preste atenção às versões das dependências: o utilitário está atrelado a uma versão antiga de esptool 4.9.0 e atualmente quebra no branch cinco.
A instalação e flash da imagem de fábrica fica assim:
pip install bitaxetool==0.6.1
bitaxetool --config ./config-401.cvs --firmware ./esp-miner-factory-401-v2.4.2.bin
Se você quiser mergulhar no código fonte e fazer build do projeto localmente, você nem precisará instalar toda a stack ESP-IDF no seu host. O repositório tem um .devcontainer pronto. Você pode rodar o build dentro de um container Docker isolado:
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
Dentro do container, rodamos o comando padrão idf.py build. Então lançamos o script auxiliar merge_bin.sh, que mescla o bootloader, tabela de partições e imagem do firmware em um único arquivo gravável.
Quais Peculiaridades Você Pode Encontrar
Há alguns detalhes que os criadores avisam honestamente na documentação.
Primeiro, roteadores domésticos. Alguns modelos de ASUS e TP-Link com sistemas integrados de filtragem de tráfego (como AiProtection ou IoT Shield) bloqueiam silenciosamente o protocolo Stratum, confundindo os pacotes do miner com atividade de software malicioso. Como resultado, a placa mantém o Wi-Fi com sucesso, mas a taxa de hash teimosamente permanece em zero. Você tem que desabilitar essas configurações no painel admin do roteador.
Segundo, overclock. Por padrão, os campos de ajuste de frequência e tensão do núcleo estão bloqueados na interface web por segurança. Para desbloquear o acesso ao fine-tuning, você precisa adicionar o parâmetro ?oc na barra de endereço do navegador na aba de configurações. Sem um dissipador de calor adequado e um bom cooler, fazer isso claramente não vale a pena.
Terceiro, conexão física. Algumas revisões das placas Bitaxe são exigentes sobre conexões diretas de cabo Type-C para Type-C devido ao roteamento de resistores de linha CC. Um adaptador para USB-A resolve o problema imediatamente.
Por Que Desenvolvedores Devem Olhar Para Este Projeto
O ESP- Miner é interessante não tanto pela capacidade de ganhar satoshis (nesse nível de potência, é mais como participar de uma loteria de mineração solo), mas pela sua arquitetura. É uma ótima referência para como construir dispositivos complexos baseados em ESP32:
- Como organizar uma API REST completa e WebSockets em um microcontrolador sem travar.
- Como combinar uma interface web e código C de baixo nível em um único binário comprimido.
- Como implementar auto-descoberta de dispositivos via mDNS sem um servidor central.
- Como trabalhar com bibliotecas criptográficas de terceiros como
libsecp256k1em chips embarcados.
Se você tem um ESP32-S3 com PSRAM jogado sem uso ou há muito tempo queria entender o protocolo Stratum na prática, mergulhar no repositório definitivamente vale a pena.
Projetos relacionados