Библиотеки pngle и epd_driver для работы с lilygo epd47

здравствуйте!
принимаю с помощью http запроса картинку, отправляю обрабатывать в pngle, а выводит, во-первых, что-то другое, во-вторых, не понимаю как совместить pngle и epd_driver, чтобы отрисовало правильно
буду благодарна за советы!

#include <HTTPClient.h>
#include <Arduino.h>
#include "epd_driver.h"
#include "font/firasans.h"
#include <SPI.h>
#include "FS.h"
#include "SD.h"
#include <ArduinoJson.h>
#include "time.h"
#include "sntp.h" 
#include "pngle.h"

#define WIFI_SSID ""
#define WIFI_PASS ""
char time_buf[128];
const char* ntpServer1 = "pool.ntp.org";
const char* ntpServer2 = "time.nist.gov";
const long  gmtOffset_sec = 21600;
const int   daylightOffset_sec = 3600;
bool g;

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("No time available (yet)");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
  strftime(time_buf, sizeof(time_buf), "%A, %B %d %Y %H:%M:%S", &timeinfo);
  
}

// Callback function (get's called when time adjusts via NTP)
void timeavailable(struct timeval *t)
{
  Serial.println("Got time adjustment from NTP!");
  printLocalTime();
}

void setup()
{
  Serial.begin(115200);
  epd_init();
 epd_poweron();
 epd_clear();
 int cursor_x = 200;
 int cursor_y = 250;
 char *string1 = "Welcome!";
 writeln((GFXfont *)&FiraSans, string1, &cursor_x, &cursor_y, NULL);
 delay(10);
 epd_clear();
 sntp_set_time_sync_notification_cb( timeavailable );
 sntp_servermode_dhcp(1);
 configTime(gmtOffset_sec, daylightOffset_sec, ntpServer1, ntpServer2);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  
  //tft.printf("WiFi connected.\n");
}

double g_scale = 1.0;
Rect_t area;
// pngle callback, called during decode process for each pixel
void pngle_on_draw(pngle_t *pngle, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint8_t rgba[4])
{
  Rect_t area = {
        .x = x,
        .y = y,
        .width = w,
        .height = h,
    };

 if (rgba[0]==255 && rgba[1]==255 && rgba[2]==255){
    epd_push_pixels(area, 100, 0);
 }
 else{
  epd_push_pixels(area, 100, 0);
 }
}

bool load(const char *url, double scale = 1.0)
{
  HTTPClient http;

  http.begin(url);
//  int cursor_x = 200;
//  int cursor_y = 250;
  int httpCode = http.GET();
  if (httpCode != HTTP_CODE_OK) {
    http.end();
    return false;
  }

  int total = http.getSize();

  WiFiClient *stream = http.getStreamPtr();
  const String& Data = http.getString();
  DynamicJsonDocument parsed(500);   //Пул памяти
  // Десериализация документа JSON
  DeserializationError error = deserializeJson(parsed, Data);
    //delay(1000);
  // Проверьте, удастся ли выполнить синтаксический анализ.
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    }
    else {   //Вывести если ошибок нет
    Serial.println("There are no errors");
    delay(1000);
    }

    int arraySize = parsed["count"];
    Serial.println(arraySize);
    
    uint8_t dm_data[arraySize];
    for (int i = 0; i< arraySize; i++){
      dm_data[i] = parsed["st"][i];
      Serial.println(dm_data[i]);
    }
  
  Serial.print("Data: ");
  Serial.println(Data);
  return true;

  http.end();
}
// ===================================================

bool load_png(const char *url, double scale = 1.0)
{
  HTTPClient http;

  http.begin(url);

  int httpCode = http.GET();
  if (httpCode != HTTP_CODE_OK) {
    http.end();
    return false;
  }

  int total = http.getSize();
  Serial.printf("TOTAL: %d\n", total);

  WiFiClient *stream = http.getStreamPtr();
  epd_poweron();

  pngle_t *pngle = pngle_new();
  pngle_set_draw_callback(pngle, pngle_on_draw);
  g_scale = scale;

  uint8_t buf[2048];
  int remain = 0;
  uint32_t timeout = millis();

    while (http.connected()  && (total > 0 || remain > 0)) {

    // Break out of loop after 10s
    if ((millis() - timeout) > 10000UL)
    {
      Serial.printf("HTTP request timeout\n");
      break;
    }

    size_t size = stream->available();

    if (!size) { delay(1); continue; }

    if (size > sizeof(buf) - remain) {
      size = sizeof(buf) - remain;
    }

    int len = stream->readBytes(buf + remain, size);
    if (len > 0) {
      int fed = pngle_feed(pngle, buf, remain + len);
      if (fed < 0) {
        
        Serial.printf("ERROR: %s\n", pngle_error(pngle));
        break;
      }
      total -= len;
      remain = remain + len - fed;
      if (remain > 0) memmove(buf, buf + fed, remain);
    } else {
      delay(1);
    }
  }

  uint32_t wi = pngle_get_width(pngle);
  Serial.println("WIDTH " + String(wi));
  pngle_destroy(pngle);

  http.end();
  return true;
}

void loop()
{
g = load("http://192.168.0.17:8888/?55.0&85.9&meta");
if (g){
load_png("http://192.168.0.17:8888/?55.0&85.9&data");
}
  delay(5000);
}