12 November 2014

Arduino, модуль Nokia 5110 LCD и кириллица

Developing for Arduino


Понадобилось мне, для небольшого проекта на ардуино, выводить кое-какую информацию, естественно на экран, а не в консоль. Купил парочку 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.: Ирония судьбы – в своём проекте я в итоге отказался от кириллицы и иконок.
Tags:arduinonokia 5110 lcd module
Hubs: Developing for Arduino
+31
56.7k 255
Comments 12