Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

M5Stack. Работаем с экраном. Русский текст в кодировке Unicode

В старой прошивке можно было добавить кириллицу в кодировке 1251, на официальном форуме есть статья на эту тему. Но где-то в середине 2019 года M5Stack обновила драйвер для экрана и пример перестал работать. Я проверил, действительно не работает.

В составе примеров к M5Stack появился новый пример Advanced/Display_Unicode. Название звучит многообещающе.

Но пример у меня отказывался запускаться, среда исполнения выводила сообщение ***CUF_24px.h:156463:7: error: 'EncodeRange' does not name a type const EncodeRange CUF_24pxEncodeRange[] PROGMEM = {***.

Решение проблемы состоит из нескольких шагов. Сначала нужно найти файл [m5stack path]/src/utility/In_eSPI_Setup.h, открыть его текстовым редактором и снять комментарий с последней строки:


#define USE_M5_FONT_CREATOR

Снова пытаемся загрузить скетч и получаем другую ошибку - слишком большой файл. Действительно, файл CUF_24px.h, содержащий шрифт, занимает около 8 мегабайт.

Следует найти другой шрифт или создать его самостоятельно. У M5Stack на Гитхабе есть отдельный репозиторий GFX Font Creator. В папке windows_exe находится утилита GFXCreator.exe. Скачиваем её и запускаем. Нажимаем кнопку Add. В следующем диалоговом окне нажимаем кнопку Choose font и выбираем любой Unicode-шрифт с кириллицей из системных шрифтов. Я выбрал Arial. В секции Unicode Block следует выбрать диапазон символов, например от 0x0000 до 0x0500.

M5Stack LCD

После нажатия OK возвращаемся на главное окно приложения, вводим имя шрифта (если оставить без изменений, то будет создано имя по умолчанию), также можно поиграться с другими настройками. Далее нажимаем кнопку Generate.

M5Stack LCD Font

В той же папке, где находится ваше приложение, появится новый файл, содержащий шрифт - MyArial_24px.h. Он занимает гораздо меньше места. На всякий случай прикладываю для ленивых (скачать MyArial_24px.zip).

Удаляем вкладку CUF_24px.h и добавляем вкладку с файлом MyArial_24px.h. Запускаем скетч. Кроме русских символов, можно выводить некоторые спецсимволы. Смотри пояснения в комментариях.


#include <M5Stack.h>
#include "MyArial_24px.h"

void setup()
{
  M5.begin();

  M5.Lcd.setTextColor(TFT_WHITE);
  M5.Lcd.setFreeFont(&MyArial_24px);
  M5.Lcd.setTextDatum(TC_DATUM);
}

void loop()
{
  M5.Lcd.fillScreen(0);
  M5.Lcd.drawString("абвгдеёжзийклмноп", 10, 30, 1);
  M5.Lcd.drawString("рстуфхцчшщъыьэюя", 10, 60, 1);
  M5.Lcd.drawString("АБВГДЕЁЖЗИЙКЛМНОП", 10, 90, 1);
  M5.Lcd.drawString("РСТУФХЦЧШЩЪЫЬЭЮЯ", 10, 120, 1);
  M5.Lcd.drawChar(0x00B0, 10, 170, 1); // символ градуса Цельсия
  M5.Lcd.drawChar(0x00B2, 20, 170, 1); // степень двойки
  M5.Lcd.drawChar(0x00AE, 30, 170, 1); // ® зарегистированный знак
  M5.Lcd.drawChar(0x00BE, 45, 170, 1); // ¾ три четвертых
  delay(5000);

  M5.Lcd.fillScreen(0);
  M5.Lcd.setCursor(0, 30);
  M5.Lcd.printf("Теперь я могу написать слово кот!");
  delay(3000);

  M5.Lcd.fillScreen(0);
  M5.Lcd.setCursor(0, 30);
  M5.Lcd.printf("Барсик, Мурзик, Рыжик, Васька");
  delay(3000);
}
Unicode

Unicode

Дополнительные материалы

Реклама