Arduino, модуль Nokia 5110 LCD и кириллица
Понадобилось мне, для небольшого проекта на ардуино, выводить кое-какую информацию, естественно на экран, а не в консоль. Купил парочку LCD модулей а-ля Nokia 5110 с разрешением 84×48 пикселей. Библиотеку решил использовать от Adafruit, точнее две Adafruit-PCD8544-Nokia-5110-LCD-library и Adafruit-GFX-Library. Если кто с ними ещё не знаком — позволяют выводить не экран текст (шесть строк по 14 символов), отображать заранее подготовленные изображения, рисовать (линии, прямоугольники, круги и т.д.), ну и рисовать попиксельно. Скетч pcdtest отработал нормально, и я приступил к написанию своего велосипеда проекта. Тут то и начались приключения…Оказалось, что в шрифте нет русских символов, а я так хотел… По первой же ссылке в гугле нашёл единомышленников, в комментарии #35 некий Droni поделился сделанным им редактором шрифтов и готовым шрифтом. На поверку, редактор оказался кривым — не отображал последний (256) символ, да и сам шрифт не доведён до ума — мало того, что в кодировке cp866, так ещё и не доделанный — в псевдографике пропущен символ (ошибка пришла из оригинала шрифта от adafruit), не хватает символов «Ё» и «ё». Сначала я пытался доработать шрифт в редакторе Droni, но когда обнаружил, что не отображается 256 символ — моё терпение лопнуло и я решил написать свой редактор с блекджеком и …. Редактор и шрифт в кодировке cp1251. Краткая инструкция: у редактора два рабочих поля — в левом редактируем выбранный символ (клацаньем лкм меняется цвет пикселя), в правом отображаются все символы шрифта, разделены красной линией на ASCII (с 0 по 127) и национальные (со 128 по 255), выбранный символ обведён синей рамкой, снизу отображается индекс выбранного символа в десятичной и шестнадцатеричной системах. Всё просто — открываем готовый шрифт, смотрим, что вам в нём не нравится и хочется изменить, редактируем и сохраняем. Обратите внимание — шрифты по идее 5×7 пикселей, по факту 5×8, нижний ряд пикселей используется, но только в таких символах как «Д», «Ц», «Щ», а по сути, он разделитель между строками. На экране каждый символ 6×8, то есть между символами используется интервал в один пиксель.Далее я обнаружил неожиданное поведение Wiring. Кодировка самого редактора utf-8, но если в файле preferences установить preproc.substitute_unicode=false, то при компилировании происходит перекодирование в системную кодировку, т.е. в cp1251. Получается, отключив «замену unicode» мы включаем конвертацию кодировок. Проще говоря — можно писать прямо в IDE на кириллице и после загрузки скетча в плату увидеть нормальный русский текст на экране.Ещё мне понадобилось выводить на экран пару иконок. Adafruit предлагают использовать конвертер Img2Code, но рисовать в GIMP попиксельно мне как-то не очень понравилось, искать бесплатный редактор для пиксель-арта было лень и я решил в дополнении к редактору шрифтов сделать ещё и редактор иконок. Редактор получился печальным, я пробовал рисовать небольшие иконки, поэтому было вполне удобно, но рисовать полноразмерную картинку (84×48) пожалуй, будет совсем не комфортно.Скетч демонстрирующий вывод на экран кириллицы (фото в начале статьи) и иконки (за основу взята картинка из этой статьи). Естественно скетч надо использовать с готовым шрифтом и правильными настройками Wiring.Скриншоты редакторов В заключении — редакторы написаны на Python 2, ни каких сторонних библиотек не требуется, т.к. интерфейс на Tkinter, ну и полагаю редакторы кроссплатформенные. Редакторы предназначены для зрячих — я работаю на нетбуке с экраном в 10», поэтому элементы интерфейса весьма мелкие. За код мне честно очень стыдно, так что лучше его не смотреть.P.S.: ирония судьбы — в своём проекте я в итоге отказался от кириллицы и иконок.