Raspberry Pi:Библиотеки/WiringPi/Драйверы DevLib/Драйвер для LCD-дисплеев

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Черновик


Драйвер для LCD-дисплеев[1]

Библиотека WiringPi поддерживает devLib-драйвер, позволяющий управлять большинством популярных 1-, 2- и 4-строковых LCD-дисплеев, работающих на контроллере Hitachi HD44780U или другом совместимом контроллере.

Кроме того, этот драйвер позволяет подключать к одной Pi несколько LCD-дисплеев. Эти дисплеи могут быть подключены напрямую к GPIO-контактам или через GPIO-расширитель (чип, оснащающий Pi дополнительными GPIO-контактами), поддерживаемый WiringPi – к примеру, через чип MCP23017 (работает через шину I2C), который используется в некоторых платах от Adafruit.

Вверху – стандартный LCD-дисплей 16x2, подключенный напрямую к Raspberry Pi (ниже); внизу – LCD-плата Adafruit с RGB-подсветкой и кнопками. О том, как использовать дисплей Adafruit при помощи WiringPi, читайте на этой странице

Fritzing-картинки ниже показывают, как подключить дисплей напрямую к GPIO-контактам Raspberry Pi в 4- и 8-битном режимах.

LCD-дисплей, подключенный к Pi в 4-битном режиме
LCD-дисплей, подключенный к Pi в 8-битном режиме

Этот драйвер/модуль прост в использовании, но с подключением дисплеев, возможно, придется немного повозиться, поэтому не торопитесь.

Вы можете подключить к Pi больше одного дисплея. Если вам нужен 8-битный режим, то первому дисплею нужно 10 GPIO-контактов, а каждому дополнительному дисплею – еще по одному контакту, поэтому с максимумом в 17 GPIO-контактов вы можете подключить к Pi до 8 дисплеев. Но если вам нужен 4-битный режим (код для работы с ним очень прост), то максимальное количество дисплеев увеличивается еще на 4 – до 12 штук!

Правда, с подключением могут возникнуть определенные трудности (о подключении читайте в конце статьи).

LCD-дисплей может быть 5-вольтовым или 3,3-вольтовым. Но при использовании 5-вольтового дисплея убедитесь, что он не передает данные на Raspberry Pi, поскольку в этом случае GPIO-контакты Pi получат 5 вольт, что может закончиться очень плачевно. В лучшем случае вы испортите GPIO-контакты, в худшем – всю Pi.

Важное примечание: Используя 5-вольтовый дисплей, всегда заземляйте его контакт R/W, чтобы для хоста (т.е. для Raspberry Pi) этот дисплей был устройством, которое может лишь считывать (но не записывать) данные. В противном случае дисплей может подать на Pi напряжение в 5 вольт, что может сильно повредить плату (вплоть до полной неисправности).

Инициализация и использование

Чтобы использовать в своей программе драйвер для LCD-дисплеев, в ее начале нужно вписать следующее:

#include <wiringPi.h>
#include <lcd.h>

Во-первых, вам нужно инициализировать WiringPi одним из 4-ех доступных способов. Если потребуется, драйвер/модуль для LCD-дисплеев самостоятельно вызовет функции pinMode().

Ниже – главная инициализирующая функция, и ее нужно вызывать перед вызовом всех остальных функций из модуля для LCD-дисплеев:

int  lcdInit (int rows, int cols, int bits, int rs, int strb, int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) ;

Параметры rows и cols – это строки и столбцы в дисплее (например, «2, 16» или «4, 20»). Параметр bits – это разрешение интерфейса, по которому передаются данные («4» или «8»). Параметры rs и strb – это номера для контактов RS и E на дисплее. Параметры d0 и d7 – это номера для 8 контактов, через которое передаются данные от Pi к LCD-дисплею (если вы работаете в 4-битном режиме, это будут первые 4 контакта).

Возвращаемое значение – это «никнейм», который будет использоваться для последующих функций при работе с этим LCD-дисплеем, или «-1», что будет означать ошибку (как правило, дело в некорректных параметрах).

В Fritzing-картинках выше для инициализации 4-битной цепи нужно вписать следующее:

fd = lcdInit (2, 16, 4,  11,10 , 0,1,2,3,0,0,0,0) ;

А для инициализации 8-битной цепи – следующее:

fd = lcdInit (2, 16, 8,  11,10 , 0,1,2,3,4,5,6,7) ;

Функции

  • lcdHome (int handle)
    
  • lcdClear (int handle)
    

Первая возвращает курсор в исходное положение, а вторая – очищает экран.

  • lcdDisplay (int fd, int state) ;
    
  • lcdCursor (int fd, int state) ;
    
  • lcdCursorBlink (int fd, int state) ;
    

Первая включает/выключает дисплей, вторая – включает/выключает курсор, а третья – включает/выключает мигание курсора. Параметр state – это true или false. По умолчанию дисплей включен, курсор выключен и мигание тоже выключено.

  • lcdPosition (int handle, int x, int y) ;
    

Ставит курсор на указанную позицию, чтобы потом начать оттуда печать текста. Параметр x – это номер столбца, и если вписать здесь значение «0», то курсор станет на левом краю дисплея. Параметр y – это номер строки, и если вписать здесь «0», то курсор станет в самой верхней строке.

  • lcdCharDef (int handle, int index, unsigned char data [8]) ;
    

Позволяет создать свой собственный символ (всего таких символов можно создать 8 штук). Параметр data – это массив из 8 байт, из которых этот символ, собственно, и создается. Обратите внимание, что размер символа составляет 5x8, поэтому для ширины используются только 5 младших бит. Параметр index – это значение от «0» до «7», и это номер для одного из 8 созданных вами символов. То есть вы можете указать его параметром в функции lcdPutchar() и тем самым напечатать свой символ на дисплее.

  • lcdPutchar (int handle, unsigned char data) ;
    
  • lcdPuts (int handle, const char *string) ;
    
  • lcdPrintf (int handle, const char *message, ) ;
    

Эти функции печатают на дисплее информацию. Первая печатает символ формата ASCII, вторая – строку, а третья – строку, отформатированную командой printf. На данный момент драйвер для LCD-дисплеев не поддерживает скроллинг, но если потребуется, длинная строка может продолжиться и на следующей линии.

Пример работы с этим драйвером смотрите в программе «lcd.c», расположенной по маршруту «~wiringPi/devLib».

Подключение

Подключение дисплеев выполняется относительно просто. Вам потребуется 4 или 8 контактов для передачи данных и еще 2 контакта для управления передачей данных. LCD-дисплеи оснащены 2 контрольными линиями – RS и E.

Важное примечание: Подсоединяя 5-вольтовый дисплей, всегда подключайте контакт R/W на дисплее к «земле». Это нужно для того, чтобы дисплей относительно хоста (т.е. платы Raspberry Pi) был устройством, которому позволено лишь считывать данные, но не отправлять их. Если этого не сделать, дисплей может подать на плату 5 вольт, что может ее повредить.

На краю LCD-дисплея есть коннектор, на котором изображена схема – используйте ее для подключения к контактам GPIO-коннектора. Также посматривайте на эти таблицы, чтобы понимать, какие GPIO-контакты вам нужно использовать.

Если вы хотите подсоединить 2-ой (или 3-ий, 4-ый и т.д.) дисплей, то их нужно подключать параллельно к тем же контактам, за исключением контакта E. Этот контакт у каждого дисплея должен быть подключен к отдельному GPIO-контакту на Pi.

См.также

Внешние ссылки