Добавить в корзинуПозвонить
Найти в Дзене
Электроника, ESP32, Arduino

Библиотека TFT_eSPI Хруст французской булки

Из коробки библиотека TFT_eSPI по-русски разговаривать не умеет, но это не сложно исправить. Есть несколько способов добавить поддержку кириллицы в библиотеку TFT_eSPI. Первый, самый простой был описан на сайте robotclass.ru (все ссылки на первоисточники будут в конце статьи. Файлик с русскими символами glcdfont.c скачиваем с сайта robotclass.ru - обязательно из комментариев к статье (в самой статье лежит версия с ошибкой). Правильную версию файла вы также сможете найти в моих демонстрационных примерах. И закидываем (с заменой) этот файлик в папку с библиотекой. Далее открываем в любом редакторе файл TFT_eSPI.cpp Там необходимо закомментировать строку if (c > 255) return; Выводить текст на дисплей можно сразу по-русски используя стандартный метод библиотеки print/println Текст масштабируется с помощью метода setTextSize(i) Сайту robotclass.ru респект и уважуха за такой предоставленный простой способ. Ссылка на источник: Только еще раз повторюсь файл glcdfont.c на этом сайте качаем из к

Из коробки библиотека TFT_eSPI по-русски разговаривать не умеет, но это не сложно исправить. Есть несколько способов добавить поддержку кириллицы в библиотеку TFT_eSPI.

Первый, самый простой был описан на сайте robotclass.ru (все ссылки на первоисточники будут в конце статьи.

Файлик с русскими символами glcdfont.c скачиваем с сайта robotclass.ru - обязательно из комментариев к статье (в самой статье лежит версия с ошибкой). Правильную версию файла вы также сможете найти в моих демонстрационных примерах.

И закидываем (с заменой) этот файлик в папку с библиотекой.

-2

Далее открываем в любом редакторе файл TFT_eSPI.cpp

-3

Там необходимо закомментировать строку if (c > 255) return;

-4

Выводить текст на дисплей можно сразу по-русски используя стандартный метод библиотеки print/println

-5
-6

Текст масштабируется с помощью метода setTextSize(i) Сайту robotclass.ru респект и уважуха за такой предоставленный простой способ. Ссылка на источник:

TFT_eSPI: работа с русским текстом | Класс робототехники

Только еще раз повторюсь файл glcdfont.c на этом сайте качаем из комментариев (или берем из моего архива).

Если заглянуть "под капот" решения, можно увидеть, что библиотека использует наработки графического ядра Adafruit_GFX.

-7

Графическое ядро от "тети Ады" необычайно популярно среди Ардуино разработчиков, поэтому, что программировать с нуля все функции вывода графических примитивов и рисовать шрифты дело не быстрое. Проще написать только вывод под конкретный дисплей, навесив сверху готовую библиотеку для работы с графикой.

Каждый символ кодируется 5-ю байтами

-8
-9

Масштабирование этого единственного набора символов дает возможность экономить память (библиотека изначально была рассчитана для работы на слабых вычислительных ресурсах), но с другой стороны качество шрифта при простом масштабировании страдает достаточно сильно, и булочки становятся не столь привлекательными.

Для тех кому "шашечки нужны больше чем ехать"

В библиотеке есть средства импорта любых системных шрифтов с ПК и статьи на эту тему тоже есть, но если ты решил сделать что-то на Arduino - есть смысл посмотреть, а не сделал ли это кто-то до тебя.

На гитхабе мне удалось найти 4 готовых конвертированных в нужный формат шрифта.

Calibri
Calibri
CalibriItaliс
CalibriItaliс
TimesNew
TimesNew
TimesNewItalic
TimesNewItalic

Все эти ништяки нужно куда-то размещать, и автор библиотеки TFT_eSPI предусмотрел несколько способов заталкивания такого большого объёма информации.

-14

В архиве, который я нашел шрифты лежали и для возможности размещения в файловой системе (.vlw) так и для размещения в виде массива (.h)

-15

Поэтому решил попробовать второй способ.

Выбираем понравившиеся шрифты (.h) и закидываем их прямо в папку со скетчем.

-16

Скетч для этих шрифтов будет выглядеть следующим образом:

-17

Прописывать нужно все именно все, как написано в примере. Перед выводом текста необходимо подгрузить нужный шрифт методом loadFont.

-18

Выглядит круто - не хуже чем на мониторе компьютера! Но, минусы разумеется тоже будут:

  • если потребуется другой размер шрифта, придется подгружать другие фонты (функция масштабирования к этим шрифтам не применима) - а это ресурсы;
  • насколько я понимаю, в отличии от ядра Adafruit_GFX фиксированных знакомест тут нет, поэтому чтобы переписать один фрагмент текста другим придется именно пере-заливать область где нужно разместить обновленный текст.

Все как на этой диаграмме:

-19

Примеры кода и все необходимое для комфортной работы с русскими шрифтами с библиотекой TFT_eSPI находится в этом архиве.

ESP32_S3_Office_manager.zip

В одной из следующих статей планируется разбор структуры шрифтов графического ядра Adafruit_GFX - вдруг попадется дисплей под который никто еще не написал библу - эта информация будет точно полезна, а заодно посмотрим как добавлять любые пользовательские символы.

Оглавление канала тут

Если знаете другие способы русификации библиотеки TFT_eSPI пишите их в комментариях.

Всем удачи!