>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
C

So führen Sie Bitcoin-Mining auf einem ESP32-Mikrocontroller durch

GitHub Downloads GitHub commit activity GitHub contributors Repobeats analytics

Das Mining der ersten Kryptowährung hat sich längst zu einem geschlossenen Club aus industriellen Rechenzentren mit riesigen Hallen voller summender ASICs entwickelt. Für einen normalen Entwickler ist der Aufbau eines Heim-Mining-Rigs heute sinnlos und teuer. Aber das Bitaxe-Projekt und das ESP-Miner-Repository holen das Gefühl von Garage-DIY zurück. Die Entwickler haben eine vollwertige Open-Source-Firmware für eine Platine auf ESP32-Basis erstellt, die einen eigenständigen ASIC-Chip steuert (z. B. BM1397 oder BM1366 aus demontierten Antminern) und Bitcoin direkt über Heim-Wi-Fi mined.

Im Grunde ist dies ein Open-Source-Mikro-Miner in Handgröße, der ein paar Dutzend Watt verbraucht, ruhig auf dem Schreibtisch sitzt und ehrliche Hashrate liefert. Lassen Sie uns herausfinden, wie dieses System intern funktioniert und was das Repository für Programmierer interessant macht.

Was steckt im Projekt

ESP-Miner ist in reinem C unter dem ESP-IDF-Framework von Espressif geschrieben. Die Firmware erledigt die gesamte Schwerarbeit: Initialisierung des ASIC, Konfiguration von Kernspannung und -frequenz, Verbindung mit Wi-Fi und Aufrechterhaltung der Kommunikation mit dem Mining-Pool über das Stratum-Protokoll.

Das System umfasst AxeOS. Dies ist eine eingebaute Weboberfläche und ein HTTP-Server, der Metriken bereitstellt, Pool-Wechsel ermöglicht und den Lüfter steuert. Zuvor wurde die Weboberfläche separat kompiliert und auf eine separate SPIFFS-Partition geflasht, aber in neueren Versionen haben die Autoren das Frontend direkt in die Hauptanwendungs-Binary gebündelt (esp-miner.bin), komprimiert mit gzip. Wenn Sie ein eigenes Theme oder eine eigene UI anwenden möchten, können Sie eine separate Partition www.bin in den Einstellungen aktivieren.

Die Platine funktioniert nicht mit jedem beliebigen Modul. Die Firmware benötigt zwingend ein ESP32-S3-WROOM-1-Modul der Revision N16R8 mit 16 MB Flash-Speicher und 8 MB Octal-PSRAM, die auf der Platine verlötet sind. Ohne diesen RAM startet die Firmware einfach nicht, angesichts der Puffergrößen und der eingebauten Netzwerkdienste.

Steuerung über REST-API und WebSockets

Das Angenehmste für Entwickler ist, dass das Gerät nicht versucht, eine „Black Box" zu sein. AxeOS bietet eine vollständige OpenAPI-Schnittstelle, über die Sie beliebige Aktionen automatisieren können.

So sieht ein typischer Poll des ASIC-Status über curl aus:

curl http://bitaxe.local/api/system/asic

Die Antwort liefert ein JSON mit aktueller Frequenz, Spannung, Temperatur und Hashrate. Wenn Sie die Lüftergeschwindigkeit ändern möchten, senden Sie eine PATCH-Anfrage:

curl -X PATCH http://bitaxe.local/api/system \
     -H "Content-Type: application/json" \
     -d '{"fanspeed": "80"}'

Beide Generationen des Stratum-Protokolls werden unterstützt: klassisches V1 und modernes V2 mit verschlüsselten Kanälen und reduziertem Traffic. Sie können den Pool direkt vom Terminal aus konfigurieren:

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
     }'

Für Streaming-Monitoring stehen zwei WebSockets zur Verfügung. Unter der Adresse /api/ws fließen Text-Systemprotokolle in Echtzeit, und /api/ws/live sendet einen JSON-Stream mit Systemzustandsänderungen. Mit dem Utility websocat können Sie diesen Stream sofort an ein lokales Dashboard oder ein Metrik-Sammlungsskript weiterleiten:

websocat ws://bitaxe.local/api/ws/live

Auto-Discovery im Netzwerk über mDNS

Wenn Sie nicht nur ein einzelnes Bitaxe, sondern eine ganze Charge (ein sogenannter Schwarm) anschließen, wird die Suche nach jeder IP-Adresse über den Router mühsam. Die Entwickler haben Unterstützung für Multicast-DNS (mDNS) mit Service-Advertisement über DNS-SD eingebaut.

Das Gerät registriert sich mit dem Subtyp _axeos._sub._http._tcp. In TXT-Records stellt es sofort die Board-Version, das ASIC-Chip-Modell, deren Anzahl und die Firmware-Version bereit. Unter Linux können Sie mit einem einzigen Befehl alle aktiven Miner im lokalen Netzwerk finden:

avahi-browse _axeos._sub._http._tcp

Wenn zwei Geräte mit demselben Namen bitaxe im Netzwerk erscheinen, wird der Konflikt automatisch gelöst. Die Firmware nimmt das MAC-Address-Suffix und benennt sich selbst um, zum Beispiel zu bitaxe-12ab.

Build und Flashen

Für das Flashen von vorgefertigten Releases und das Bearbeiten von NVS-Einstellungen hat das Team ein eigenes Python-CLI-Tool erstellt — bitaxetool. Achten Sie auf die Abhängigkeitsversionen: Das Tool ist an eine alte Version von esptool 4.9.0 gebunden und funktioniert derzeit nicht mit dem fünften Branch.

Die Installation und das Flashen des Werks-Images sieht so aus:

pip install bitaxetool==0.6.1
bitaxetool --config ./config-401.cvs --firmware ./esp-miner-factory-401-v2.4.2.bin

Wenn Sie in den Quellcode eintauchen und das Projekt lokal bauen möchten, müssen Sie nicht einmal den gesamten ESP-IDF-Stack auf Ihrem Host installieren. Das Repository enthält ein fertiges .devcontainer. Sie können den Build in einem isolierten Docker-Container ausführen:

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

Im Container führen wir den Standardbefehl idf.py build aus. Dann starten wir das Hilfsskript merge_bin.sh, das Bootloader, Partitionstabelle und Firmware-Image zu einer einzigen flashbaren Datei zusammenführt.

Auf welche Eigenheiten Sie stoßen könnten

Es gibt ein paar Nuancen, vor denen die Entwickler in der Dokumentation ehrlich warnen.

Erstens: Heim-Router. Einige ASUS- und TP-Link-Modelle mit eingebauten Traffic-Filter-Systemen (wie AiProtection oder IoT Shield) blockieren das Stratum-Protokoll stillschweigend und verwechseln die Pakete des Miners mit bösartiger Software-Aktivität. Infolgedessen behält das Board erfolgreich Wi-Fi bei, aber die Hashrate bleibt hartnäckig bei Null. Sie müssen diese Einstellungen im Admin-Panel des Routers deaktivieren.

Zweitens: Übertaktung. Standardmäßig sind die Felder für Frequenz- und Kernspannungsanpassung in der Weboberfläche aus Sicherheitsgründen gesperrt. Um den Zugriff auf die Feinabstimmung freizuschalten, müssen Sie den Parameter ?oc zur Browser-Adressleiste auf dem Einstellungen-Tab hinzufügen. Ohne einen ordentlichen Kühlkörper und einen guten Lüfter ist das definitiv nicht empfehlenswert.

Drittens: Physikalische Verbindung. Einige Revisionen der Bitaxe-Boards sind pingelig bei direkten Type-C-zu-Type-C-Kabelverbindungen aufgrund der CC-Line-Widerstandsführung. Ein Adapter auf USB-A löst das Problem sofort.

Warum Entwickler sich dieses Projekt ansehen sollten

ESP-Miner ist nicht so sehr wegen der Möglichkeit interessant, Satoshis zu verdienen (auf diesem Leistungsniveau ist es eher wie die Teilnahme an einer Solo-Mining-Lotterie), sondern wegen seiner Architektur. Es ist eine großartige Referenz dafür, wie man komplexe Geräte auf ESP32-Basis baut:

  • Wie man eine vollständige REST-API und WebSockets auf einem Mikrocontroller organisiert, ohne dass das System einfriert.
  • Wie man eine Weboberfläche und Low-Level-C-Code in einer einzigen komprimierten Binary kombiniert.
  • Wie man die Auto-Discovery von Geräten über mDNS ohne zentralen Server implementiert.
  • Wie man mit Kryptografie-Bibliotheken wie libsecp256k1 auf eingebetteten Chips arbeitet.

Wenn Sie einen ungenutzten ESP32-S3 mit PSRAM herumliegen haben oder schon lange das Stratum-Protokoll in der Praxis verstehen möchten, lohnt es sich definitiv, einen Blick in das Repository zu werfen.

Ähnliche Projekte