@@ -155,34 +155,48 @@ extern unsigned long mPoolUpdate;
155155void printPoolData (){
156156 if ((hasChangedScreen) || (mPoolUpdate == 0 ) || (millis () - mPoolUpdate > UPDATE_POOL_min * 60 * 1000 )){
157157 if (Settings.PoolAddress != " tn.vkbit.com" ) {
158- pData = getPoolData ();
159- background.createSprite (320 ,50 ); // Background Sprite
160- if (!background.created ()) {
161- Serial.println (" ###### POOL SPRITE ERROR ######" );
162- // Serial.printf("Pool data W:%d H:%s D:%s\n", pData.workersCount, pData.workersHash, pData.bestDifficulty);
163- printheap ();
164- }
165- background.setSwapBytes (true );
166- if (bottomScreenBlue) {
167- background.pushImage (0 , -20 , 320 , 70 , bottonPoolScreen);
168- tft.pushImage (0 ,170 ,320 ,20 ,bottonPoolScreen);
158+ // Local address: skip HTTP pool API (will fail), use miner's own stats
159+ String _addr = Settings.PoolAddress ;
160+ bool _isLocal = _addr.startsWith (" 192.168" ) || _addr.startsWith (" 10." ) ||
161+ _addr.startsWith (" 172." ) || _addr == " localhost" ;
162+ if (!_isLocal) {
163+ pData = getPoolData ();
169164 } else {
170- background.pushImage (0 , -20 , 320 , 70 , bottonPoolScreen_g);
171- tft.pushImage (0 ,170 ,320 ,20 ,bottonPoolScreen_g);
165+ // Local mode: use miner's own best_diff; workers/hashrate are pool-only
166+ extern double best_diff;
167+ pData.bestDifficulty = String (best_diff, 2 );
168+ pData.workersHash = " N/A" ;
169+ pData.workersCount = 0 ; // N/A — will display as "N/A" below
172170 }
173-
174- render.setDrawer (background); // Link drawing object to background instance (so font will be rendered on background)
175- render.setLineSpaceRatio (1 );
176-
177- render.setFontSize (24 );
178- render.cdrawString (String (pData.workersCount ).c_str (), 157 , 16 , TFT_BLACK);
179- render.setFontSize (18 );
180- render.setAlignment (Align::BottomRight);
181- render.cdrawString (pData.workersHash .c_str (), 265 , 14 , TFT_BLACK);
182- render.setAlignment (Align::BottomLeft);
183- render.cdrawString (pData.bestDifficulty .c_str (), 54 , 14 , TFT_BLACK);
184- background.pushSprite (0 ,190 );
185- background.deleteSprite ();
171+
172+ // Push clean bottom strip
173+ tft.pushImage (0 , 170 , 320 , 67 , bottonPoolScreen);
174+ tft.fillRect (0 , 237 , 320 , 3 , 0x45DD );
175+
176+ // Pool label — sprite with green key for transparency
177+ {
178+ const char * poolLabel = _isLocal ? " Local" : " Pool" ;
179+ TFT_eSprite labelSpr = TFT_eSprite (&tft);
180+ labelSpr.setColorDepth (16 );
181+ labelSpr.createSprite (80 , 18 );
182+ labelSpr.fillSprite (TFT_GREEN);
183+ labelSpr.setTextColor (TFT_WHITE);
184+ labelSpr.setTextDatum (MC_DATUM);
185+ labelSpr.drawString (poolLabel, 40 , 9 , 2 );
186+ labelSpr.pushSprite (120 , 170 , TFT_GREEN);
187+ labelSpr.deleteSprite ();
188+ }
189+
190+ // Pool stats values
191+ uint16_t statsBg = tft.color565 (68 , 181 , 212 );
192+ tft.setTextColor (TFT_BLACK, statsBg);
193+ tft.setTextDatum (ML_DATUM);
194+ tft.drawString (pData.bestDifficulty .c_str (), 8 , 215 , 2 );
195+ tft.setTextDatum (MC_DATUM);
196+ tft.drawString (_isLocal ? " N/A" : String (pData.workersCount ).c_str (), 160 , 215 , 2 );
197+ tft.setTextDatum (MR_DATUM);
198+ tft.drawString (pData.workersHash .c_str (), 312 , 215 , 2 );
199+ mPoolUpdate = millis ();
186200 } else {
187201 pData.bestDifficulty = " TESTNET" ;
188202 pData.workersHash = " TESTNET" ;
@@ -235,14 +249,14 @@ void esp32_2432S028R_MinerScreen(unsigned long mElapsed)
235249 // Block templates
236250 render.setFontSize (18 );
237251 render.setAlignment (Align::TopLeft);
238- render.drawString (data.templates .c_str (), 189 -wdtOffset, 20 , 0xDEDB );
252+ render.drawString (data.templates .c_str (), 208 -wdtOffset, 20 , 0xDEDB );
239253 // Best diff
240- render.drawString (data.bestDiff .c_str (), 189 -wdtOffset, 48 , 0xDEDB );
254+ render.drawString (data.bestDiff .c_str (), 208 -wdtOffset, 48 , 0xDEDB );
241255 // 32Bit shares
242256 render.setFontSize (18 );
243257 render.drawString (data.completedShares .c_str (), 189 -wdtOffset, 76 , 0xDEDB );
244258 // Uptime - use TFT native font (DigitalNumbers cant render d/h/m/: chars)
245- background.setFreeFont (FF1 );
259+ background.setFreeFont (FSSB9 );
246260 background.setTextSize (1 );
247261 background.setTextDatum (TR_DATUM);
248262 background.setTextColor (0xDEDB , TFT_BLACK);
@@ -253,16 +267,13 @@ void esp32_2432S028R_MinerScreen(unsigned long mElapsed)
253267 render.setAlignment (Align::TopCenter);
254268 render.drawString (data.valids .c_str (), 290 -wdtOffset, 56 , 0xDEDB );
255269
256- // Print Temp
257- render.setFontSize (10 );
258- render.rdrawString (data.temp .c_str (), 239 -wdtOffset, 1 , TFT_BLACK);
259-
260- render.setFontSize (4 );
261- render.rdrawString (String (0 ).c_str (), 244 -wdtOffset, 3 , TFT_BLACK);
262-
263- // Print Hour
264- render.setFontSize (10 );
265- render.rdrawString (data.currentTime .c_str (), 286 -wdtOffset, 1 , TFT_BLACK);
270+ // Print Temp + Hour — use native TFT font (DigitalNumbers cant render letters/colons)
271+ background.setFreeFont (FSSB9);
272+ background.setTextSize (1 );
273+ background.setTextColor (TFT_BLACK, TFT_BLACK);
274+ background.setTextDatum (TR_DATUM);
275+ background.drawString (data.temp .c_str (), 239 -wdtOffset, 2 , GFXFF);
276+ background.drawString (data.currentTime .c_str (), 286 -wdtOffset, 2 , GFXFF);
266277
267278 // Push prepared background to screen
268279 background.pushSprite (190 , 0 );
0 commit comments