Отображение текста на ЖК-дисплее
Символьные ЖК-дисплеи удобно использовать для отображения информации без внешнего монитора. Обычные символьные ЖК-дисплеи можно подключить напрямую к контактам GPIO, но в этом случае требуется использовать до 10 контактов GPIO. В сценариях, требующих подключения к комбинации устройств, зачастую нецелесообразно выделять большую часть верхнего контактного ряда GPIO для символьного дисплея.
Многие производители продают символьные ЖК-дисплеи размером 20x4 со встроенным расширителем GPIO. Символьный дисплей подключается непосредственно к расширительу GPIO, который затем подключается к Raspberry Pi через последовательный протокол Inter-Integrated Circuit (I2C).
В этом разделе вы будете использовать .NET для отображения текста на ЖК-дисплее с помощью расширителя GPIO I2C.
Предварительные требования
- Однопанерный компьютер (SBC) на основе ARM (ARMv7 или более поздней версии)
- 20x4 ЖК-символьный дисплей с интерфейсом I2C
- оптоволоконные кабеля с разъемами на обоих концах;
- Монтажная плата (необязательно/рекомендуется)
- Коммутационная плата GPIO Raspberry Pi (необязательно/рекомендуется)
- Пакет SDK для .NET 7 или более поздней версии
Примечание
В этом руководстве предполагается, что целевым устройством является Raspberry Pi. Однако это руководство можно использовать для любого SBC под управлением Linux, поддерживающего .NET, например Orange Pi, ODROID и т. д.
Примечание
Существует множество производителей символьных ЖК-дисплеев. Большинство конструкций похожи, и производители не видят никакой разницы в функционале. Для справки: это руководство было разработано для LCD2004.
Подготовка SBC
Убедитесь, что SBC настроен для поддержки следующих служб:
- SSH
- I2C
Для многих устройств дополнительная настройка не требуется. Для Raspberry Pi используйте raspi-config
команду . Дополнительные сведения о raspi-config
см. в документации по Raspberry Pi.
Подготовка оборудования
Используйте перемычки для подключения четырех контактов на расширителя I2C GPIO к Raspberry Pi следующим образом:
- DGND к заземлению
- VCC к 5V
- SDA к SDA (GPIO 2)
- SCL к SCL (GPIO 3)
При необходимости ознакомьтесь со следующими рисунками:
Интерфейс I2C (задняя часть экрана) | GPIO Raspberry Pi |
---|---|
Изображение взято с Raspberry Pi Foundation. |
Совет
Для упрощения подключения к заголовку GPIO рекомендуется использовать коммутационную плату GPIO в сочетании с монтажной платой для макетирования или тестирования.
Создайте приложение
Выполните следующие действия в предпочитаемой среде разработки.
Создайте консольное приложение .NET с помощью .NET CLI или Visual Studio. Назовите его LcdTutorial.
dotnet new console -o LcdTutorial cd LcdTutorial
Добавьте пакет Iot.Device.Bindings в проект. Используйте либо .NET CLI из каталога проекта, либо Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Замените содержимое Program.cs кодом из этого примера.
using System; using System.Device.Gpio; using System.Device.I2c; using System.Threading; using Iot.Device.CharacterLcd; using Iot.Device.Pcx857x; Console.WriteLine("Displaying current time. Press Ctrl+C to end."); using I2cDevice i2c = I2cDevice.Create(new I2cConnectionSettings(1, 0x27)); using var driver = new Pcf8574(i2c); using var lcd = new Lcd2004(registerSelectPin: 0, enablePin: 2, dataPins: new int[] { 4, 5, 6, 7 }, backlightPin: 3, backlightBrightness: 0.1f, readWritePin: 1, controller: new GpioController(PinNumberingScheme.Logical, driver)); int currentLine = 0; while (true) { lcd.Clear(); lcd.SetCursorPosition(0,currentLine); lcd.Write(DateTime.Now.ToShortTimeString()); currentLine = (currentLine == 3) ? 0 : currentLine + 1; Thread.Sleep(1000); }
В приведенном выше коде:
Объявление using создает экземпляр
I2cDevice
, вызывая методI2cDevice.Create
и передавая новый классI2cConnectionSettings
с параметрамиbusId
иdeviceAddress
. ПредставляетI2cDevice
собой шину I2C. Объявлениеusing
гарантирует, что объект удален и аппаратные ресурсы освобождены должным образом.Предупреждение
Адрес устройства для расширителя GPIO зависит от микросхемы, используемой производителем. Расширители GPIO, оснащенные PCF8574, используют адрес
0x27
, а расширители с микросхемами PCF8574A используют0x3F
. Обратитесь к документации по ЖК-дисплею.Другое объявление
using
создает экземплярPcf8574
и передаетI2cDevice
конструктору. Этот экземпляр представляет расширитель GPIO.Другое объявление
using
создает экземплярLcd2004
для представления дисплея. Конструктору передается несколько параметров, описывающих настройки, которые будут использоваться для взаимодействия с расширителем GPIO. Расширитель GPIO передается в качестве параметраcontroller
.Цикл
while
выполняется бесконечно. Каждая итерация:- Очищает экран.
- Устанавливает курсор в первую позицию в текущей строке.
- Записывает текущее время для отображения в текущей позиции курсора.
- Выполняет итерацию счетчика текущей строки.
- Переходит в спящий режим на 1000 мс.
Построение приложения. При использовании интерфейса командной строки .NET выполните команду
dotnet build
. Чтобы выполнить сборку в Visual Studio, нажмите клавиши CTRL+SHIFT+B.Разверните приложение в SBC как автономное приложение. Инструкции см. в статье Развертывание приложений .NET в Raspberry Pi. Обязательно предоставьте исполняемому файлу разрешение execute с помощью
chmod +x
.Запустите приложение на устройстве Raspberry Pi, перейдя в каталог развертывания и запустив исполняемый файл.
./LcdTutorial
Наблюдайте за отображением текущего времени в каждой строке на символьном ЖК-дисплее.
Совет
Если дисплей светится, но текст не отображается, попробуйте настроить контрастность с помощью регулятора на обратной стороне экрана.
Завершите работу программы, нажав клавиши CTRL+C.
Поздравляем! Вы отображали текст на ЖК-дисплее с помощью I2C и расширителя GPIO!
Получение исходного кода
Исходный код для этого учебника доступен на сайте GitHub.