>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
C

Comment miner du Bitcoin sur un microcontrôleur ESP32

GitHub Downloads GitHub commit activity GitHub contributors Repobeats analytics

Le minage de la première cryptomonnaie s'est longtemps transformé en un club fermé de centres de données industriels avec d'immenses hangars remplis d'ASICs bourdonnnants. Pour un développeur ordinaire, construire un rig de minage à domicile aujourd'hui pour s'amuser est inutile et coûteux. Mais le projet Bitaxe et le dépôt ESP-Miner font revivre la sensation du DIY garage. Ils ont créé un firmware open-source complet pour une carte basée sur le chip ESP32 qui contrôle un ASIC autonome (par exemple, BM1397 ou BM1366 provenant d'Antminers désassemblés) et mine du Bitcoin directement via le Wi-Fi domestique.

En substance, c'est un micro-miner open-source de la taille d'une paume qui consomme quelques dizaines de watts, reste silencieux sur un bureau, et fournit un hashrate honnête. Découvrons comment ce système fonctionne en interne et ce qui rend ce dépôt intéressant pour les développeurs.

Ce qu'il y a à l'intérieur du projet

ESP-Miner est écrit en C pur sous le framework ESP-IDF d'Espressif. Le firmware gère tout le travail de fond : initialise l'ASIC, configure la tension et la fréquence du cœur, se connecte au Wi-Fi, et maintient la communication avec le pool de minage via le protocole Stratum.

Le système inclut AxeOS. Il s'agit d'une interface web intégrée et d'un serveur HTTP qui diffuse les métriques, permet de changer les pools et contrôle le ventilateur. Auparavant, l'interface web était compilée séparément et flashée vers une partition SPIFFS distincte, mais dans les versions récentes, les auteurs ont intégré le frontend directement dans le binaire de l'application principale (esp-miner.bin), en le compressant avec gzip. Si vous avez besoin d'appliquer un thème personnalisé ou votre propre interface utilisateur, vous pouvez activer une partition distincte www.bin dans les paramètres.

La carte ne fonctionne pas avec n'importe quel module. Le firmware requiert impérativement un module ESP32-S3-WROOM-1 révision N16R8, qui possède 16 Mo de mémoire flash et 8 Mo de PSRAM octal soudée sur la carte. Sans cette RAM, le firmware ne démarrera tout simplement pas, étant donné les tailles des buffers et les services réseau intégrés.

Contrôle via l'API REST et les WebSockets

La chose la plus agréable pour les développeurs est que l'appareil ne cherche pas à être une "boîte noire". AxeOS fournit une interface OpenAPI complète à travers laquelle vous pouvez automatiser n'importe quelle action.

Voici à quoi ressemble un appel typique du statut de l'ASIC via curl :

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

La réponse renvoie un JSON avec la fréquence actuelle, la tension, la température et le hashrate. Si vous avez besoin de changer la vitesse du ventilateur, envoyez une requête PATCH :

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

Les deux générations du protocole Stratum sont supportées : la classique V1 et la moderne V2 avec des canaux chiffrés et un trafic réduit. Vous pouvez configurer le pool directement depuis le 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
     }'

Pour la surveillance en streaming, deux WebSockets sont disponibles. À l'adresse /api/ws, les logs système en texte circulent en temps réel, et /api/ws/live diffuse un flux JSON avec les changements d'état du système. En utilisant l'utilitaire websocat, vous pouvez immédiatement rediriger ce flux vers un tableau de bord local ou un script de collecte de métriques :

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

Découverte automatique sur le réseau via mDNS

Si vous ne connectez pas un seul Bitaxe mais tout un lot (un soi-disant essaim), rechercher chaque adresse IP via le routeur devient fastidieux. Les développeurs ont intégré la prise en charge du DNS multicast (mDNS) avec la publicité de service via DNS-SD.

L'appareil s'enregistre avec le sous-type _axeos._sub._http._tcp. Dans les enregistrements TXT, il fournit immédiatement la version de la carte, le modèle du chip ASIC, leur nombre et la version du firmware. Sous Linux, vous pouvez trouver tous les mineurs actifs sur le réseau local avec une seule commande :

avahi-browse _axeos._sub._http._tcp

Si deux appareils portant le même nom bitaxe apparaissent sur le réseau, le conflit est résolu automatiquement. Le firmware prend le suffixe de l'adresse MAC et se renomme, par exemple en bitaxe-12ab.

Compilation et flashage

Pour flasher les versions pré-compilées et éditer les paramètres NVS, l'équipe a créé son propre utilitaire CLI Python — bitaxetool. Faites attention aux versions des dépendances : l'utilitaire est lié à une ancienne version de esptool 4.9.0 et plante actuellement sur la branche cinq.

L'installation et le flashage de l'image factory ressemble à ceci :

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

Si vous voulez explorer le code source et compiler le projet en local, vous n'aurez même pas besoin d'installer toute la pile ESP-IDF sur votre machine hôte. Le dépôt contient un Dockerfile prêt à l'emploi .devcontainer. Vous pouvez exécuter la compilation dans un conteneur Docker isolé :

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

À l'intérieur du conteneur, nous exécutons la commande standard idf.py build. Ensuite, nous lançons le script d'aide merge_bin.sh, qui fusionne le bootloader, la table de partitions et l'image du firmware en un seul fichier flashable.

Les bizarreries auxquelles vous pourriez être confronté

Il y a quelques nuances que les créateurs honnêtement mentionnent dans la documentation.

Premièrement, les routeurs domestiques. Certains modèles ASUS et TP-Link avec des systèmes de filtrage de trafic intégrés (comme AiProtection ou IoT Shield) bloquent silencieusement le protocole Stratum, confondant les paquets du mineur avec une activité de logiciel malveillant. Résultat, la carte maintient bien le Wi-Fi, mais le hashrate reste obstinément à zéro. Vous devez désactiver ces paramètres dans le panneau d'administration du routeur.

Deuxièmement, l'overclocking. Par défaut, les champs de adjustment de la fréquence et de la tension du cœur sont verrouillés dans l'interface web pour des raisons de sécurité. Pour débloquer l'accès aux réglages fins, vous devez ajouter le paramètre ?oc dans la barre d'adresse du navigateur dans l'onglet des paramètres. Sans un dissipateur thermique approprié et un bon ventilateur, faire cela n'est clairement pas值得.

Troisièmement, la connexion physique. Certaines révisions des cartes Bitaxe sont capricieuses concernant les connexions directes en câble Type-C vers Type-C en raison du routage des résistances des lignes CC. Un adaptateur vers USB-A résout immédiatement le problème.

Pourquoi les développeurs devraient regarder ce projet

ESP-Miner est intéressant non pas tant pour la capacité de gagner des satoshis (à ce niveau de puissance, c'est plutôt comme participer à une loterie de minage solo), mais pour son architecture. C'est une excellente référence pour savoir comment construire des appareils complexes basés sur l'ESP32 :

  • Comment organiser une API REST complète et des WebSockets sur un microcontrôleur sans gel.
  • Comment combiner une interface web et du code C de bas niveau dans un seul binaire compressé.
  • Comment implémenter la découverte automatique d'appareils via mDNS sans serveur central.
  • Comment travailler avec des bibliothèques cryptographiques tierces comme libsecp256k1 sur des puces embarquées.

Si vous avez un ESP32-S3 avec PSRAM qui traîne sans utilisation ou si vous avez longtemps voulu comprendre le protocole Stratum en pratique, explorer le dépôt en vaut definitely la peine.

Projets similaires