Застряло чтение изображения XBM из JSON (U8g2lib)

То, что я пытаюсь достичь, очень просто, я использую ArduinoJson lib для загрузки JSON из SPIFFS и пытаюсь ввести значения изображения в массив для подачи небольшого Oled-дисплея ESP32:

// Это формат, который библиотека ожидает
static const unsigned char image[] U8X8_PROGMEM  = {
0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x17 }

Это файл JSON: https://github.com/martinberlin/esp/blob/master/oled-128x64-xbm/data/1.json

Цель состоит в том, чтобы иметь возможность генерировать маленькие миниатюры после загрузки изображения, например, и отображать их на этом монохромном маленьком дисплее.

Проблема заключается в том, чтобы преобразовать этот массив Json в формат, ожидаемый библиотекой. И я пробовал много разных способов и читал об этом, не находя правильного способа сделать это. Так что я хотел бы поделиться этим здесь как вызов и посмотреть, если кто-то также заинтересован, чтобы получить динамические миниатюры изображений, работающих на этом дисплее.

Это мой скетч: (Needs /data upload since json example is there)

https://github.com/martinberlin/esp/tree/master/oled-128x64-xbm

#include "FS.h"
#include "SPIFFS.h"
#include <U8g2lib.h>
#include <ArduinoJson.h>
#include <Wire.h>


/*
  Обзор примера U8glib:
    Примеры кадрового буфера: clearBuffer/sendBuffer. Быстро, но может работать не со всеми платами Arduino Due потребления оперативной памяти
    Примеры буфера страниц: FirstPage/nextPage. Меньшее использование оперативной памяти должно работать со всеми платами Arduino.
    Только текстовый пример U8x8: Нет использования оперативной памяти, прямая связь с контроллером дисплея. Никакой графики, только текст 8х8.

*/
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);


static const unsigned char image[] U8X8_PROGMEM  = {
  0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x17, 
  0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 
  0xFF, 0xFF, 0xFF, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xFF, 
  0xFF, 0x7F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x14, 0xFD, 0xFF, 0xFF, 0xFF, 
  0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x8F, 0xFF, 0x10, 
  0x7E, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 
  0xFE, 0x8F, 0xFF, 0x90, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x03, 0x00, 0xFC, 0x0F, 0xFF, 0x90, 0xFF, 0xEE, 0xFF, 0xFF, 
  0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0x0F, 0xFF, 0x90, 
  0xFF, 0xCC, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 
  0xFF, 0x0F, 0xFF, 0x92, 0xFF, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0x1F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 
  0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 
  0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 
  0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xC7, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 
  0x00, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xE7, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 
  0xFC, 0xE7, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xF7, 0xFF, 
  0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xE7, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 
  0x00, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFE, 0xC7, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 
  0xFE, 0xCF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0x03, 0x07, 0xFF, 
  0xFF, 0xFF, 0x0F, 0x00, 0xFC, 0xEF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 
  0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFE, 0xEF, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 
  0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xA6, 0xFF, 
  0xFF, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0x06, 0xEE, 0xFF, 0xFF, 0x7F, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0E, 0xEF, 0xFF, 0xFF, 0xFF, 0x1E, 0x80, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x5E, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 
  0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFD, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFD, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x5F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 
  0x00, 0xF9, 0xFF, 0xFF, 0x7F, 0x80, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFA, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xFF, 
  0x6F, 0x80, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xF0, 0xFF, 0xFF, 0x2F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF1, 0xFF, 0xFF, 0x27, 0x00, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF1, 0xFF, 0xFF, 
  0x23, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xF2, 0xFF, 0xFF, 0x31, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFD, 0xFF, 0xFF, 0x00, 0xF2, 0xFF, 0xFF, 0x10, 0x00, 0x74, 0xF8, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0x00, 0xF6, 0x7F, 0xFE, 
  0x10, 0x00, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 
  0x00, 0xF6, 0x3F, 0x00, 0x10, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xB4, 0x0F, 0x00, 0x18, 0x00, 0xF0, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xB4, 0x07, 0x00, 
  0x08, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xBC, 0x03, 0x00, 0x08, 0x00, 0xFD, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0x38, 0x01, 0x00, 0x08, 0x00, 0xF9, 0xF9, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0x00, 
  0x0C, 0x90, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 
  0x00, 0x3C, 0x00, 0x00, 0x04, 0x00, 0xE3, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0x38, 0x00, 0x00, 0x06, 0x00, 0xC3, 0x31, 
  0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0x00, 
  0x06, 0x80, 0xE3, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 
  0x7F, 0x1C, 0x00, 0x00, 0x03, 0x80, 0x60, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x19, 0x00, 0x80, 0x01, 0x08, 0xF0, 0x00, 
  0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 
  0x00, 0x08, 0xF0, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 
  0xFF, 0x1F, 0x00, 0xC0, 0x00, 0x28, 0xF8, 0xE3, 0xFF, 0xF7, 0xFF, 0xFF, 
  0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x60, 0x00, 0x08, 0xFC, 0xE6, 
  0xFF, 0xCD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x30, 
  0x00, 0x04, 0x3C, 0xF8, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0x79, 0x40, 0x18, 0x00, 0x1C, 0x9E, 0xFC, 0xFF, 0x03, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x00, 0x0C, 0x00, 0x0C, 0x4E, 0xFE, 
  0xFF, 0x33, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3C, 0x00, 0x06, 
  0x00, 0x0C, 0x77, 0xFF, 0xFF, 0x33, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x7F, 0x7F, 0x00, 0x23, 0x00, 0xCE, 0xFF, 0xFF, 0xFF, 0x16, 0xF8, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x85, 0x01, 0x00, 0x1E, 0xFE, 0xFF, 
  0x7F, 0x10, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x01, 
  0x80, 0x0F, 0xFF, 0xFF, 0x3F, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x67, 0x00, 0xD8, 0x1F, 0xFF, 0xFF, 0x7F, 0x10, 0xFE, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF};

const char* xtemp[1024]; // Temporary array to store JSON incoming Hex as string
const unsigned char* xbm[1024] U8X8_PROGMEM;


void setup(void) {
  Serial.begin(115200);
  // Read xbm from  json
  SPIFFS.begin();

   if (SPIFFS.exists("/1.json")) {
    Serial.println("1.json found in SPIFFS");
    File configFile = SPIFFS.open("/1.json", FILE_READ);
      if (configFile) {
        size_t size = configFile.size();
        // Allocate a buffer to store contents of the file.
        std::unique_ptr<char[]> buf(new char[size]);

        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        //json.printTo(Serial);

        if (json.success()) {          
          Serial.println("json.success");
          JsonArray& arr = json["xbm"];

          // using C++11 syntax (preferred):
          int c=0;

          for (auto value : arr) {
            // Assign the json array to xtemp
            xtemp[c] = value.as<char*>(); 

            //Serial.println(String(c)+":"+value.as<char*>()); // Right value
            c++;      
          }

        } else {
          Serial.println("ERR load config");
        }

        configFile.close();
      }
   }
  u8g2.begin();
  u8g2.setDrawColor(0);
  u8g2.clearBuffer();

  Serial.println("cross_block_bits size:");
  Serial.print(sizeof(image));
  Serial.println(image[1]);

  //xbm = xtemp;

  Serial.println("xbm:");
  Serial.println(xtemp[1]);

 // Должен быть xbm (исходящий из json) xbm
 // u8g2.drawXBM( 0, 0, 128, 64, xtemp); // Не работает, так как требует 'const uint8_t* {aka const unsigned char*} 
  u8g2.drawXBM( 0, 0, 128, 64, image);

  u8g2.sendBuffer();
}

void loop(void) {

}

, 👍1

Обсуждение

разместите код непосредственно в своем вопросе, не связывайте его., @MichaelT

Готово, спасибо! Я думаю, что альтернативным способом сделать это было бы сделать свой собственный цикл и рисовать пиксель за пикселем, но в любом случае было бы интересно узнать, могу ли я прочитать массив JSON и передать его библиотеке в ожидаемом формате., @Martin Fasani

u8g2.drawXBM( 0, 0, 128, 64, (const uint8_t *)xtemp);, @Majenko

Отличная идея Маенко, бросив ее в uint8_t работает. Мне все еще нужно преобразовать: 0xC0 Приходит как строка к его значению int, @Martin Fasani

uint8_t val = strtol(stringval, NULL, 16), @Majenko

Идеальный. Теперь у меня есть последний вопрос, и я не понимаю, почему он так считается. Я повторяю эти 1024 элемента и храню их в длинном unsigned int xbm[1024] (to mach strol type. В конце, если я сделаю : Serial.print(sizeof(xbm)); // Возвращает 4096. До сих пор не понимаю почему Ссылка после вашей рекомендации: https://github.com/martinberlin/esp/commit/404814013c49b66338017164a2f36ed02676663b, @Martin Fasani

Спасибо @Majenko это позволит мне лучше понять, как трансформироваться. Я вернусь к книге о типах переменных C++, так как исходящие из PHP и веб-мира трудно понять для меня, @Martin Fasani

Нашел решение, не знаю, правильное ли оно, но переписывание существующего массива изображений, похоже, является ключом. Очень странно, но он работает правильно, и теперь JSON можно загрузить и визуализировать изображение. Если вам интересно посмотреть, как это делается, обновление находится здесь, в этом месте: https://github.com/martinberlin/esp/tree/master/oled-128x64-xbm, @Martin Fasani

const char* xtemp[1024]; - массив из 1024 указателей на char. const char xtemp[1024]; - массив из 1024 символов, @Juraj


1 ответ


1

Спасибо и благодарности Майенко. Разобрался с этим, но все же я не знаю, почему обращение к существующему изображению работает, а к новому массиву-нет. В любом случае, в качестве доказательства концепции, что значок XBM может быть загружен из JSON, он работает. Для тех, кто хочет достичь этого, вот код, не забудьте сначала загрузить JSON в Spiffs:

/*
  GraphicsTest.ino  
  Универсальная 8-битная графическая библиотека (https://github.com/olikraus/u8g2/)
*/
#include "FS.h"
#include "SPIFFS.h"
#include <U8g2lib.h>
#include <ArduinoJson.h>
#include <Wire.h>


/*
  Обзор примера U8glib:
    Примеры буфера кадров: clearBuffer/sendBuffer. Быстрый, но может не работать со всеми платами Arduino Due потребления оперативной памяти
    Примеры буфера страниц: Первая страница/Следующая страница. Меньше использования оперативной памяти, должно работать со всеми платами Arduino.
    Только текстовый пример U8x8: Нет использования оперативной памяти, прямая связь с контроллером дисплея. Никакой графики, только текст 8x8.

*/
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 15, /* data=*/ 4, /* reset=*/ 16);


static unsigned char image[] U8X8_PROGMEM  = {
  0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x17, 
  0xFC, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 
  0xFF, 0xFF, 0xFF, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xFF, 
  0xFF, 0x7F, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x14, 0xFD, 0xFF, 0xFF, 0xFF, 
  0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x8F, 0xFF, 0x10, 
  0x7E, 0xFF, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 
  0xFE, 0x8F, 0xFF, 0x90, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x03, 0x00, 0xFC, 0x0F, 0xFF, 0x90, 0xFF, 0xEE, 0xFF, 0xFF, 
  0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFF, 0x0F, 0xFF, 0x90, 
  0xFF, 0xCC, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 
  0xFF, 0x0F, 0xFF, 0x92, 0xFF, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x1F, 0x00, 0xFF, 0x1F, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 
  0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x7F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 
  0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 
  0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xC7, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 
  0x00, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFE, 0xE7, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xF7, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 
  0xFC, 0xE7, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0xF7, 0xFF, 
  0xFF, 0xFF, 0x3F, 0x00, 0xFC, 0xE7, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 
  0x00, 0xFF, 0xEF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFE, 0xC7, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 
  0xFE, 0xCF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0x03, 0x07, 0xFF, 
  0xFF, 0xFF, 0x0F, 0x00, 0xFC, 0xEF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 
  0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFE, 0xEF, 0xFF, 0xFF, 
  0xFF, 0xFE, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 
  0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xA6, 0xFF, 
  0xFF, 0xFF, 0x1F, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0x06, 0xEE, 0xFF, 0xFF, 0x7F, 0x3F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x0E, 0xEF, 0xFF, 0xFF, 0xFF, 0x1E, 0x80, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x5E, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 
  0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFD, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFD, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0x00, 0xFC, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x5F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 
  0x00, 0xF9, 0xFF, 0xFF, 0x7F, 0x80, 0xC6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFA, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF0, 0xFF, 0xFF, 
  0x6F, 0x80, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xF0, 0xFF, 0xFF, 0x2F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF1, 0xFF, 0xFF, 0x27, 0x00, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xF1, 0xFF, 0xFF, 
  0x23, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xF2, 0xFF, 0xFF, 0x31, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFD, 0xFF, 0xFF, 0x00, 0xF2, 0xFF, 0xFF, 0x10, 0x00, 0x74, 0xF8, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 0x00, 0xF6, 0x7F, 0xFE, 
  0x10, 0x00, 0xFC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0xFF, 0xFF, 
  0x00, 0xF6, 0x3F, 0x00, 0x10, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xB4, 0x0F, 0x00, 0x18, 0x00, 0xF0, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xB4, 0x07, 0x00, 
  0x08, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x00, 0xBC, 0x03, 0x00, 0x08, 0x00, 0xFD, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0x38, 0x01, 0x00, 0x08, 0x00, 0xF9, 0xF9, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0x00, 
  0x0C, 0x90, 0xFF, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 
  0x00, 0x3C, 0x00, 0x00, 0x04, 0x00, 0xE3, 0x78, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0x38, 0x00, 0x00, 0x06, 0x00, 0xC3, 0x31, 
  0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0x00, 
  0x06, 0x80, 0xE3, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 
  0x7F, 0x1C, 0x00, 0x00, 0x03, 0x80, 0x60, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x19, 0x00, 0x80, 0x01, 0x08, 0xF0, 0x00, 
  0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xC0, 
  0x00, 0x08, 0xF0, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 
  0xFF, 0x1F, 0x00, 0xC0, 0x00, 0x28, 0xF8, 0xE3, 0xFF, 0xF7, 0xFF, 0xFF, 
  0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x60, 0x00, 0x08, 0xFC, 0xE6, 
  0xFF, 0xCD, 0xFF, 0xFF, 0xFF, 0xFB, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x30, 
  0x00, 0x04, 0x3C, 0xF8, 0xFF, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0x79, 0x40, 0x18, 0x00, 0x1C, 0x9E, 0xFC, 0xFF, 0x03, 0xFF, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x00, 0x0C, 0x00, 0x0C, 0x4E, 0xFE, 
  0xFF, 0x33, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3C, 0x00, 0x06, 
  0x00, 0x0C, 0x77, 0xFF, 0xFF, 0x33, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0x7F, 0x7F, 0x00, 0x23, 0x00, 0xCE, 0xFF, 0xFF, 0xFF, 0x16, 0xF8, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x85, 0x01, 0x00, 0x1E, 0xFE, 0xFF, 
  0x7F, 0x10, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC7, 0x01, 
  0x80, 0x0F, 0xFF, 0xFF, 0x3F, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
  0xFF, 0xFF, 0x67, 0x00, 0xD8, 0x1F, 0xFF, 0xFF, 0x7F, 0x10, 0xFE, 0xFF, 
  0xFF, 0xFF, 0xFF, 0xFF};

// Используя этот новый массив, я не смог заставить его работать. Перезапись изображения работает
long unsigned int xbm[1024];


void setup(void) {
  Serial.begin(115200);
  // Считывание xbm из json
  SPIFFS.begin();

   if (SPIFFS.exists("/1.json")) {
    Serial.println("1.json found in SPIFFS");
    File configFile = SPIFFS.open("/2.json", FILE_READ);
      if (configFile) {
        size_t size = configFile.size();
        // Выделите буфер для хранения содержимого файла.
        std::unique_ptr<char[]> buf(new char[size]);

        configFile.readBytes(buf.get(), size);
        DynamicJsonBuffer jsonBuffer;
        JsonObject& json = jsonBuffer.parseObject(buf.get());
        //json.printTo(Serial);

        if (json.success()) {          
          Serial.println("json.success Size of xbm array");

          JsonArray& arr = json["xbm"];

        Serial.print(sizeof(arr));
          // использование синтаксиса C++11 (предпочтительно):
          int c=0;
          const char* tempx;
          for (auto value : arr) {
            // Назначьте массив json xtemp
            tempx = value.as<char*>();

            image[c] = strtol(tempx, NULL, 16);

              //Serial.print(strtol(tempx, NULL, 16)); //Thx. Majenko
              if (c<10) {
              Serial.print("i:");Serial.print(image[c]);Serial.print(" ");
              }
            c++;      
          }
          Serial.print("Final c count:"+String(c));


        } else {
          Serial.println("ERR loading JSON");
        }

        configFile.close();
      }
   }
  u8g2.begin();
  u8g2.setDrawColor(0);
  u8g2.clearBuffer();

  Serial.print("image size:");
  Serial.print(sizeof(image));Serial.println();  // Здесь 4096 также в 4 раза больше, если я использую новый массив (ПОЧЕМУ?)
  // Отправить массив JSON на oled-дисплей
  u8g2.drawXBM( 0, 0, 128, 64, (const uint8_t *)image);
  u8g2.sendBuffer();
}

void loop(void) {

}

XBM picture from Json: Proof of concept

,

почему " длинный без знака int xbm[1024];", а не " байт xbm[1024];", который будет таким же, как " новый символ[размер]` для существующего файла?, @Juraj

Да, это сработает. Но проблема в том, что я даже не использую этот новый, а заполняю уже объявленное изображение. Используя новый, в конце цикла из 1024 пикселей, вы получите в 4 раза больше (4096), и я все еще не знаю, почему., @Martin Fasani

Также мне кажется, что с помощью этого: long unsigned int xbm[1024] Он каким-то образом считывает 4 символа из каждого пикселя ( 0x00), но это было бы невозможно, так как мы преобразуем этот шестнадцатеричный код в целое число. Но что ж, круто то, что он работает просто перезаписывая предыдущее изображение, @Martin Fasani

шестнадцатеричное число с двумя шестнадцатеричными цифрами помещается в один байт. FF находится в двоичном формате 11111111. 0F hex-это двоичный код 00001111. именно так используется шестнадцатеричный код, @Juraj