Русские шрифты для библиотеки FabGL.
- Войдите на сайт для отправки комментариев
Ср, 13/04/2022 - 19:51
Превосходная библиотека FabGL! VGA монитор, вполне себе не плохой дисплей на 17..20" для ESP32. Библиотека постоянно обновляется и уже не плохо работает. Мышка/клавиатура/дисплей VGA/генерация звука , очень не плохой набор инструментов для ESP32.
https://github.com/fdivitto/FabGL
Не могу ни как победить русификацию шрифтов.
Есть встроенный инструмент Fonttool. С Питоном не дружу, даже не знаю как запустить готовую прогу на Пайтоне...
https://github.com/fdivitto/FabGL/tree/master/tools/fonttool
Помогите, люди добрые, кто чем сможет...
Iv_. во-первых, вставьте ссылки правильно. для этого есть отдельная кнопка в интерфейсе.
Во-вторых - какой формат фонтов поддерживает библиотека? Под формат GFX Adafruit на форуме несколько библиотек руссифицировано уже...
Iv_. во-первых, вставьте ссылки правильно. для этого есть отдельная кнопка в интерфейсе.
Во-вторых - какой формат фонтов поддерживает библиотека? Под формат GFX Adafruit на форуме несколько библиотек руссифицировано уже...
Постараюсь разобраться с тонкостями форума. C GFX у меня без проблем, на любых дисплеях, всё пр русски.
У Фабрицио Ди Витторио свои шрифты/библиотека шрифтов, видимо некоторого стандартного(не стандартного?) формата. У него есть компилятор шрифтов на Пайтоне, с которым мне нужно разобраться.
Iv_. во-первых, вставьте ссылки правильно. для этого есть отдельная кнопка в интерфейсе.
А как первое сообщение ветки отредактировать?
Превосходная библиотека FabGL!
Подскажите, если вы уже разобрались с этой библиотекой, какое оптимальное разрешение выставляете для когда то массовых мониторов 17-19''
DisplayController.setResolution(VESA_720x400_85Hz, -1, -1, DOUBLEBUFFERING);
Вот это не подошло. Пробовал на двух, - превысило, мониторы не показывают с VESA_768x576_60Hz работает, но хотелось бы больше, перебирать все не хотелось бы.
На каком вы конкретно остановились?
Зависит от количества памяти у esp32.
У меня на платах Devkit v1 терпимо работает разрешение 640/480 для 64 битного цвета. Если нужен ещё WiFi, падаем в 640/200. Это для ESP32 Wroom. Чем у вас больше код, тем меньше область памяти под видео, тем ниже разрешение и цветность.
Лучше использовать Wrover, особенно под эмулятор ПК.
Спасибо за ответ. У меня нет пинов свободных, чтобы показывало 64 цвета. Я подключил только RGB H и V синхронизации. Таким образом задействую 5 пинов. Получилось идеально заменить по железу дисплей Nokia5110 в проекте. Правда цветов всего 8, но это лучше чем 2 и во много раз лучше по размеру диагонали. Для меня подошло оптимально VGA_640x240_60Hz проект с WiFi делами. Теперь заказал скалер под выбранную матрицу. Вообщем сасибо за наводку. А со шрифтами, думаю разберусь в дальнейшем.
Спасибо за ответ. У меня нет пинов свободных, чтобы показывало 64 цвета. Я подключил только RGB H и V синхронизации. Таким образом задействую 5 пинов. Получилось идеально заменить по железу дисплей Nokia5110 в проекте. Правда цветов всего 8, но это лучше чем 2 и во много раз лучше по размеру диагонали. Для меня подошло оптимально VGA_640x240_60Hz проект с WiFi делами. Теперь заказал скалер под выбранную матрицу. Вообщем сасибо за наводку. А со шрифтами, думаю разберусь в дальнейшем.
Всегда пожалуйста. Всегда рад с коллегами поделиться. В FabGl появился ещё PAL/NTSC Color Composite видеовыход. Совсем уж для древних/кубических телевизоров. Я пытался, но пока не смог. Железа нужного под рукой не было. Esp32-cam, отказался генерировать древнючий видеосигнал.
Ну вот и русский шрифт сделал. Правда взял самый дешманский шрифт 5х7 для эксперимента, но можно любой который есть в системе теперь брать и править.
SAB - каааак???!!!
Я всё это уже делал. Шрифт font_5x7 который с библиотекой fabgl шёл?
Весь вечер вчера развлекался с конвертором шрифтов на Пайтане, который внутри fabgl есть. Даже нашёл Пайтон, который под Win7 работает. Всё конвертируется, только fabgl не принимает эти шрифты.
Я не использовал ни какие пайтоны. Просто брал уже существующий в системе (они в отдельной папке ) и рисовал сам какой символ мне нужен. Прямо в Notepad++. Пару часов и вот результат.
SAB, поделитесь пожалуйста имеющейся библиотекой с русским шрифтом. А то, у меня скоро уже крыша поедет на этой почве. Бегаю кругами и нифига не выходит.
Для шрифтов до 8 включительно шириной - каждый байт это одна строка. Если бит установлен, то точка есть. Иначе точки нет.
Для шрифтов от 9 до 16 включительно шириной - каждые два байта это одна строка. (не проверял, но сужу по размеру)
https://wokwi.com/projects/329382043718779476
Шрифт font_8x8.h подменил аналогичным шрифтом с кириллицей. Теперь туплю с функцией utf8rus. В моём новом шрифте заглавная А(русская часть фонта) начинается с кода 128, а должна со 192.
-64
Уже пытался, не всё так просто.
Само собой с учетом диапазона...
Оказалось, легче поправить фонт под стандарт.
Оказалось, легче поправить фонт под стандарт.
5 букв не смогли в функции отдельно прописать?
Оказалось, легче поправить фонт под стандарт.
5 букв не смогли в функции отдельно прописать?
Я решил, что легче иметь более/менее стандартный фонт и utf8rus.
Лучше подскажите решение следующей проблемы.
Функция классическая utf8rus, у меня позволяет русифицировать не более 10 символов. Раньше такого не замечал. Возможно, корни проблемы в библиотеке FabGL.
Функция классическая utf8rus на tft дисплейчиках, без проблем рисовала длинные строки.
Проблема решаемая, но код выходит корявый.
canvas.drawTextFmt(5,5,"%s%s%s%s%c%s",utf8rus("Температур"),utf8rus("а на улице"),utf8rus(" : +"),String(incData[i].d),191,"C");
Функция классическая utf8rus на tft дисплейчиках, без проблем рисовала длинные строки.
Проблема решаемая, но код выходит корявый.
canvas.drawTextFmt(5,5,"%s%s%s%s%c%s",utf8rus("Температур"),utf8rus("а на улице"),utf8rus(" : +"),String(incData[i].d),191,"C");
покажите пример кода. где функция не работает больше чем с 10 символами.
Только, пожалуйста. код должен быть полным - такой. который можно скомпилировать и запустить
Функция классическая utf8rus на tft дисплейчиках, без проблем рисовала длинные строки.
Проблема решаемая, но код выходит корявый.
canvas.drawTextFmt(5,5,"%s%s%s%s%c%s",utf8rus("Температур"),utf8rus("а на улице"),utf8rus(" : +"),String(incData[i].d),191,"C");
покажите пример кода. где функция не работает больше чем с 10 символами.
Только, пожалуйста. код должен быть полным - такой. который можно скомпилировать и запустить
Железяку придётся собирать. Иначе, баг проверить не получится. В принципе, в монохроме с одним цветом, четыре проводка припаять от VGA кабеля к любому ESP32, не так уж сложно. Я сегодня проверил ESP32-CAM на совместимость с FabGl, отлично всё работает.
[code] #include <stdio.h> #include "fabgl.h" fabgl::VGAController DisplayController; fabgl::Canvas canvas(&DisplayController); fabgl::PS2Controller PS2Controller; #define DOUBLEBUFFERING 1 void setup() { // Назначаем GPIO12 для красного, GPIO13 для зеленого, GPIO15 для синего, GPIO2 для HSync и GPIO14 для VSync DisplayController.begin(GPIO_NUM_12, GPIO_NUM_13, GPIO_NUM_15, GPIO_NUM_2, GPIO_NUM_14); //DisplayController.setResolution(VGA_640x400_60Hz); DisplayController.setResolution(VGA_640x240_60Hz); //DisplayController.setResolution(VGA_640x350_70Hz); //DisplayController.setResolution(SVGA_1280x720_60Hz); //DisplayController.setResolution( VGA_256x384_60Hz); canvas.selectFont(&fabgl::FONT_8x8); canvas.clear(); canvas.setPenColor(Color::Green); canvas.setGlyphOptions(GlyphOptions().FillBackground(false).DoubleWidth(1)); canvas.drawTextFmt(350, 10,"%s",utf8rus("АБВГДЕЖЗИК")); canvas.drawTextFmt(350, 20,"%s",utf8rus("ЛМНОПРОСТУ")); canvas.drawTextFmt(350, 30,"%s",utf8rus("ХФШЧЩЪЫЬЭЮ")); canvas.drawTextFmt(350, 40,"%s","QWERTYUIOP"); canvas.drawTextFmt(350, 50,"%s","ASDFGHJKL:"); canvas.drawTextFmt(350, 60,"%s","ZXCVBNM123"); int yy=0; for (int ii = 128; ii < 256; ii++) { yy++; canvas.drawTextFmt(0,yy*10,"%d",ii); canvas.drawTextFmt(40,yy*10," - "); canvas.drawTextFmt(90,yy*10,"%c",ii); } yy=0; canvas.setPenColor(Color::Red); for (int ii = 151; ii < 174; ii++) { yy++; canvas.drawTextFmt(120,yy*10,"%d",ii); canvas.drawTextFmt(160,yy*10," - "); canvas.drawTextFmt(200,yy*10,"%c",ii); } yy=0; canvas.setPenColor(Color::Blue); for (int ii = 174; ii < 256; ii++) { yy++; canvas.drawTextFmt(220,yy*10,"%d",ii); canvas.drawTextFmt(260,yy*10," - "); canvas.drawTextFmt(300,yy*10,"%c",ii); } } void loop() { } // Начало функции обработки кириллических символов String utf8rus(String source) { int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; target = target + String(m); } return target; } // Конец функции обработки кириллических символов. [/code]#pragma once namespace fabgl { #ifdef FABGL_FONT_INCLUDE_DEFINITION static const uint8_t FONT_8x8_DATA[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 000 (.) 0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E, // Char 001 (.) 0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E, // Char 002 (.) 0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, // Char 003 (.) 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, // Char 004 (.) 0x38, 0x38, 0x38, 0xFE, 0xFE, 0xD6, 0x10, 0x38, // Char 005 (.) 0x10, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x10, 0x38, // Char 006 (.) 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, // Char 007 (.) 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, // Char 008 (.) 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00, // Char 009 (.) 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, // Char 010 (.) 0x0F, 0x03, 0x05, 0x7D, 0x84, 0x84, 0x84, 0x78, // Char 011 (.) 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x18, 0x7E, 0x18, // Char 012 (.) 0x3F, 0x21, 0x3F, 0x20, 0x20, 0x60, 0xE0, 0xC0, // Char 013 (.) 0x3F, 0x21, 0x3F, 0x21, 0x23, 0x67, 0xE6, 0xC0, // Char 014 (.) 0x18, 0xDB, 0x3C, 0xE7, 0xE7, 0x3C, 0xDB, 0x18, // Char 015 (.) 0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00, // Char 016 (.) 0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00, // Char 017 (.) 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18, // Char 018 (.) 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x24, 0x00, // Char 019 (.) 0x7F, 0x92, 0x92, 0x72, 0x12, 0x12, 0x12, 0x00, // Char 020 (.) 0x3E, 0x63, 0x38, 0x44, 0x44, 0x38, 0xCC, 0x78, // Char 021 (.) 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00, // Char 022 (.) 0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF, // Char 023 (.) 0x10, 0x38, 0x7C, 0x54, 0x10, 0x10, 0x10, 0x00, // Char 024 (.) 0x10, 0x10, 0x10, 0x54, 0x7C, 0x38, 0x10, 0x00, // Char 025 (.) 0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, // Char 026 (.) 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, // Char 027 (.) 0x00, 0x00, 0x40, 0x40, 0x40, 0x7E, 0x00, 0x00, // Char 028 (.) 0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00, // Char 029 (.) 0x00, 0x10, 0x38, 0x7C, 0xFE, 0xFE, 0x00, 0x00, // Char 030 (.) 0x00, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, // Char 031 (.) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 032 ( ) 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, // Char 033 (!) 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 034 (") 0x24, 0x24, 0x7E, 0x24, 0x7E, 0x24, 0x24, 0x00, // Char 035 (#) 0x18, 0x3E, 0x40, 0x3C, 0x02, 0x7C, 0x18, 0x00, // Char 036 ($) 0x00, 0x62, 0x64, 0x08, 0x10, 0x26, 0x46, 0x00, // Char 037 (%) 0x30, 0x48, 0x30, 0x56, 0x88, 0x88, 0x76, 0x00, // Char 038 (&) 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 039 (') 0x10, 0x20, 0x40, 0x40, 0x40, 0x20, 0x10, 0x00, // Char 040 (() 0x20, 0x10, 0x08, 0x08, 0x08, 0x10, 0x20, 0x00, // Char 041 ()) 0x00, 0x10, 0x10, 0xFE, 0x28, 0x44, 0x00, 0x00, // Char 042 (*) 0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00, // Char 043 (+) 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20, // Char 044 (,) 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, // Char 045 (-) 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, // Char 046 (.) 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, // Char 047 (/) 0x3C, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x3C, 0x00, // Char 048 (0) 0x10, 0x30, 0x50, 0x10, 0x10, 0x10, 0x7C, 0x00, // Char 049 (1) 0x3C, 0x42, 0x02, 0x0C, 0x30, 0x42, 0x7E, 0x00, // Char 050 (2) 0x3C, 0x42, 0x02, 0x1C, 0x02, 0x42, 0x3C, 0x00, // Char 051 (3) 0x08, 0x18, 0x28, 0x48, 0xFE, 0x08, 0x1C, 0x00, // Char 052 (4) 0x7E, 0x40, 0x7C, 0x02, 0x02, 0x42, 0x3C, 0x00, // Char 053 (5) 0x1C, 0x20, 0x40, 0x7C, 0x42, 0x42, 0x3C, 0x00, // Char 054 (6) 0x7E, 0x42, 0x04, 0x08, 0x10, 0x10, 0x10, 0x00, // Char 055 (7) 0x3C, 0x42, 0x42, 0x3C, 0x42, 0x42, 0x3C, 0x00, // Char 056 (8) 0x3C, 0x42, 0x42, 0x3E, 0x02, 0x04, 0x38, 0x00, // Char 057 (9) 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, // Char 058 (:) 0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x20, // Char 059 (;) 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00, // Char 060 (<) 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, // Char 061 (=) 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, // Char 062 (>) 0x3C, 0x42, 0x02, 0x04, 0x08, 0x00, 0x08, 0x00, // Char 063 (?) 0x3C, 0x42, 0x5E, 0x52, 0x5E, 0x40, 0x3C, 0x00, // Char 064 (@) 0x18, 0x24, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00, // Char 065 (A) 0x7C, 0x22, 0x22, 0x3C, 0x22, 0x22, 0x7C, 0x00, // Char 066 (B) 0x1C, 0x22, 0x40, 0x40, 0x40, 0x22, 0x1C, 0x00, // Char 067 (C) 0x78, 0x24, 0x22, 0x22, 0x22, 0x24, 0x78, 0x00, // Char 068 (D) 0x7E, 0x22, 0x28, 0x38, 0x28, 0x22, 0x7E, 0x00, // Char 069 (E) 0x7E, 0x22, 0x28, 0x38, 0x28, 0x20, 0x70, 0x00, // Char 070 (F) 0x1C, 0x22, 0x40, 0x40, 0x4E, 0x22, 0x1E, 0x00, // Char 071 (G) 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x42, 0x00, // Char 072 (H) 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, // Char 073 (I) 0x0E, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38, 0x00, // Char 074 (J) 0x62, 0x24, 0x28, 0x30, 0x28, 0x24, 0x63, 0x00, // Char 075 (K) 0x70, 0x20, 0x20, 0x20, 0x20, 0x22, 0x7E, 0x00, // Char 076 (L) 0x63, 0x55, 0x49, 0x41, 0x41, 0x41, 0x41, 0x00, // Char 077 (M) 0x62, 0x52, 0x4A, 0x46, 0x42, 0x42, 0x42, 0x00, // Char 078 (N) 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, // Char 079 (O) 0x7C, 0x22, 0x22, 0x3C, 0x20, 0x20, 0x70, 0x00, // Char 080 (P) 0x3C, 0x42, 0x42, 0x42, 0x4A, 0x3C, 0x03, 0x00, // Char 081 (Q) 0x7C, 0x22, 0x22, 0x3C, 0x28, 0x24, 0x72, 0x00, // Char 082 (R) 0x3C, 0x42, 0x40, 0x3C, 0x02, 0x42, 0x3C, 0x00, // Char 083 (S) 0x7F, 0x49, 0x08, 0x08, 0x08, 0x08, 0x1C, 0x00, // Char 084 (T) 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, // Char 085 (U) 0x41, 0x41, 0x41, 0x41, 0x22, 0x14, 0x08, 0x00, // Char 086 (V) 0x41, 0x41, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00, // Char 087 (W) 0x41, 0x22, 0x14, 0x08, 0x14, 0x22, 0x41, 0x00, // Char 088 (X) 0x41, 0x22, 0x14, 0x08, 0x08, 0x08, 0x1C, 0x00, // Char 089 (Y) 0x7F, 0x42, 0x04, 0x08, 0x10, 0x21, 0x7F, 0x00, // Char 090 (Z) 0x78, 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x00, // Char 091 ([) 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, // Char 092 (\) 0x78, 0x08, 0x08, 0x08, 0x08, 0x08, 0x78, 0x00, // Char 093 (]) 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, // Char 094 (^) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, // Char 095 (_) 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 096 (`) 0x00, 0x00, 0x3C, 0x02, 0x3E, 0x42, 0x3F, 0x00, // Char 097 (a) 0x60, 0x20, 0x20, 0x2E, 0x31, 0x31, 0x2E, 0x00, // Char 098 (b) 0x00, 0x00, 0x3C, 0x42, 0x40, 0x42, 0x3C, 0x00, // Char 099 (c) 0x06, 0x02, 0x02, 0x3A, 0x46, 0x46, 0x3B, 0x00, // Char 100 (d) 0x00, 0x00, 0x3C, 0x42, 0x7E, 0x40, 0x3C, 0x00, // Char 101 (e) 0x0C, 0x12, 0x10, 0x38, 0x10, 0x10, 0x38, 0x00, // Char 102 (f) 0x00, 0x00, 0x3D, 0x42, 0x42, 0x3E, 0x02, 0x7C, // Char 103 (g) 0x60, 0x20, 0x2C, 0x32, 0x22, 0x22, 0x62, 0x00, // Char 104 (h) 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, // Char 105 (i) 0x02, 0x00, 0x06, 0x02, 0x02, 0x42, 0x42, 0x3C, // Char 106 (j) 0x60, 0x20, 0x24, 0x28, 0x30, 0x28, 0x26, 0x00, // Char 107 (k) 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, // Char 108 (l) 0x00, 0x00, 0x76, 0x49, 0x49, 0x49, 0x49, 0x00, // Char 109 (m) 0x00, 0x00, 0x5C, 0x62, 0x42, 0x42, 0x42, 0x00, // Char 110 (n) 0x00, 0x00, 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, // Char 111 (o) 0x00, 0x00, 0x5C, 0x22, 0x22, 0x3C, 0x20, 0x70, // Char 112 (p) 0x00, 0x00, 0x3A, 0x44, 0x44, 0x3C, 0x04, 0x0E, // Char 113 (q) 0x00, 0x00, 0x6C, 0x32, 0x22, 0x20, 0x70, 0x00, // Char 114 (r) 0x00, 0x00, 0x3E, 0x40, 0x3C, 0x02, 0x7C, 0x00, // Char 115 (s) 0x10, 0x10, 0x7C, 0x10, 0x10, 0x12, 0x0C, 0x00, // Char 116 (t) 0x00, 0x00, 0x42, 0x42, 0x42, 0x46, 0x3A, 0x00, // Char 117 (u) 0x00, 0x00, 0x41, 0x41, 0x22, 0x14, 0x08, 0x00, // Char 118 (v) 0x00, 0x00, 0x41, 0x49, 0x49, 0x49, 0x36, 0x00, // Char 119 (w) 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, // Char 120 (x) 0x00, 0x00, 0x42, 0x42, 0x42, 0x3E, 0x02, 0x7C, // Char 121 (y) 0x00, 0x00, 0x7C, 0x08, 0x10, 0x20, 0x7C, 0x00, // Char 122 (z) 0x0C, 0x10, 0x10, 0x60, 0x10, 0x10, 0x0C, 0x00, // Char 123 ({) 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00, // Char 124 (|) 0x30, 0x08, 0x08, 0x06, 0x08, 0x08, 0x30, 0x00, // Char 125 (}) 0x32, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 126 (~) 0x00, 0x08, 0x14, 0x22, 0x41, 0x41, 0x7F, 0x00, // Char 127 (.) 0x1E, 0x22, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00, // Char 128 (.) 0x7C, 0x40, 0x40, 0x7C, 0x42, 0x42, 0x7C, 0x00, // Char 129 (.) 0x7C, 0x42, 0x42, 0x7C, 0x42, 0x42, 0x7C, 0x00, // Char 130 (.) 0x7E, 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, // Char 131 (.) 0x0E, 0x12, 0x22, 0x22, 0x22, 0x22, 0x7F, 0x41, // Char 132 (.) 0x7E, 0x42, 0x48, 0x78, 0x48, 0x42, 0x7E, 0x00, // Char 133 (.) 0x49, 0x49, 0x2A, 0x1C, 0x2A, 0x49, 0x49, 0x00, // Char 134 (.) 0x3C, 0x42, 0x02, 0x0C, 0x02, 0x42, 0x3C, 0x00, // Char 135 (.) 0x42, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x42, 0x00, // Char 136 (.) 0x5A, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x42, 0x00, // Char 137 (.) 0x42, 0x44, 0x48, 0x78, 0x44, 0x42, 0x42, 0x00, // Char 138 (.) 0x1E, 0x22, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, // Char 139 (.) 0x41, 0x63, 0x55, 0x49, 0x41, 0x41, 0x41, 0x00, // Char 140 (.) 0x42, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00, // Char 141 (.) 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, // Char 142 (.) 0x7E, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, // Char 143 (.) 0x7C, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x00, // Char 144 (.) 0x3C, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3C, 0x00, // Char 145 (.) 0x7F, 0x49, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // Char 146 (.) 0x42, 0x42, 0x42, 0x3E, 0x02, 0x02, 0x3C, 0x00, // Char 147 (.) 0x3E, 0x49, 0x49, 0x49, 0x3E, 0x08, 0x08, 0x00, // Char 148 (.) 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x00, // Char 149 (.) 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7F, 0x01, // Char 150 (.) 0x42, 0x42, 0x42, 0x42, 0x3E, 0x02, 0x02, 0x00, // Char 151 (.) 0x41, 0x41, 0x49, 0x49, 0x49, 0x49, 0x7F, 0x00, // Char 152 (.) 0x82, 0x82, 0x92, 0x92, 0x92, 0x92, 0xFF, 0x01, // Char 153 (.) 0x70, 0x50, 0x10, 0x1C, 0x12, 0x12, 0x1C, 0x00, // Char 154 (.) 0x41, 0x41, 0x41, 0x79, 0x45, 0x45, 0x79, 0x00, // Char 155 (.) 0x20, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x3C, 0x00, // Char 156 (.) 0x3C, 0x42, 0x02, 0x3E, 0x02, 0x42, 0x3C, 0x00, // Char 157 (.) 0x4E, 0x51, 0x51, 0x71, 0x51, 0x51, 0x4E, 0x00, // Char 158 (.) 0x3E, 0x42, 0x42, 0x42, 0x3E, 0x22, 0x42, 0x00, // Char 159 (.) 0x00, 0x00, 0x38, 0x04, 0x3C, 0x44, 0x3A, 0x00, // Char 160 (.) 0x00, 0x00, 0x78, 0x40, 0x78, 0x44, 0x78, 0x00, // Char 161 (.) 0x00, 0x00, 0x78, 0x44, 0x78, 0x44, 0x78, 0x00, // Char 162 (.) 0x00, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x40, 0x00, // Char 163 (.) 0x38, 0x04, 0x3C, 0x44, 0x44, 0x44, 0x38, 0x00, // Char 164 (.) 0x00, 0x00, 0x38, 0x44, 0x7C, 0x40, 0x38, 0x00, // Char 165 (.) 0x00, 0x00, 0x54, 0x54, 0x38, 0x54, 0x54, 0x00, // Char 166 (.) 0x00, 0x00, 0x38, 0x44, 0x18, 0x44, 0x38, 0x00, // Char 167 (.) 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x3A, 0x00, // Char 168 (.) 0x10, 0x00, 0x44, 0x44, 0x44, 0x44, 0x3A, 0x00, // Char 169 (.) 0x00, 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x00, // Char 170 (.) 0x00, 0x00, 0x04, 0x0C, 0x14, 0x24, 0x44, 0x00, // Char 171 (.) 0x00, 0x00, 0x41, 0x63, 0x55, 0x49, 0x41, 0x00, // Char 172 (.) 0x00, 0x00, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x00, // Char 173 (.) 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, // Char 174 (.) 0x00, 0x00, 0x7C, 0x44, 0x44, 0x44, 0x44, 0x00, // Char 175 (.) 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, // Char 176 (.) 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, // Char 177 (.) 0xDB, 0x77, 0xDB, 0xEE, 0xDB, 0x77, 0xDB, 0xEE, // Char 178 (.) 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // Char 179 (.) 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, // Char 180 (.) 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, // Char 181 (.) 0x14, 0x14, 0x14, 0xF4, 0xF4, 0x14, 0x14, 0x14, // Char 182 (.) 0x00, 0x00, 0x00, 0xFC, 0xF4, 0x14, 0x14, 0x14, // Char 183 (.) 0x00, 0x00, 0xF8, 0x08, 0xF8, 0x18, 0x18, 0x18, // Char 184 (.) 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x14, 0x14, 0x14, // Char 185 (.) 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, // Char 186 (.) 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14, 0x14, // Char 187 (.) 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x00, 0x00, 0x00, // Char 188 (.) 0x14, 0x14, 0x14, 0xF4, 0xFC, 0x00, 0x00, 0x00, // Char 189 (.) 0x18, 0x18, 0xF8, 0x08, 0xF8, 0x00, 0x00, 0x00, // Char 190 (.) 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, // Char 191 (.) 0x1E, 0x22, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00, // Char 192 (.) 0x7C, 0x40, 0x40, 0x7C, 0x42, 0x42, 0x7C, 0x00, // Char 193 (.) 0x7C, 0x42, 0x42, 0x7C, 0x42, 0x42, 0x7C, 0x00, // Char 194 (.) 0x7E, 0x42, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, // Char 195 (.) 0x0E, 0x12, 0x22, 0x22, 0x22, 0x22, 0x7F, 0x41, // Char 196 (.) 0x7E, 0x42, 0x48, 0x78, 0x48, 0x42, 0x7E, 0x00, // Char 197 (.) 0x49, 0x49, 0x2A, 0x1C, 0x2A, 0x49, 0x49, 0x00, // Char 198 (.) 0x3C, 0x42, 0x02, 0x0C, 0x02, 0x42, 0x3C, 0x00, // Char 199 (.) 0x42, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x42, 0x00, // Char 200 (.) 0x5A, 0x42, 0x46, 0x4A, 0x52, 0x62, 0x42, 0x00, // Char 201 (.) 0x42, 0x44, 0x48, 0x78, 0x44, 0x42, 0x42, 0x00, // Char 202 (.) 0x1E, 0x22, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, // Char 203 (.) 0x41, 0x63, 0x55, 0x49, 0x41, 0x41, 0x41, 0x00, // Char 204 (.) 0x42, 0x42, 0x42, 0x42, 0x7E, 0x42, 0x42, 0x00, // Char 205 (.) 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3C, 0x00, // Char 206 (.) 0x7E, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, // Char 207 (.) 0x7C, 0x42, 0x42, 0x42, 0x7C, 0x40, 0x40, 0x00, // Char 208 (.) 0x3C, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3C, 0x00, // Char 209 (.) 0x7F, 0x49, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // Char 210 (.) 0x42, 0x42, 0x42, 0x3E, 0x02, 0x02, 0x3C, 0x00, // Char 211 (.) 0x3E, 0x49, 0x49, 0x49, 0x3E, 0x08, 0x08, 0x00, // Char 212 (.) 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x00, // Char 213 (.) 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7F, 0x01, // Char 214 (.) 0x42, 0x42, 0x42, 0x42, 0x3E, 0x02, 0x02, 0x00, // Char 215 (.) 0x41, 0x41, 0x49, 0x49, 0x49, 0x49, 0x7F, 0x00, // Char 216 (.) 0x82, 0x82, 0x92, 0x92, 0x92, 0x92, 0xFF, 0x01, // Char 217 (.) 0x70, 0x50, 0x10, 0x1C, 0x12, 0x12, 0x1C, 0x00, // Char 218 (.) 0x41, 0x41, 0x41, 0x79, 0x45, 0x45, 0x79, 0x00, // Char 219 (.) 0x20, 0x20, 0x20, 0x3C, 0x22, 0x22, 0x3C, 0x00, // Char 220 (.) 0x3C, 0x42, 0x02, 0x3E, 0x02, 0x42, 0x3C, 0x00, // Char 221 (.) 0x4E, 0x51, 0x51, 0x71, 0x51, 0x51, 0x4E, 0x00, // Char 222 (.) 0x3E, 0x42, 0x42, 0x42, 0x3E, 0x22, 0x42, 0x00, // Char 223 (.) 0x00, 0x00, 0x38, 0x04, 0x3C, 0x44, 0x3A, 0x00, // Char 224 (.) 0x00, 0x00, 0x78, 0x40, 0x78, 0x44, 0x78, 0x00, // Char 225 (.) 0x00, 0x00, 0x78, 0x44, 0x78, 0x44, 0x78, 0x00, // Char 226 (.) 0x00, 0x00, 0x7C, 0x40, 0x40, 0x40, 0x40, 0x00, // Char 227 (.) 0x38, 0x04, 0x3C, 0x44, 0x44, 0x44, 0x38, 0x00, // Char 228 (.) 0x00, 0x00, 0x38, 0x44, 0x7C, 0x40, 0x38, 0x00, // Char 229 (.) 0x00, 0x00, 0x54, 0x54, 0x38, 0x54, 0x54, 0x00, // Char 230 (.) 0x00, 0x00, 0x38, 0x44, 0x18, 0x44, 0x38, 0x00, // Char 231 (.) 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x3A, 0x00, // Char 232 (.) 0x10, 0x00, 0x44, 0x44, 0x44, 0x44, 0x3A, 0x00, // Char 233 (.) 0x00, 0x00, 0x44, 0x48, 0x70, 0x48, 0x44, 0x00, // Char 234 (.) 0x00, 0x00, 0x04, 0x0C, 0x14, 0x24, 0x44, 0x00, // Char 235 (.) 0x00, 0x00, 0x41, 0x63, 0x55, 0x49, 0x41, 0x00, // Char 236 (.) 0x00, 0x00, 0x44, 0x44, 0x7C, 0x44, 0x44, 0x00, // Char 237 (.) 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, // Char 238 (.) 0x00, 0x00, 0x7C, 0x44, 0x44, 0x44, 0x44, 0x00, // Char 239 (.) 0x00, 0x00, 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, // Char 240 (.) 0x00, 0x00, 0x38, 0x44, 0x40, 0x44, 0x38, 0x00, // Char 241 (.) 0x00, 0x00, 0x7C, 0x54, 0x10, 0x10, 0x10, 0x00, // Char 242 (.) 0x00, 0x00, 0x44, 0x44, 0x3C, 0x04, 0x38, 0x00, // Char 243 (.) 0x00, 0x10, 0x38, 0x54, 0x54, 0x38, 0x10, 0x10, // Char 244 (.) 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, // Char 245 (.) 0x00, 0x00, 0x44, 0x44, 0x44, 0x44, 0x7E, 0x02, // Char 246 (.) 0x00, 0x00, 0x44, 0x44, 0x3C, 0x04, 0x04, 0x00, // Char 247 (.) 0x00, 0x00, 0x44, 0x44, 0x54, 0x54, 0x7C, 0x00, // Char 248 (.) 0x00, 0x00, 0x44, 0x44, 0x54, 0x54, 0x7E, 0x02, // Char 249 (.) 0x00, 0x00, 0x70, 0x50, 0x1C, 0x12, 0x1C, 0x00, // Char 250 (.) 0x00, 0x00, 0x42, 0x42, 0x72, 0x4A, 0x72, 0x00, // Char 251 (.) 0x00, 0x00, 0x40, 0x40, 0x78, 0x44, 0x78, 0x00, // Char 252 (.) 0x00, 0x00, 0x38, 0x44, 0x1C, 0x44, 0x38, 0x00, // Char 253 (.) 0x00, 0x00, 0x4C, 0x52, 0x72, 0x52, 0x4C, 0x00, // Char 254 (.) 0x00, 0x00, 0x3C, 0x44, 0x3C, 0x24, 0x44, 0x00 // Char 255 (.) }; extern const FontInfo FONT_8x8 = { .pointSize = 6, .width = 8, .height = 8, .ascent = 7, .inleading = 0, .exleading = 0, .flags = 0, .weight = 400, .charset = 255, .data = FONT_8x8_DATA, .chptr = nullptr, .codepage = 437, }; #else extern const FontInfo FONT_8x8; #endif }Фонт font_8x8.h из FabGL, нужно заменить содержание файла на то что постом выше.
Для ESP32-CAM компилируем и заливаем код как для Wrover Module.
что-то не нашел в вашем коде строчек длиннее 10 символов
Если у вас не так много памяти - не совсем понял нафига писать функцию utfrus через String
Железяку придётся собирать. Иначе, баг проверить не получится.
ерунда.
вы утверждаете, что баг в utf8rus, которая не работает более чем с 10 символами? Чтобы проверить это, никакие железяки собирать не надо.
Все что нужно - это передать utf8rus строчку длинее 10 символов и прочитать ответ. Для этого достаточно монитора порта.
Это чего получается - на старый аналоговый ЖК монитор через три резистора и D-SUB могу ESP-шку прицепить?
Если 8 цветов хватит, так и есть. Если надо 64 цвета, надо уже 6 резисторов. :)
Тоже удивился 10 символам, но потом понизил разрешение и стало нормально. Вообщем памяти не хватает.
Вообщем памяти не хватает.
если вот так вот символы прибавлять - никакой памяти не хватит :)
Тоже удивился 10 символам, но потом понизил разрешение и стало нормально. Вообщем памяти не хватает.
Нет, дело не в количестве свободной памяти. Значительно снизил разрешение, один фиг - баги...
Проблема решена.
canvas.drawTextFmt(5,25,utf8rus1("Температура в квартире: Нет Данных."));
Проблема решена.
и? в чем ошибка была?
Проблема была в двойном преобразовании типа данных. Сначала в стринг, потом из стринга в чар.
Вот эта всем давно известная функция, работает с FabGl корректно.
#define maxString 40 char target[maxString + 1] = ""; char *utf8rus(char *source) { int i,j,k; unsigned char n; char m[2] = { '0', '\0' }; strcpy(target, ""); k = strlen(source); i = j = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; strcat(target, m); j++; if (j >= maxString) break; } return target; }касательно функции utf2rus
зачем вот эта конструкция... сначала превращаем символ в промежуточную строку, потом используем strcat() ??? - зачем??
unsigned char n; char m[2] = { '0', '\0' }; .... m[0] = n; strcat(target, m);что мешает сделать так?
только не забудьте в конце процедуры добавить в строчку терминатор. ОДИН РАЗ.
И еще - проверка в строке 28 написана с ошибкой, к моменту как она сработает, вы уже вылезете за границу массива. Не говоря уж о том, что при переполнении строки вы просто отдаете ее пользователю вместо генерации ошибки...
Кому нужны шрифты, обращайтесь. Но имейте в виду на 4м2м есп32, это дело не взлетит.
Привет. выложи плз файлы шрифтов, думаю что не только мне понадобится.