Тема, которую я хочу обсудить, мягко говоря, не новая. LCD дисплеи на базе контроллера HD44780 и его клонов используются уже более 20 лет. Это всевозможные 1601, 1602, 2002, 2004 и прочие (первая пара цифр - количество символов в строке, вторая - количество строк.
В основном китайские, но попадаются и вполне достойные отечественные изделия.
Русификация этих девайсов обсуждалась неоднократно, в том числе и в контексте сопряжения с arduino. Дело в том, что большинство таких дисплеев, продающихся на российском рынке (про aliexpress - разговор особый) имеют встроенный знакогенератор для кириллицы. Но реализован он довольно коряво - русские символы разбросаны по таблице знакогенератора абсолютно хаотично, без всякого соответствия какой-либо известной кодировке. С латиницей все нормально - там используется классическая ASCII, а с кириллицей - увы: вроде бы как она есть, но чтобы использовать ее нужно немного потанцевать с бубном. Так или иначе, стандарт устоялся (даже у отечественных производителей) и мало шансов на то, что в ближайшие 100-200 лет здесь что-нибудь изменится. Приходится изобретать программные костыли-конвертеры.
Давным-давно хороший человек Илья Данилов разработал библиотеку LiquidCrystalRus, подменяющую стандартную библиотеку LiquidCrystal из Arduino IDE, решив тем самым проблему русификации знакосинтезирующих ЖК-дисплеев, казалось бы, раз и навсегда.
Но эта библиотека была рассчитана на подключение дисплея исключительно по параллельному интерфейсу (4-х или 8-проводному), а сейчас в среде ардуинщиков считается хорошим тоном экономить линии ввода-вывода и использовать для связи с дислеем последовательный интерфейс I2C.
Некоторое время назад у автора этих строк появилась острая нужда в выводе русских символов на дисплей, подключенный по I2C. Копаться в чужом коде мне категорически не хотелось, так что пришлось потратить немного драгоценного времени и написать свою собственную библиотеку-конвертер.
Приблуда не заточена под какой-то конкретный тип интерфейса или дисплей. Просто даешь ей на вход строку в кодировке WIN1251 или UTF8 , а на выходе получаешь последовательность символов, соответствующую знакосинтезатору HD44780, которую потом можно скормить дисплею, используя любой драйвер (мне лично нравится NewLiquidCrystal library от F. Malpartida, но это дело вкуса).
Выглядит это дело примерно так:
Создаем объект ConvertToCyrLCD с указанием в конструкторе требуемой входной кодировки, а затем вызываем его метод convert, выдающий абракадабру, понятную дисплею. Просто и эффективно. Как подключать библиотеки в Arduino IDE, надеюсь, никого учить не надо.
Качайте, читайте инструкцию и пользуйтесь на здоровье!