commit
c0c3acde55
@ -137,3 +137,46 @@ lib_deps =
|
|||||||
arduino-libraries/NTPClient
|
arduino-libraries/NTPClient
|
||||||
https://github.com/golden-guy/Arduino_wolfssl.git#v5.5.4
|
https://github.com/golden-guy/Arduino_wolfssl.git#v5.5.4
|
||||||
https://github.com/FastLED/FastLED
|
https://github.com/FastLED/FastLED
|
||||||
|
|
||||||
|
[env:ESP32-2432S028R]
|
||||||
|
platform = espressif32
|
||||||
|
board = esp32dev
|
||||||
|
framework = arduino
|
||||||
|
monitor_filters =
|
||||||
|
esp32_exception_decoder
|
||||||
|
time
|
||||||
|
log2file
|
||||||
|
monitor_speed = 115200
|
||||||
|
upload_speed = 921600
|
||||||
|
;build_type = debug
|
||||||
|
board_build.partitions = huge_app.csv
|
||||||
|
build_flags =
|
||||||
|
-D ESP32_2432S028R=1
|
||||||
|
-DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG
|
||||||
|
-DUSER_SETUP_LOADED=1
|
||||||
|
-DILI9341_2_DRIVER=1
|
||||||
|
-DTFT_WIDTH=240
|
||||||
|
-DTFT_HEIGHT=320
|
||||||
|
-DTFT_BACKLIGHT_ON=HIGH
|
||||||
|
-DTFT_MOSI=13
|
||||||
|
-DTFT_SCLK=14
|
||||||
|
-DTFT_CS=15
|
||||||
|
-DTFT_DC=2
|
||||||
|
-DTFT_RST=12
|
||||||
|
-DTFT_BL=21
|
||||||
|
-DTOUCH_CS=33
|
||||||
|
-DLOAD_GLCD=1
|
||||||
|
-DLOAD_FONT2=1
|
||||||
|
-DLOAD_GFXFF=1
|
||||||
|
-DSMOOTH_FONT=1
|
||||||
|
-DSPI_FREQUENCY=55000000
|
||||||
|
-DSPI_READ_FREQUENCY=20000000
|
||||||
|
-DSPI_TOUCH_FREQUENCY=2500000
|
||||||
|
|
||||||
|
lib_deps =
|
||||||
|
https://github.com/takkaO/OpenFontRender
|
||||||
|
bblanchon/ArduinoJson@^6.21.2
|
||||||
|
https://github.com/tzapu/WiFiManager.git
|
||||||
|
mathertel/OneButton @ ^2.0.3
|
||||||
|
arduino-libraries/NTPClient
|
||||||
|
bodmer/TFT_eSPI @ ^2.5.31
|
10
src/drivers/devices/esp322432s028r.h
Normal file
10
src/drivers/devices/esp322432s028r.h
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#ifndef _ESP32_2432S028R
|
||||||
|
#define _ESP32_2432S028R
|
||||||
|
|
||||||
|
#define PIN_BUTTON_1 0
|
||||||
|
//#define PIN_BUTTON_2 22 // Not used
|
||||||
|
#define PIN_ENABLE5V 21 // Not used
|
||||||
|
#define LED_PIN 4 // Red pin
|
||||||
|
#define LED_PIN_G 17 // Green pin
|
||||||
|
|
||||||
|
#endif
|
@ -16,6 +16,10 @@ DisplayDriver *currentDisplayDriver = &amoledDisplayDriver;
|
|||||||
DisplayDriver *currentDisplayDriver = &dongleDisplayDriver;
|
DisplayDriver *currentDisplayDriver = &dongleDisplayDriver;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ESP32_2432S028R
|
||||||
|
DisplayDriver *currentDisplayDriver = &esp32_2432S028RDriver;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Initialize the display
|
// Initialize the display
|
||||||
void initDisplay()
|
void initDisplay()
|
||||||
{
|
{
|
||||||
|
352
src/drivers/displays/esp23_2432s028r.cpp
Normal file
352
src/drivers/displays/esp23_2432s028r.cpp
Normal file
@ -0,0 +1,352 @@
|
|||||||
|
#include "../drivers.h"
|
||||||
|
|
||||||
|
#ifdef ESP32_2432S028R
|
||||||
|
|
||||||
|
#include <TFT_eSPI.h>
|
||||||
|
#include "media/images_320_170.h"
|
||||||
|
#include "media/images_bottom_320_70.h"
|
||||||
|
#include "media/myFonts.h"
|
||||||
|
#include "media/Free_Fonts.h"
|
||||||
|
#include "version.h"
|
||||||
|
#include "monitor.h"
|
||||||
|
#include "OpenFontRender.h"
|
||||||
|
|
||||||
|
#define WIDTH 340
|
||||||
|
#define HEIGHT 240
|
||||||
|
|
||||||
|
OpenFontRender render;
|
||||||
|
TFT_eSPI tft = TFT_eSPI(); // Invoke library, pins defined in User_Setup.h
|
||||||
|
TFT_eSprite background = TFT_eSprite(&tft); // Invoke library sprite
|
||||||
|
|
||||||
|
extern monitor_data mMonitor;
|
||||||
|
extern pool_data pData;
|
||||||
|
|
||||||
|
void esp32_2432S028R_Init(void)
|
||||||
|
{
|
||||||
|
tft.init();
|
||||||
|
tft.setRotation(1);
|
||||||
|
tft.setSwapBytes(true); // Swap the colour byte order when rendering
|
||||||
|
//background.createSprite(WIDTH, HEIGHT); // Background Sprite
|
||||||
|
background.setSwapBytes(true);
|
||||||
|
render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background)
|
||||||
|
render.setLineSpaceRatio(0.9); // Espaciado entre texto
|
||||||
|
|
||||||
|
// Load the font and check it can be read OK
|
||||||
|
// if (render.loadFont(NotoSans_Bold, sizeof(NotoSans_Bold))) {
|
||||||
|
if (render.loadFont(DigitalNumbers, sizeof(DigitalNumbers)))
|
||||||
|
{
|
||||||
|
Serial.println("Initialise error");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
pinMode(LED_PIN, OUTPUT);
|
||||||
|
pData.bestDifficulty = "0";
|
||||||
|
pData.workersHash = "0";
|
||||||
|
pData.workersCount = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp32_2432S028R_AlternateScreenState(void)
|
||||||
|
{
|
||||||
|
int screen_state = digitalRead(TFT_BL);
|
||||||
|
Serial.println("Switching display state");
|
||||||
|
digitalWrite(TFT_BL, !screen_state);
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp32_2432S028R_AlternateRotation(void)
|
||||||
|
{
|
||||||
|
tft.getRotation() == 1 ? tft.setRotation(3) : tft.setRotation(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printPoolData(){
|
||||||
|
|
||||||
|
pData = updatePoolData();
|
||||||
|
background.createSprite(320,70); //Background Sprite
|
||||||
|
background.setSwapBytes(true);
|
||||||
|
background.pushImage(0, 0, 320, 70, bottonPoolScreen);
|
||||||
|
|
||||||
|
//background.setTextDatum(MC_DATUM);
|
||||||
|
render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background)
|
||||||
|
render.setLineSpaceRatio(1);
|
||||||
|
|
||||||
|
render.setFontSize(24);
|
||||||
|
render.cdrawString(String(pData.workersCount).c_str(), 160, 35, TFT_BLACK);
|
||||||
|
render.setFontSize(18);
|
||||||
|
render.setAlignment(Align::BottomRight);
|
||||||
|
render.drawString(pData.workersHash.c_str(), 293, 51, TFT_BLACK);
|
||||||
|
render.setAlignment(Align::TopLeft);
|
||||||
|
render.cdrawString(pData.bestDifficulty.c_str(), 50, 34, TFT_BLACK);
|
||||||
|
|
||||||
|
background.pushSprite(0,170);
|
||||||
|
background.deleteSprite();
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp32_2432S028R_MinerScreen(unsigned long mElapsed)
|
||||||
|
{
|
||||||
|
mining_data data = getMiningData(mElapsed);
|
||||||
|
|
||||||
|
// Create background sprite to print data at once
|
||||||
|
background.createSprite(initWidth,initHeight); //Background Sprite
|
||||||
|
background.setColorDepth(16);
|
||||||
|
background.setSwapBytes(true);
|
||||||
|
render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background)
|
||||||
|
render.setLineSpaceRatio(0.9);
|
||||||
|
|
||||||
|
//Print background screen
|
||||||
|
background.pushImage(0, 0, MinerWidth, MinerHeight, MinerScreen);
|
||||||
|
|
||||||
|
Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n",
|
||||||
|
data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str());
|
||||||
|
|
||||||
|
// Hashrate
|
||||||
|
render.setFontSize(35);
|
||||||
|
render.setCursor(19, 118);
|
||||||
|
render.setFontColor(TFT_BLACK);
|
||||||
|
|
||||||
|
render.rdrawString(data.currentHashRate.c_str(), 118, 114, TFT_BLACK);
|
||||||
|
// Total hashes
|
||||||
|
render.setFontSize(18);
|
||||||
|
render.rdrawString(data.totalMHashes.c_str(), 268, 138, TFT_BLACK);
|
||||||
|
// Block templates
|
||||||
|
render.setFontSize(18);
|
||||||
|
render.drawString(data.templates.c_str(), 186, 20, 0xDEDB);
|
||||||
|
// Best diff
|
||||||
|
render.drawString(data.bestDiff.c_str(), 186, 48, 0xDEDB);
|
||||||
|
// 32Bit shares
|
||||||
|
render.setFontSize(18);
|
||||||
|
render.drawString(data.completedShares.c_str(), 186, 76, 0xDEDB);
|
||||||
|
// Hores
|
||||||
|
render.setFontSize(14);
|
||||||
|
render.rdrawString(data.timeMining.c_str(), 315, 104, 0xDEDB);
|
||||||
|
|
||||||
|
// Valid Blocks
|
||||||
|
render.setFontSize(24);
|
||||||
|
render.drawString(data.valids.c_str(), 285, 56, 0xDEDB);
|
||||||
|
|
||||||
|
// Print Temp
|
||||||
|
render.setFontSize(10);
|
||||||
|
render.rdrawString(data.temp.c_str(), 239, 1, TFT_BLACK);
|
||||||
|
|
||||||
|
render.setFontSize(4);
|
||||||
|
render.rdrawString(String(0).c_str(), 244, 3, TFT_BLACK);
|
||||||
|
|
||||||
|
// Print Hour
|
||||||
|
render.setFontSize(10);
|
||||||
|
render.rdrawString(data.currentTime.c_str(), 286, 1, TFT_BLACK);
|
||||||
|
|
||||||
|
// Push prepared background to screen
|
||||||
|
background.pushSprite(0, 0);
|
||||||
|
|
||||||
|
// Delete sprite to free the memory heap
|
||||||
|
background.deleteSprite();
|
||||||
|
|
||||||
|
#ifdef ESP32_2432S028R
|
||||||
|
printPoolData();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
|
// Print heap
|
||||||
|
printheap();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp32_2432S028R_ClockScreen(unsigned long mElapsed)
|
||||||
|
{
|
||||||
|
clock_data data = getClockData(mElapsed);
|
||||||
|
|
||||||
|
// Create background sprite to print data at once
|
||||||
|
background.createSprite(initWidth,initHeight); //Background Sprite
|
||||||
|
background.setColorDepth(16);
|
||||||
|
background.setSwapBytes(true);
|
||||||
|
render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background)
|
||||||
|
render.setLineSpaceRatio(0.9);
|
||||||
|
|
||||||
|
// Print background screen
|
||||||
|
background.pushImage(0, 0, minerClockWidth, minerClockHeight, minerClockScreen);
|
||||||
|
|
||||||
|
Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n",
|
||||||
|
data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str());
|
||||||
|
|
||||||
|
// Hashrate
|
||||||
|
render.setFontSize(25);
|
||||||
|
render.setCursor(19, 122);
|
||||||
|
render.setFontColor(TFT_BLACK);
|
||||||
|
render.rdrawString(data.currentHashRate.c_str(), 94, 129, TFT_BLACK);
|
||||||
|
|
||||||
|
// Print BTC Price
|
||||||
|
background.setFreeFont(FSSB9);
|
||||||
|
background.setTextSize(1);
|
||||||
|
background.setTextDatum(TL_DATUM);
|
||||||
|
background.setTextColor(TFT_BLACK);
|
||||||
|
background.drawString(data.btcPrice.c_str(), 202, 3, GFXFF);
|
||||||
|
|
||||||
|
// Print BlockHeight
|
||||||
|
render.setFontSize(18);
|
||||||
|
render.rdrawString(data.blockHeight.c_str(), 254, 140, TFT_BLACK);
|
||||||
|
|
||||||
|
// Print Hour
|
||||||
|
background.setFreeFont(FF23);
|
||||||
|
background.setTextSize(2);
|
||||||
|
background.setTextColor(0xDEDB, TFT_BLACK);
|
||||||
|
|
||||||
|
background.drawString(data.currentTime.c_str(), 130, 50, GFXFF);
|
||||||
|
|
||||||
|
// Push prepared background to screen
|
||||||
|
background.pushSprite(0, 0);
|
||||||
|
|
||||||
|
// Delete sprite to free the memory heap
|
||||||
|
background.deleteSprite();
|
||||||
|
|
||||||
|
#ifdef ESP32_2432S028R
|
||||||
|
printPoolData();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
|
// Print heap
|
||||||
|
printheap();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp32_2432S028R_GlobalHashScreen(unsigned long mElapsed)
|
||||||
|
{
|
||||||
|
coin_data data = getCoinData(mElapsed);
|
||||||
|
|
||||||
|
// Create background sprite to print data at once
|
||||||
|
background.createSprite(initWidth,initHeight); //Background Sprite
|
||||||
|
background.setColorDepth(16);
|
||||||
|
background.setSwapBytes(true);
|
||||||
|
render.setDrawer(background); // Link drawing object to background instance (so font will be rendered on background)
|
||||||
|
render.setLineSpaceRatio(0.9);
|
||||||
|
|
||||||
|
// Print background screen
|
||||||
|
background.pushImage(0, 0, globalHashWidth, globalHashHeight, globalHashScreen);
|
||||||
|
|
||||||
|
Serial.printf(">>> Completed %s share(s), %s Khashes, avg. hashrate %s KH/s\n",
|
||||||
|
data.completedShares.c_str(), data.totalKHashes.c_str(), data.currentHashRate.c_str());
|
||||||
|
|
||||||
|
// Print BTC Price
|
||||||
|
background.setFreeFont(FSSB9);
|
||||||
|
background.setTextSize(1);
|
||||||
|
background.setTextDatum(TL_DATUM);
|
||||||
|
background.setTextColor(TFT_BLACK);
|
||||||
|
background.drawString(data.btcPrice.c_str(), 198, 3, GFXFF);
|
||||||
|
|
||||||
|
// Print Hour
|
||||||
|
background.setFreeFont(FSSB9);
|
||||||
|
background.setTextSize(1);
|
||||||
|
background.setTextDatum(TL_DATUM);
|
||||||
|
background.setTextColor(TFT_BLACK);
|
||||||
|
background.drawString(data.currentTime.c_str(), 268, 3, GFXFF);
|
||||||
|
|
||||||
|
// Print Last Pool Block
|
||||||
|
background.setFreeFont(FSS9);
|
||||||
|
background.setTextDatum(TR_DATUM);
|
||||||
|
background.setTextColor(0x9C92);
|
||||||
|
background.drawString(data.halfHourFee.c_str(), 302, 52, GFXFF);
|
||||||
|
|
||||||
|
// Print Difficulty
|
||||||
|
background.setFreeFont(FSS9);
|
||||||
|
background.setTextDatum(TR_DATUM);
|
||||||
|
background.setTextColor(0x9C92);
|
||||||
|
background.drawString(data.netwrokDifficulty.c_str(), 302, 88, GFXFF);
|
||||||
|
|
||||||
|
// Print Global Hashrate
|
||||||
|
render.setFontSize(17);
|
||||||
|
render.rdrawString(data.globalHashRate.c_str(), 274, 145, TFT_BLACK);
|
||||||
|
|
||||||
|
// Print BlockHeight
|
||||||
|
render.setFontSize(28);
|
||||||
|
render.rdrawString(data.blockHeight.c_str(), 140, 104, 0xDEDB);
|
||||||
|
|
||||||
|
// Draw percentage rectangle
|
||||||
|
int x2 = 2 + (138 * data.progressPercent / 100);
|
||||||
|
background.fillRect(2, 149, x2, 168, 0xDEDB);
|
||||||
|
|
||||||
|
// Print Remaining BLocks
|
||||||
|
background.setTextFont(FONT2);
|
||||||
|
background.setTextSize(1);
|
||||||
|
background.setTextDatum(MC_DATUM);
|
||||||
|
background.setTextColor(TFT_BLACK);
|
||||||
|
background.drawString(data.remainingBlocks.c_str(), 72, 159, FONT2);
|
||||||
|
|
||||||
|
// Push prepared background to screen
|
||||||
|
background.pushSprite(0, 0);
|
||||||
|
|
||||||
|
// Delete sprite to free the memory heap
|
||||||
|
background.deleteSprite();
|
||||||
|
|
||||||
|
#ifdef ESP32_2432S028R
|
||||||
|
printPoolData();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_MEMORY
|
||||||
|
// Print heap
|
||||||
|
printheap();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp32_2432S028R_LoadingScreen(void)
|
||||||
|
{
|
||||||
|
tft.fillScreen(TFT_BLACK);
|
||||||
|
tft.pushImage(0, 33, initWidth, initHeight, initScreen);
|
||||||
|
tft.setTextColor(TFT_BLACK);
|
||||||
|
tft.drawString(CURRENT_VERSION, 24, 147, FONT2);
|
||||||
|
delay(2000);
|
||||||
|
tft.fillScreen(TFT_BLACK);
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp32_2432S028R_SetupScreen(void)
|
||||||
|
{
|
||||||
|
tft.pushImage(0, 33, setupModeWidth, setupModeHeight, setupModeScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
void esp32_2432S028R_AnimateCurrentScreen(unsigned long frame)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Variables para controlar el parpadeo con millis()
|
||||||
|
unsigned long previousMillis = 0;
|
||||||
|
|
||||||
|
void esp32_2432S028R_DoLedStuff(unsigned long frame)
|
||||||
|
{
|
||||||
|
unsigned long currentMillis = millis();
|
||||||
|
|
||||||
|
switch (mMonitor.NerdStatus)
|
||||||
|
{
|
||||||
|
case NM_waitingConfig:
|
||||||
|
digitalWrite(LED_PIN, HIGH); // LED encendido de forma continua
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NM_Connecting:
|
||||||
|
if (currentMillis - previousMillis >= 500)
|
||||||
|
{ // 0.5sec blink
|
||||||
|
previousMillis = currentMillis;
|
||||||
|
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Cambia el estado del LED
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NM_hashing:
|
||||||
|
if (currentMillis - previousMillis >= 100)
|
||||||
|
{ // 0.1sec blink
|
||||||
|
previousMillis = currentMillis;
|
||||||
|
digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Cambia el estado del LED
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CyclicScreenFunction esp32_2432S028RCyclicScreens[] = {esp32_2432S028R_MinerScreen, esp32_2432S028R_ClockScreen, esp32_2432S028R_GlobalHashScreen};
|
||||||
|
|
||||||
|
DisplayDriver esp32_2432S028RDriver = {
|
||||||
|
esp32_2432S028R_Init,
|
||||||
|
esp32_2432S028R_AlternateScreenState,
|
||||||
|
esp32_2432S028R_AlternateRotation,
|
||||||
|
esp32_2432S028R_LoadingScreen,
|
||||||
|
esp32_2432S028R_SetupScreen,
|
||||||
|
esp32_2432S028RCyclicScreens,
|
||||||
|
esp32_2432S028R_AnimateCurrentScreen,
|
||||||
|
esp32_2432S028R_DoLedStuff,
|
||||||
|
SCREENS_ARRAY_SIZE(esp32_2432S028RCyclicScreens),
|
||||||
|
0,
|
||||||
|
WIDTH,
|
||||||
|
HEIGHT};
|
||||||
|
#endif
|
@ -11,6 +11,8 @@
|
|||||||
#include "devices/lilygoS3Amoled.h"
|
#include "devices/lilygoS3Amoled.h"
|
||||||
#elif defined(NERMINER_S3_DONGLE)
|
#elif defined(NERMINER_S3_DONGLE)
|
||||||
#include "devices/lilygoS3Dongle.h"
|
#include "devices/lilygoS3Dongle.h"
|
||||||
|
#elif defined(ESP32_2432S028R)
|
||||||
|
#include "devices/esp322432s028r.h"
|
||||||
#else
|
#else
|
||||||
#error "No device defined"
|
#error "No device defined"
|
||||||
#endif
|
#endif
|
||||||
@ -44,6 +46,7 @@ extern DisplayDriver noDisplayDriver;
|
|||||||
extern DisplayDriver tDisplayDriver;
|
extern DisplayDriver tDisplayDriver;
|
||||||
extern DisplayDriver amoledDisplayDriver;
|
extern DisplayDriver amoledDisplayDriver;
|
||||||
extern DisplayDriver dongleDisplayDriver;
|
extern DisplayDriver dongleDisplayDriver;
|
||||||
|
extern DisplayDriver esp32_2432S028RDriver;
|
||||||
|
|
||||||
#define SCREENS_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
#define SCREENS_ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||||
|
|
||||||
|
2810
src/media/images_bottom_320_70.h
Normal file
2810
src/media/images_bottom_320_70.h
Normal file
File diff suppressed because it is too large
Load Diff
@ -29,6 +29,7 @@ NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 60000);
|
|||||||
unsigned int bitcoin_price=0;
|
unsigned int bitcoin_price=0;
|
||||||
String current_block = "793261";
|
String current_block = "793261";
|
||||||
global_data gData;
|
global_data gData;
|
||||||
|
pool_data pData;
|
||||||
|
|
||||||
void setup_monitor(void){
|
void setup_monitor(void){
|
||||||
/******** TIME ZONE SETTING *****/
|
/******** TIME ZONE SETTING *****/
|
||||||
@ -52,6 +53,7 @@ void updateGlobalData(void){
|
|||||||
|
|
||||||
//Make first API call to get global hash and current difficulty
|
//Make first API call to get global hash and current difficulty
|
||||||
HTTPClient http;
|
HTTPClient http;
|
||||||
|
try {
|
||||||
http.begin(getGlobalHash);
|
http.begin(getGlobalHash);
|
||||||
int httpCode = http.GET();
|
int httpCode = http.GET();
|
||||||
|
|
||||||
@ -94,7 +96,9 @@ void updateGlobalData(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
http.end();
|
http.end();
|
||||||
|
} catch(...) {
|
||||||
|
http.end();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,6 +111,7 @@ String getBlockHeight(void){
|
|||||||
if (WiFi.status() != WL_CONNECTED) return current_block;
|
if (WiFi.status() != WL_CONNECTED) return current_block;
|
||||||
|
|
||||||
HTTPClient http;
|
HTTPClient http;
|
||||||
|
try {
|
||||||
http.begin(getHeightAPI);
|
http.begin(getHeightAPI);
|
||||||
int httpCode = http.GET();
|
int httpCode = http.GET();
|
||||||
|
|
||||||
@ -118,9 +123,10 @@ String getBlockHeight(void){
|
|||||||
|
|
||||||
mHeightUpdate = millis();
|
mHeightUpdate = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
http.end();
|
http.end();
|
||||||
|
} catch(...) {
|
||||||
|
http.end();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return current_block;
|
return current_block;
|
||||||
@ -135,6 +141,7 @@ String getBTCprice(void){
|
|||||||
if (WiFi.status() != WL_CONNECTED) return (String(bitcoin_price) + "$");
|
if (WiFi.status() != WL_CONNECTED) return (String(bitcoin_price) + "$");
|
||||||
|
|
||||||
HTTPClient http;
|
HTTPClient http;
|
||||||
|
try {
|
||||||
http.begin(getBTCAPI);
|
http.begin(getBTCAPI);
|
||||||
int httpCode = http.GET();
|
int httpCode = http.GET();
|
||||||
|
|
||||||
@ -151,7 +158,9 @@ String getBTCprice(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
http.end();
|
http.end();
|
||||||
|
} catch(...) {
|
||||||
|
http.end();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (String(bitcoin_price) + "$");
|
return (String(bitcoin_price) + "$");
|
||||||
@ -160,6 +169,8 @@ String getBTCprice(void){
|
|||||||
unsigned long mTriggerUpdate = 0;
|
unsigned long mTriggerUpdate = 0;
|
||||||
unsigned long initialMillis = millis();
|
unsigned long initialMillis = millis();
|
||||||
unsigned long initialTime = 0;
|
unsigned long initialTime = 0;
|
||||||
|
unsigned long mPoolUpdate = 0;
|
||||||
|
extern char btcString[80];
|
||||||
|
|
||||||
String getTime(void){
|
String getTime(void){
|
||||||
|
|
||||||
@ -259,3 +270,45 @@ coin_data getCoinData(unsigned long mElapsed)
|
|||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pool_data updatePoolData(void){
|
||||||
|
//pool_data pData;
|
||||||
|
if((mPoolUpdate == 0) || (millis() - mPoolUpdate > UPDATE_POOL_min * 60 * 1000)){
|
||||||
|
if (WiFi.status() != WL_CONNECTED) return pData;
|
||||||
|
|
||||||
|
//Make first API call to get global hash and current difficulty
|
||||||
|
HTTPClient http;
|
||||||
|
http.setReuse(true);
|
||||||
|
try {
|
||||||
|
http.begin(String(getPublicPool)+btcString);
|
||||||
|
int httpCode = http.GET();
|
||||||
|
|
||||||
|
if (httpCode > 0) {
|
||||||
|
String payload = http.getString();
|
||||||
|
// Serial.println(payload);
|
||||||
|
DynamicJsonDocument doc(1024);
|
||||||
|
deserializeJson(doc, payload);
|
||||||
|
|
||||||
|
if (doc.containsKey("workersCount")) pData.workersCount = doc["workersCount"].as<int>();
|
||||||
|
const JsonArray& workers = doc["workers"].as<JsonArray>();
|
||||||
|
float totalhashs = 0;
|
||||||
|
for (const JsonObject& worker : workers) {
|
||||||
|
totalhashs += worker["hashRate"].as<float>();
|
||||||
|
}
|
||||||
|
pData.workersHash = String(totalhashs/1000);
|
||||||
|
|
||||||
|
String temp = "";
|
||||||
|
if (doc.containsKey("bestDifficulty")) {
|
||||||
|
temp = doc["bestDifficulty"].as<float>();
|
||||||
|
pData.bestDifficulty = String(temp);
|
||||||
|
}
|
||||||
|
doc.clear();
|
||||||
|
mPoolUpdate = millis();
|
||||||
|
}
|
||||||
|
http.end();
|
||||||
|
} catch(...) {
|
||||||
|
http.end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pData;
|
||||||
|
}
|
@ -26,6 +26,11 @@
|
|||||||
#define getFees "https://mempool.space/api/v1/fees/recommended"
|
#define getFees "https://mempool.space/api/v1/fees/recommended"
|
||||||
#define UPDATE_Global_min 2
|
#define UPDATE_Global_min 2
|
||||||
|
|
||||||
|
//API public-pool.io
|
||||||
|
// https://public-pool.io:40557/api/client/btcString
|
||||||
|
#define getPublicPool "https://public-pool.io:40557/api/client/" // +btcString
|
||||||
|
#define UPDATE_POOL_min 1
|
||||||
|
|
||||||
#define NEXT_HALVING_EVENT 840000
|
#define NEXT_HALVING_EVENT 840000
|
||||||
#define HALVING_BLOCKS 210000
|
#define HALVING_BLOCKS 210000
|
||||||
|
|
||||||
@ -87,10 +92,16 @@ typedef struct {
|
|||||||
String remainingBlocks;
|
String remainingBlocks;
|
||||||
}coin_data;
|
}coin_data;
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
int workersCount; // Workers count, how many nerdminers using your address
|
||||||
|
String workersHash; // Workers Total Hash Rate
|
||||||
|
String bestDifficulty; // Your miners best difficulty
|
||||||
|
}pool_data;
|
||||||
|
|
||||||
void setup_monitor(void);
|
void setup_monitor(void);
|
||||||
|
|
||||||
mining_data getMiningData(unsigned long mElapsed);
|
mining_data getMiningData(unsigned long mElapsed);
|
||||||
clock_data getClockData(unsigned long mElapsed);
|
clock_data getClockData(unsigned long mElapsed);
|
||||||
coin_data getCoinData(unsigned long mElapsed);
|
coin_data getCoinData(unsigned long mElapsed);
|
||||||
|
pool_data updatePoolData(void);
|
||||||
#endif //MONITOR_API_H
|
#endif //MONITOR_API_H
|
Loading…
Reference in New Issue
Block a user