Поделиться через


Отображение текста на ЖК-дисплее

Символьные ЖК-дисплеи удобно использовать для отображения информации без внешнего монитора. Обычные символьные ЖК-дисплеи можно подключить напрямую к контактам 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
Изображение обратной стороны символьного дисплея с расширителем I2C GPIO. Диаграмма, показывающая схему контактов верхнего контактного ряда GPIO Raspberry Pi. Изображение взято с Raspberry Pi Foundation.
Изображение взято с Raspberry Pi Foundation.

Совет

Для упрощения подключения к заголовку GPIO рекомендуется использовать коммутационную плату GPIO в сочетании с монтажной платой для макетирования или тестирования.

Создайте приложение

Выполните следующие действия в предпочитаемой среде разработки.

  1. Создайте консольное приложение .NET с помощью .NET CLI или Visual Studio. Назовите его LcdTutorial.

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Добавьте пакет Iot.Device.Bindings в проект. Используйте либо .NET CLI из каталога проекта, либо Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Замените содержимое 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 выполняется бесконечно. Каждая итерация:

      1. Очищает экран.
      2. Устанавливает курсор в первую позицию в текущей строке.
      3. Записывает текущее время для отображения в текущей позиции курсора.
      4. Выполняет итерацию счетчика текущей строки.
      5. Переходит в спящий режим на 1000 мс.
  4. Построение приложения. При использовании интерфейса командной строки .NET выполните команду dotnet build. Чтобы выполнить сборку в Visual Studio, нажмите клавиши CTRL+SHIFT+B.

  5. Разверните приложение в SBC как автономное приложение. Инструкции см. в статье Развертывание приложений .NET в Raspberry Pi. Обязательно предоставьте исполняемому файлу разрешение execute с помощью chmod +x.

  6. Запустите приложение на устройстве Raspberry Pi, перейдя в каталог развертывания и запустив исполняемый файл.

    ./LcdTutorial
    

    Наблюдайте за отображением текущего времени в каждой строке на символьном ЖК-дисплее.

    Совет

    Если дисплей светится, но текст не отображается, попробуйте настроить контрастность с помощью регулятора на обратной стороне экрана.

  7. Завершите работу программы, нажав клавиши CTRL+C.

Поздравляем! Вы отображали текст на ЖК-дисплее с помощью I2C и расширителя GPIO!

Получение исходного кода

Исходный код для этого учебника доступен на сайте GitHub.

Дальнейшие действия