Π Π°Π±ΠΎΡ‚Π° с графичСскими дисплСями (GLCD, TFT, OLED) часто Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСстандартных ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² β€” Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π°, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы ΠΈΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ малСнький экран Π·Π½Π°Ρ‡ΠΊΠΈ. GLCD Font Creator (ΠΈΠ»ΠΈ GLCDFontCreator) становится Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌ инструмСнтом для ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ², Ρ€Π°Π΄ΠΈΠΎΠ»ΡŽΠ±ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² встраиваСмых систСм, позволяя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ ΠΈΠ»ΠΈ графичСском Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, совмСстимом с Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². Однако Π±Π΅Π· понимания нюансов Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π΄Π°ΠΆΠ΅ простая Π·Π°Π΄Π°Ρ‡Π° β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ русского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° β€” ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² Ρ‡Π°ΡΠΎΠ²ΡƒΡŽ Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΡƒ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ всС этапы Ρ€Π°Π±ΠΎΡ‚Ρ‹ β€” ΠΎΡ‚ установки ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ настройки Π΄ΠΎ экспорта ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² для Arduino, STM32, ESP32 ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ памяти (ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠΉ для устройств с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ рСсурсами) ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄Ρƒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ошибок, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡˆΡ€ΠΈΡ„Ρ‚ отобраТаСтся ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ загруТаСтся. Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ "avr-gcc: error: undefined reference to 'font'", здСсь Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ GLCD Font Creator ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½

GLCD Font Creator β€” это бСсплатная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, прСдназначСнная для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…, совмСстимых с графичСскими дисплСями. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° позволяСт:

  • 🎨 Π ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ символы Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (пиксСль Π·Π° пиксСлСм) ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΈΠ· ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (.bmp, .png).
  • πŸ“ ΠΠ°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚Π° (ΡˆΠΈΡ€ΠΈΠ½Π° Γ— высота Π² пиксСлях, ΠΌΠ΅ΠΆΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»).
  • πŸ–₯️ Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ для C/C++ (массивы Π±Π°ΠΉΡ‚), Python, ΠΈΠ»ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹.
  • πŸ”„ ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ UTF-8, Windows-1251, KOI8-R (Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹).

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ. НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚ высотой 8 пиксСлСй для Nokia 5110 ΠΈΠ»ΠΈ 32 пиксСля для ILI9341, ΠΏΡ€ΠΈ этом ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² Π΅Π³ΠΎ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. Π‘Π΅Π· Ρ‚Π°ΠΊΠΎΠ³ΠΎ инструмСнта ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ Π² Π²ΠΈΠ΄Π΅ массива Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ часы ΠΈ Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ ошибками.

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: GLCD Font Creator Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ антиалиасинг (сглаТиваниС ΠΊΡ€Π°Ρ‘Π²). Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΠ»Π°Π²Π½Ρ‹Π΅ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹, рассмотритС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ LVGL Font Tool ΠΈΠ»ΠΈ Bitmap Font Generator.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° особСнно вострСбована Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π°:

  • πŸ€– Arduino (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ U8g2, Adafruit_GFX).
  • πŸ”§ STM32 (с использованиСм STM32CubeIDE ΠΈΠ»ΠΈ Keil).
  • πŸ“‘ ESP8266/ESP32 (для дисплССв ΠΏΠΎ SPI ΠΈΠ»ΠΈ I2C).
  • πŸ–₯️ ΠŸΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… ΠŸΠ›Πš (Π³Π΄Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ кастомныС символы для интСрфСйса ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°).
πŸ“Š Для ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹ создаётС ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹?
  • Arduino (AVR/ESP)
  • STM32 (ARM Cortex)
  • ESP32/ESP8266
  • Π aspberry Pi Pico
  • Другая

Установка ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ запуск

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° GLCD Font Creator Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ установки β€” достаточно ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΠ² с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория Π½Π° GitHub (Π°Π²Ρ‚ΠΎΡ€ β€” Olikraus, Ρ‚ΠΎΡ‚ ΠΆΠ΅, ΠΊΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ U8g2). ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ вСрсия Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” 1.2.1.

ПослС распаковки Π°Ρ€Ρ…ΠΈΠ²Π°:

  1. ЗапуститС Ρ„Π°ΠΉΠ» GLCDFontCreator.jar (трСбуСтся установлСнная Java 8+).
  2. Если Java отсутствуСт, скачайтС Π΅Ρ‘ с Adoptium (рСкомСндуСтся OpenJDK 11).
  3. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° создаст ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» config.properties Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятСн, Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ особСнности:

  • πŸ–ΌοΈ ПанСль символов (слСва) β€” здСсь ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ всС доступныС glyphs (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Π° ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹).
  • πŸ“ Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ символа (справа) β€” сСтка для рисования пиксСлСй.
  • βš™οΈ ПанСль настроСк (Π²Π½ΠΈΠ·Ρƒ) β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡˆΡ€ΠΈΡ„Ρ‚Π°, ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°, экспорт.
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если ΠΏΡ€ΠΈ запускС появляСтся ошибка "Unable to access jarfile", ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π½Π΅ содСрТит кирилличСских символов ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠΈΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΊΠΎΡ€Π΅Π½ΡŒ диска (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C:\GLCDFontCreator\).

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ работоспособности:

  1. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ символ A Π² ΠΏΠ°Π½Π΅Π»ΠΈ слСва.
  2. Π’ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ (справа) нарисуйтС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ·ΠΎΡ€.
  3. НаТмитС File β†’ Export β†’ C Source File ΠΈ сохранитС Ρ„Π°ΠΉΠ» ΠΊΠ°ΠΊ test_font.c.
πŸ’‘

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ запускаСтся Π½Π° Windows 10/11, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Ρ‘ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора ΠΈΠ»ΠΈ установитС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ окруТСния JAVA_HOME, ΡƒΠΊΠ°Π·Π°Π² ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ с Java.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡˆΡ€ΠΈΡ„Ρ‚Π°

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ Ρ€ΠΈΡΠΎΠ²Π°Π½ΠΈΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π°:

  • πŸ“ Π Π°Π·ΠΌΠ΅Ρ€: стандартныС значСния β€” 5Γ—7, 8Γ—8, 16Γ—16. Для OLED-дисплССв (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, SSD1306) часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ 6Γ—8.
  • πŸ”€ ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°: для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Windows-1251 ΠΈΠ»ΠΈ UTF-8 (послСдняя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ большС символов, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС памяти).
  • 🎯 ΠœΠ΅ΠΆΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» (Spacing): ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1 пиксСль. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ Π΄ΠΎ 2–3 для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ читаСмости.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ создания ΡˆΡ€ΠΈΡ„Ρ‚Π°:

  1. Π’ мСню File β†’ New ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ имя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MyFont_8x16).
  2. Π’ ΠΏΠ°Π½Π΅Π»ΠΈ Font Properties установитС:
    Width: 8
    

    Height: 16

    Spacing: 2

    Encoding: Windows-1251 (для русского)

  3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ символы:
    • πŸ”€ Для Π»Π°Ρ‚ΠΈΠ½ΠΈΡ†Ρ‹: Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 32–126 (ASCII).
    • πŸ‡·πŸ‡Ί Для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹: Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 192–255 (Windows-1251) ΠΈΠ»ΠΈ 1024–1103 (UTF-8).
  • НарисуйтС символы Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠ· .bmp (мСню File β†’ Import β†’ Bitmap).
  • ΠŸΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΌ рисовании ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ горячиС клавиши:

    • Π›ΠšΠœ β€” ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ пиксСль.
    • ПКМ β€” ΡΡ‚Π΅Ρ€Π΅Ρ‚ΡŒ пиксСль.
    • Shift + Π›ΠšΠœ β€” Π·Π°Π»ΠΈΠ²ΠΊΠ° области.
    • ΠŸΡ€ΠΎΠ±Π΅Π» β€” ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ (Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ/Π±Π΅Π»Ρ‹ΠΉ).

    Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ символы (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ, Ссли трСбуСтся)|

    ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ установлСна ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° (Windows-1251 для русского)|

    ΠœΠ΅ΠΆΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π΅ сливаСт символы|

    Π¨Ρ€ΠΈΡ„Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΌ дисплСС (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π² симуляторС)-->

    Экспорт ΡˆΡ€ΠΈΡ„Ρ‚Π° для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ²

    ПослС создания ΡˆΡ€ΠΈΡ„Ρ‚Π° Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, понятный Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²:

    Π€ΠΎΡ€ΠΌΠ°Ρ‚ экспорта ОписаниС ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования
    C Source File Массив Π±Π°ΠΉΡ‚ Π² Π²ΠΈΠ΄Π΅ .c/.h Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Arduino, STM32.
    const uint8_t myFont[] PROGMEM = {
    

    0x00, 0x00, 0x00, ... };

    Binary File Π‘ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» (.bin), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡˆΠΈΡ‚ΡŒ Π²ΠΎ flash-ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠŸΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Π΅ ΠŸΠ›Πš, Π³Π΄Π΅ ΡˆΡ€ΠΈΡ„Ρ‚ хранится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ‡ΠΈΠΏΠ΅.
    Python List Бписок Π±Π°ΠΉΡ‚ для скриптов Π½Π° Python (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Raspberry Pi).
    font = [
    

    [0x00, 0x00, 0x00],

    ... ]

    U8g2 Format Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ для Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ U8g2 (ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ Arduino). ДисплСи SSD1306, SH1106.

    Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ C Source File. Алгоритм экспорта:

    1. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ File β†’ Export β†’ C Source File.
    2. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, my_font.h).
    3. Π’ ΠΏΠΎΠ»Π΅ Variable Name Π²Π²Π΅Π΄ΠΈΡ‚Π΅ имя массива (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, customFont).
    4. ΠžΡ‚ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Π³Π°Π»ΠΎΡ‡ΠΊΡƒ PROGMEM (Ссли ΡˆΡ€ΠΈΡ„Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π²ΠΎ flash-памяти Arduino).
    5. НаТмитС Export.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ сгСнСрированного ΠΊΠΎΠ΄Π°:

    #include 
    
    

    const uint8_t customFont[] PROGMEM = {

    // Π‘ΠΈΠΌΠ²ΠΎΠ» 'A' (ΠΊΠΎΠ΄ 65)

    0x00, 0x1C, 0x22, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x22, 0x00,

    // Π‘ΠΈΠΌΠ²ΠΎΠ» 'Π‘' (ΠΊΠΎΠ΄ 194 Π² Windows-1251)

    0x00, 0x1C, 0x22, 0x22, 0x3E, 0x22, 0x22, 0x22, 0x3E, 0x00,

    ...

    };

    ⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Если Π²Ρ‹ экспортируСтС ΡˆΡ€ΠΈΡ„Ρ‚ для STM32 с использованиСм STM32CubeIDE, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #include β€” ΠΎΠ½Π° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для AVR (Arduino). ВмСсто Π½Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ #include "stm32fxxx_hal.h" ΠΈ размСститС массив Π² сСкции FLASH:

    const uint8_t customFont[] __attribute__((section(".rodata"))) = { ... };

    Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ ΡˆΡ€ΠΈΡ„Ρ‚Π° Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚

    ПослС экспорта ΡˆΡ€ΠΈΡ„Ρ‚ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ. Рассмотрим Π΄Π²Π° популярных сцСнария: Arduino ΠΈ STM32.

    Для Arduino (с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ U8g2)

    Если Π²Ρ‹ использовали Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ U8g2:

    1. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ сгСнСрированный Ρ„Π°ΠΉΠ» my_font.h Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
    2. Π’ основном скСтчС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ ΡˆΡ€ΠΈΡ„Ρ‚:
      #include 
      

      #include "my_font.h"

      U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

      void setup() {

      u8g2.begin();

      u8g2.setFont(customFont); // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ наш ΡˆΡ€ΠΈΡ„Ρ‚

      u8g2.drawStr(0, 20, "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!");

      u8g2.sendBuffer();

      }

    Для STM32 (с использованиСм HAL)

    Для STM32 процСсс слоТнСС ΠΈΠ·-Π·Π° Ρ€ΡƒΡ‡Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с дисплССм:

    1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ„Π°ΠΉΠ» my_font.h Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ STM32CubeIDE.
    2. Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ отобраТСния тСкста ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ массив ΡˆΡ€ΠΈΡ„Ρ‚Π°:
      void LCD_DrawChar(uint16_t x, uint16_t y, char ch) {
      

      uint8_t *char_data = (uint8_t *)&customFont[ch * FONT_HEIGHT];

      for (uint8_t i = 0; i < FONT_HEIGHT; i++) {

      uint8_t line = char_data[i];

      for (uint8_t j = 0; j < FONT_WIDTH; j++) {

      if (line & (1 << (7 - j))) {

      LCD_DrawPixel(x + j, y + i, WHITE);

      }

      }

      }

      }

    Для ESP32 с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Adafruit_GFX процСсс Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Arduino, Π½ΠΎ вмСсто PROGMEM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ const:

    const uint8_t customFont[] = { ... };
    πŸ’‘

    ВсСгда провСряйтС, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΡˆΡ€ΠΈΡ„Ρ‚Π° Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. Для Arduino Uno (2 ΠšΠ‘ SRAM) ΡˆΡ€ΠΈΡ„Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 16Γ—16 с 256 символами Π·Π°ΠΉΠΌΡ‘Ρ‚ ~8 ΠšΠ‘ flash-памяти!

    ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ памяти ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

    Π¨Ρ€ΠΈΡ„Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ памяти ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. НапримСр, ΡˆΡ€ΠΈΡ„Ρ‚ 16Γ—16 с 256 символами Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚:

    (16 пиксСлСй высота Γ— 2 Π±Π°ΠΉΡ‚Π° Π½Π° строку Γ— 256 символов) = 8192 Π±Π°ΠΉΡ‚ (~8 ΠšΠ‘).

    Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ расход памяти:

    • 🧹 Π£Π΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ символы. НапримСр, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π° ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹, экспортируйтС Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 48–57 (Ρ†ΠΈΡ„Ρ€Ρ‹) ΠΈ 192–255 (Windows-1251).
    • πŸ” Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сТатиС. Π’ настройках экспорта Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ RLE Compression (Run-Length Encoding). Π­Ρ‚ΠΎ сокращаСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° 30–50%, Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ врСмя Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°.
    • πŸ“‰ Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ высоту ΡˆΡ€ΠΈΡ„Ρ‚Π°. НапримСр, вмСсто 16Γ—16 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ 8Γ—16 (ΡˆΠΈΡ€ΠΈΠ½Π° Π² 2 Ρ€Π°Π·Π° мСньшС).
    • πŸ”„ Π₯Ρ€Π°Π½ΠΈΡ‚Π΅ ΡˆΡ€ΠΈΡ„Ρ‚ Π²ΠΎ flash (Π½Π΅ Π² SRAM). Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ PROGMEM (Arduino) ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡ†ΠΈΡŽ .rodata (STM32).

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ экспорта для Arduino:

    // Π’ Ρ„Π°ΠΉΠ»Π΅ my_font.h
    

    #include

    const uint8_t customFont[] PROGMEM = {

    // Волько символы '0'–'9' ΠΈ 'А'–'Π―' (ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π°)

    // Π Π°Π·ΠΌΠ΅Ρ€: 10 (Ρ†ΠΈΡ„Ρ€Ρ‹) + 32 (ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π°) = 42 символа Γ— 16 Π±Π°ΠΉΡ‚ = 672 Π±Π°ΠΉΡ‚

    ...

    };

    Для STM32 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ дальшС ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚ Π² внСшнСй flash-памяти (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, W25Q128), загруТая Π΅Π³ΠΎ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Π­Ρ‚ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с дисплСями высокого Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ILI9341 320Γ—240).

    Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π·Π°Π½ΡΡ‚ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² Arduino IDE?

    ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ β†’ Анализ использования памяти (Tools β†’ Get Board Info Π² Π½ΠΎΠ²Ρ‹Ρ… вСрсиях). Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π½Π°ΠΉΠ΄ΠΈΡ‚Π΅ строки:

    Global variables use 1234 bytes (60%) of dynamic memory
    

    Program storage space used: 23456 bytes (71%)

    Если Program storage Π±Π»ΠΈΠ·ΠΊΠΎ ΠΊ 100%, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ символы.

    Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹Π΅ ошибки ΠΈ ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

    Π”Π°ΠΆΠ΅ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с GLCD Font Creator. Π’ΠΎΡ‚ самыС распространённыС:

    Ошибка ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° РСшСниС
    Π¨Ρ€ΠΈΡ„Ρ‚ отобраТаСтся ΠΈΠ΅Ρ€ΠΎΠ³Π»ΠΈΡ„Π°ΠΌΠΈ НСвСрная ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π±Ρ€Π°Π½Π° UTF-8, Π° Π½ΡƒΠΆΠ΅Π½ Windows-1251). ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ настройки ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π² Font Properties β†’ Encoding.
    undefined reference to 'font' Π€Π°ΠΉΠ» со ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ имя массива. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ:
    • Π€Π°ΠΉΠ» my_font.h Π»Π΅ΠΆΠΈΡ‚ Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
    • Имя массива Π² ΠΊΠΎΠ΄Π΅ совпадаСт с экспортированным.
    • Π’ Arduino IDE Ρ„Π°ΠΉΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Ρ‡Π΅Ρ€Π΅Π· #include "my_font.h".
    Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ‹ ΡΠ»ΠΈΠΏΠ°ΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π΅Π·Π°ΡŽΡ‚ΡΡ ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Spacing ΠΈΠ»ΠΈ Width. Π£Π²Π΅Π»ΠΈΡ‡ΡŒΡ‚Π΅ Spacing Π΄ΠΎ 2–3 ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΡˆΠΈΡ€ΠΈΠ½Ρƒ символов Π² настройках.
    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ запускаСтся Π½Π° macOS/Linux ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Java ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ доступа. ЗапуститС ΠΈΠ· Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°:
    chmod +x GLCDFontCreator.jar
    

    java -jar GLCDFontCreator.jar

    Π•Ρ‰Ρ‘ ΠΎΠ΄Π½Π° частая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ. НапримСр, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ U8g2, Π½ΠΎ ΡˆΡ€ΠΈΡ„Ρ‚ экспортировали Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ C-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, символы ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ со сдвигом. РСшСниС:

    1. ЭкспортируйтС ΡˆΡ€ΠΈΡ„Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ U8g2 (опция Π² мСню экспорта).
    2. Или Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ сгСнСрированный Ρ„Π°ΠΉΠ», Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:
      #define FONT_WIDTH 8
      

      #define FONT_HEIGHT 16

      const uint8_t customFont[256][FONT_HEIGHT] PROGMEM = { ... };

    Если ΡˆΡ€ΠΈΡ„Ρ‚ отобраТаСтся "лСсСнкой" (Π½Π΅Ρ€ΠΎΠ²Π½Ρ‹Π΅ края), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅:

    • πŸ” БоотвСтствиС высоты ΡˆΡ€ΠΈΡ„Ρ‚Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ дисплСя (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для SSD1306 128Γ—64 Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚ высотой 8 ΠΈΠ»ΠΈ 16).
    • πŸ–ΌοΈ ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ экспортированных Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ½ΠΎΠ³Π΄Π° Π±ΠΈΡ‚Ρ‹ Π² Π±Π°ΠΉΡ‚Π°Ρ… ΠΏΠ΅Ρ€Π΅Π²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹; ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ).

    ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ GLCD Font Creator

    Если GLCD Font Creator Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ, рассмотритС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹:

    ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠŸΠ»ΡŽΡΡ‹ ΠœΠΈΠ½ΡƒΡΡ‹ Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для
    LVGL Font Tool
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сглаТивания (антиалиасинг).
    • Экспорт Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ для LVGL (популярная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для GUI).
    Π‘Π»ΠΎΠΆΠ½Π΅Π΅ Π² освоСнии, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ настройки. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с графичСским интСрфСйсом Π½Π° STM32, Raspberry Pi.
    Bitmap Font Generator (BFG)
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° TrueType ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² (конвСртация Π² растр).
    • Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΎΠΏΡ†ΠΈΠΉ для ΠΊΠ΅Ρ€Π½ΠΈΠ½Π³Π° ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π»ΠΈΠ½ΡŒΡΠΆΠ°.
    ΠŸΠ»Π°Ρ‚Π½Π°Ρ вСрсия ΠΈΠΌΠ΅Π΅Ρ‚ большС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с высокими трСбованиями ΠΊ Ρ‚ΠΈΠΏΠΎΠ³Ρ€Π°Ρ„ΠΈΠΊΠ΅.
    MicroFont
    • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π²Π΅Π±-интСрфСйс (Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅).
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ "ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ".
    ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ настройки экспорта. БыстроС созданиС ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ² для Arduino.
    FontForge + скрипты
    • Максимальная Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ (ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹).
    • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° всСх ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΎΠΊ.
    Π‘Π»ΠΎΠΆΠ½Ρ‹ΠΉ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ², Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ знания Python для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹Π΅ ΡˆΡ€ΠΈΡ„Ρ‚Ρ‹ для ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹Ρ… дисплССв.

    Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° MicroFont ΠΈΠ»ΠΈ LVGL Font Tool β€” ΠΎΠ½ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ, Ρ‡Π΅ΠΌ GLCD Font Creator. Для ESP32 с дисплСями TFT (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ILI9341) часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ LVGL, поэтому LVGL Font Tool станСт ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ ΡˆΡ€ΠΈΡ„Ρ‚Π° ΠΈΠ· .ttf Π² растр с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ FontForge:

    1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ .ttf-Ρ„Π°ΠΉΠ» Π² FontForge.
    2. Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ символы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ).
    3. ЭкспортируйтС Π² .bmp Ρ‡Π΅Ρ€Π΅Π· File β†’ Export β†’ Bitmap.
    4. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ .bmp Π² GLCD Font Creator для Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠ²ΠΎΠ΄ΠΊΠΈ.

    FAQ: ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° частыС вопросы

    Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ Π² GLCD Font Creator?

    Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ русскиС Π±ΡƒΠΊΠ²Ρ‹:

    1. Π’ настройках ΡˆΡ€ΠΈΡ„Ρ‚Π° (Font Properties) Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Windows-1251.
    2. Π’Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ символы с ΠΊΠΎΠ΄Π°ΠΌΠΈ 192–255 (ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Π΅ Π² Windows-1251).
    3. НарисуйтС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠ· .bmp.
    4. ΠŸΡ€ΠΈ экспортС ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ ΡƒΠΊΠ°Π·Π°Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:
      // Π’ Ρ„Π°ΠΉΠ»Π΅ my_font.h
      

      #define FONT_FIRST_CHAR 32 // ΠŸΡ€ΠΎΠ±Π΅Π»

      #define FONT_LAST_CHAR 255 // ПослСдний символ (Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρƒ)

    Если Π±ΡƒΠΊΠ²Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π½Π΅Π²Π΅Ρ€Π½ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°/дисплСя β€” ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Windows-1251.

    МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ GLCD Font Creator для OLED-дисплССв (SSD1306, SH1106)?

    Π”Π°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π»ΡŽΠ±Ρ‹Ρ… графичСских дисплССв, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ OLED. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π°:

    • Для SSD1306 (128Γ—64) ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ β€” 6Γ—8 ΠΈΠ»ΠΈ 8Γ—16.
    • Для SH1106 (128Γ—64) β€” Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.
    • ЭкспортируйтС ΡˆΡ€ΠΈΡ„Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ U8g2, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ U8g2.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° для SSD1306:

    #include 
    

    #include "my_font.h"

    U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);

    void setup() {

    u8g2.begin();

    u8g2.setFont(my_font_8x16); // ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚

    u8g2.drawStr(0, 20, "ВСст ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹");

    u8g2.sendBuffer();

    }

    Как ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π° для Arduino Uno (ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ 32 ΠšΠ‘ flash)?

    Для Arduino Uno (ATmega328P) с 32 ΠšΠ‘ flash-памяти:

    • 🧹 Π£Π΄Π°Π»ΠΈΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ символы. ΠžΡΡ‚Π°Π²ΡŒΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†ΠΈΡ„Ρ€Ρ‹ (48–57) ΠΈ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π±ΡƒΠΊΠ²Ρ‹.
    • πŸ“‰ Π£ΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚Π΅ высоту. ВмСсто 16Γ—16 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ 8Γ—8.
    • πŸ”„ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сТатиС RLE (Π² настройках экспорта).
    • πŸ—‘οΈ Π₯Ρ€Π°Π½ΠΈΡ‚Π΅