>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
C

Jak uruchomić kopanie Bitcoina na mikrokontrolerze ESP32

GitHub Downloads GitHub commit activity GitHub contributors Repobeats analytics

Kopanie pierwszej kryptowaluty dawno zamieniło się w zamknięty klub przemysłowych centrów danych z ogromnymi halami pełnymi brzęczących ASIC-ów. Dla zwykłego programisty budowanie domowej koparki dziś, dla zabawy, jest bezcelowe i kosztowne. Ale projekt Bitaxe i repozytorium ESP-Miner przywracają uczucie garażowego DIY. Facet stworzyli pełnoprawny firmware typu open-source dla płytki opartej na chipie ESP32, która steruje samodzielnym układem ASIC (np. BM1397 lub BM1366 z rozbitych Antminerów) i kopie Bitcoina bezpośrednio przez domowe Wi-Fi.

W zasadzie to jest open-source'owy mikro-kopacz wielkości dłoni, który pobiera kilkadziesiąt watów, cicho siedzi na biurku i dostarcza uczciwy hashrate. Rozłóżmy ten system na czynniki pierwsze i sprawdźmy, co czyni to repozytorium interesującym dla programistów.

Co kryje się w projekcie

ESP-Miner jest napisany w czystym C w frameworku ESP-IDF firmy Espressif. Firmware obsługuje całą ciężką pracę: inicjalizuje ASIC, konfiguruje napięcie rdzenia i częstotliwość, łączy się z Wi-Fi i utrzymuje komunikację z pulą wydobywczą przez protokół Stratum.

System zawiera AxeOS. To wbudowany interfejs webowy i serwer HTTP, który udostępnia metryki, pozwala zmieniać pule i sterować wentylatorem. Wcześniej interfejs webowy był kompilowany osobno i wgrywany do osobnej partycji SPIFFS, ale w najnowszych wersjach autorzy dołączyli frontend bezpośrednio do głównego pliku binarnego aplikacji (esp-miner.bin), kompresując go gzipem. Jeśli chcesz zastosować własny motyw lub własny interfejs, możesz włączyć osobną partycję www.bin w ustawieniach.

Płytka nie działa z dowolnym modułem. Firmware krytycznie wymaga modułu ESP32-S3-WROOM-1 w rewizji N16R8, który ma 16 MB pamięci flash i 8 MB oktalnej PSRAM przylutowanej na płytce. Bez tej pamięci RAM firmware po prostu się nie uruchomi, biorąc pod uwagę rozmiary buforów i wbudowane usługi sieciowe.

Sterowanie przez REST API i WebSockety

Najprzyjemniejsze dla developerów jest to, że urządzenie nie próbuje być "zamkniętą skrzynką". AxeOS udostępnia pełny interfejs OpenAPI, przez który możesz zautomatyzować dowolne akcje.

Oto jak wygląda typowe odpytywanie statusu ASIC przez curl:

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

Odpowiedź dostarcza JSON z aktualną częstotliwością, napięciem, temperaturą i hashrate. Jeśli chcesz zmienić prędkość wentylatora, wyślij żądanie PATCH:

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

Obsługiwane są obie generacje protokołu Stratum: klasyczny V1 i nowoczesny V2 z szyfrowanymi kanałami i zmniejszonym ruchem. Możesz skonfigurować pulę bezpośrednio z terminala:

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

Do strumieniowego monitorowania dostępne są dwa WebSockety. Pod adresem /api/ws płyną w czasie rzeczywistym tekstowe logi systemowe, a /api/ws/live nadaje strumień JSON ze zmianami stanu systemu. Za pomocą narzędzia websocat możesz od razu przekierować ten strumień do lokalnego dashboardu lub skryptu zbierającego metryki:

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

Automatyczne wykrywanie w sieci przez mDNS

Jeśli podłączasz nie jeden Bitaxe, a całą partię (tzw. rój), szukanie każdego adresu IP przez router staje się żmudne. Deweloperzy wbudowali obsługę multicast DNS (mDNS) z reklamą usługi przez DNS-SD.

Urządzenie rejestruje się z podtypem _axeos._sub._http._tcp. W rekordach TXT od razu podaje wersję płytki, model układu ASIC, ich liczbę i wersję firmware'u. Na Linuksie możesz znaleźć wszystkie aktywne koparki w sieci lokalnej jednym poleceniem:

avahi-browse _axeos._sub._http._tcp

Jeśli w sieci pojawią się dwa urządzenia o tej samej nazwie bitaxe, konflikt jest rozwiązywany automatycznie. Firmware bierze sufiks adresu MAC i zmienia nazwę, na przykład na bitaxe-12ab.

Budowanie i wgrywanie

Do wgrywania prekompilowanych wydań i edycji ustawień NVS zespół stworzył własne narzędzie CLI w Pythonie — bitaxetool. Zwróć uwagę na wersje zależności: narzędzie jest powiązane ze starą wersją esptool 4.9.0 i obecnie nie działa na piątej gałęzi.

Instalacja i wgranie obrazu fabrycznego wygląda tak:

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

Jeśli chcesz zagłębić się w kod źródłowy i zbudować projekt lokalnie, nie będziesz nawet potrzebować instalować całego stosu ESP-IDF na hoście. W repozytorium jest gotowy .devcontainer. Możesz uruchomić budowanie w izolowanym kontenerze 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

Wewnątrz kontenera uruchamiamy standardowe polecenie idf.py build. Następnie uruchamiamy skrypt pomocniczy merge_bin.sh, który łączy bootloader, tablicę partycji i obraz firmware'u w jeden plik gotowy do wgrania.

Z jakimi dziwactwami można się spotkać

Jest kilka niuansów, które twórcy uczciwie ostrzegają w dokumentacji.

Po pierwsze, routery domowe. Niektóre modele ASUS i TP-Link z wbudowanymi systemami filtrowania ruchu (jak AiProtection czy IoT Shield) dyskretnie blokują protokół Stratum, biorąc pakiety koparki za złośliwe oprogramowanie. W rezultacie płytka z powodzeniem utrzymuje Wi-Fi, ale hashrate uparcie pozostaje na zero. Trzeba wyłączyć te ustawienia w panelu admina routera.

Po drugie, podkręcanie. Domyślnie pola regulacji częstotliwości i napięcia rdzenia są zablokowane w interfejsie webowym ze względów bezpieczeństwa. Aby odblokować dostęp do precyzyjnego dostrajania, musisz dodać parametr ?oc do paska adresu przeglądarki na karcie ustawień. Bez odpowiedniego radiatora i dobrego wentylatora, robienie tego zdecydowanie nie jest warte zachodu.

Po trzecie, połączenie fizyczne. Niektóre rewizje płytek Bitaxe są wybredne jeśli chodzi o bezpośrednie połączenia kablami Type-C do Type-C z powodu trasowania rezystorów linii CC. Adapter do USB-A natychmiast rozwiązuje problem.

Dlaczego programiści powinni zainteresować się tym projektem

ESP-Miner jest interesujący nie tyle ze względu na możliwość zarabiania satoshi (przy tym poziomie mocy to bardziej jak uczestnictwo w loterii solo miningu), co ze względu na swoją architekturę. To świetny punkt odniesienia, jak budować złożone urządzenia oparte na ESP32:

  • Jak zorganizować pełne REST API i WebSockety na mikrokontrolerze bez zamrożenia.
  • Jak połączyć interfejs webowy i niskopoziomowy kod C w jeden skompresowany binarny plik.
  • Jak zaimplementować automatyczne wykrywanie urządzeń przez mDNS bez centralnego serwera.
  • Jak pracować z zewnętrznymi bibliotekami kryptograficznymi jak libsecp256k1 na układach wbudowanych.

Jeśli masz ESP32-S3 z PSRAM leżący bezczynnie lub od dawna chciałeś zrozumieć protokół Stratum w praktyce, zagłębienie się w repozytorium zdecydowanie jest warte zachodu.

Powiązane projekty