Ранее в этом блоге было рассмотрено несколько ЖК-дисплеев / индикаторов и их использование из Arduino. Существенным их недостатком является довольно большой размер, а также вес. Зачастую это не является проблемой. Например, если вы собираете DIY паяльную станцию в самодельном корпусе, там как-то без разницы, какого размера дисплей. С другой стороны, если вам нужен дисплей, скажем, на квадрокоптере , тут вес и размер становятся критически важными. Поэтому сегодня мы научимся работать с очень маленьким и легким экранчиком от телефона Nokia 5110.
Примечание: Другие посты по теме экранчиков — Научился выводить текст на ЖК-индикатор из Arduino , Об использовании экранчиков 1602 с I2C-адаптером , Работаем с LCD на базе HD44780 без библиотек , и Цифровой термометр из ЖК-матрицы, TMP36 и Arduino .
Не беспокойтесь, покупать эффективно не существующий нынче телефон Nokia 5110, выковыривать из него экранчик и выбрасывать все остальные детали не придется. Экранчик от Nokia 5110 являются очень распространенным самостоятельным модулем для радиолюбителей и стоит где-то от 2 до 5$, в зависимости от магазина. В России модуль можно купить, например, на tpai.ru , arduino-kit.ru , amperkot.ru , compacttool.ru , chipster.ru или electromicro.ru . Ну и, конечно же, по самой низкой цене экранчики продаются на AliExpress, но придется подождать месяц или два, пока они придут из Китая.
Как это часто бывает в мире Arduino, для модуля уже существуют готовые библиотеки, и не одна. Мне понравилась библиотека LCD5110, выложенная на сайте rinkydinkelectronics.com. У этой библиотеки есть две версии. Первая называется LCD5110_Basic . Она попроще и способна выводить только текст шрифтами разного размера. Есть возможность создания собственных шрифтов. Вторая версия называется LCD5110_Graph . Она имеет все возможности первой библиотеки и в дополнение к ним умеет рисовать отрезки, прямоугольники, круги и так далее.
В рамках этого поста будет использована LCD5110_Basic. Обе библиотеки прекрасно документированы и имеют множество примеров использования, так что при необходимости в LCD5110_Graph вы без труда разберетесь самостоятельно. Стоит однако отметить, что чтобы LCD5110_Basic компилировалась без warning’ов, мне пришлось внести пару небольших правок в ее код.
Итак, пример использования библиотеки:
extern uint8_t BigNumbers [ ] ;
extern uint8_t MediumNumbers [ ] ;
extern uint8_t SmallFont [ ] ;
/* SCK / CLK, MOSI / DIN, DC, RST, CS */
LCD5110 lcd ( 2 , 3 , 4 , 6 , 5 ) ;
void setup ( )
{
lcd. InitLCD ( ) ;
}
int ctr = 0 ;
void loop ( )
{
lcd. clrScr ( ) ;
lcd. setFont ( BigNumbers ) ;
lcd. printNumI ( ctr, RIGHT, 0 ) ;
lcd. setFont ( MediumNumbers ) ;
lcd. printNumF ( 12.34 , 2 , RIGHT, 24 ) ;
lcd. setFont ( SmallFont ) ;
lcd. print ( «Line 1» , 0 , 8 * 0 ) ;
lcd. print ( «Line 2» , 0 , 8 * 1 ) ;
lcd. print ( «Line 3» , 0 , 8 * 2 ) ;
lcd. print ( «L 4» , 0 , 8 * 3 ) ;
lcd. print ( «L 5» , 0 , 8 * 4 ) ;
lcd. print ( «0123456789ABCD» , 0 , 8 * 5 ) ;
ctr + = 5 ;
if ( ctr >= 1000 )
ctr = 0 ;
delay ( 500 ) ;
}
Как это выглядит в действии:
Надеюсь, что код разжевывать не требуется. Заметьте, что модуль питается от 3.3 В, но команды от Arduino при этом понимает нормально безо всяких преобразователей логических уровней. Соответственно, пины VCC (питание) и BL (подсветка) подключаем к 3.3 В, GND подключаем к земле, остальные пять пинов подключаем к цифровым пинам Arduino. Номера пинов передаем конструктору класса LCD5110 в соответствии с комментариями в приведенном коде.
Просто, не правда ли? Полную версию исходников к этой заметке вы найдете в этом репозитории на GitHub . Дополнения и вопросы, как всегда, всячески приветствуются.
Дополнение: Автор библиотеки для работы с экранчиком от Nokia 5110 также является автором библиотеки OLED_I2C, предназначенной для работы с не менее популярными OLED-экранчиками с I2C-интерфейсом. Пример использования OLED_I2C вы найдете в посте Используем джойстик от Sega Genesis в проектах на Arduino . Как можно было ожидать, эти две библиотеки имеют похожий интерфейс.