通过


在 LCD 上显示文本

LCD 字符显示器可用于显示信息,而无需外部监视器。 常见的 LCD 字符显示器可以直接连接到 GPIO 引脚,但这种方法要求使用最多 10 个 GPIO 引脚。 对于需要连接到设备组合的场景,将如此多的 GPIO 标头分配给字符显示器通常不切实际。

许多制造商会销售带有集成 GPIO 扩展器的 20x4 LCD 字符显示器。 字符显示直接连接到 GPIO 扩展器,然后通过集成电路(I2C)串行协议连接到 Raspberry Pi。

在本主题中,将使用.NET通过 I2C GPIO 扩展器在LCD字符显示器上显示文本。

先决条件

注释

本教程编写为假设目标设备为 Raspberry Pi。 但是,本教程可用于支持.NET的任何基于 Linux 的 SBC,例如 Orange Pi、ODROID 等。

注释

有许多LCD字符显示器制造商。 大多数设计都是相同的,制造商不应对功能产生任何影响。 为了参考,本教程是使用 SunFounder LCD2004开发的。

准备 SBC

确保 SBC 配置为支持以下服务:

  • SSH
  • I2C

对于许多设备,无需其他配置。 对于 Raspberry Pi,请使用 raspi-config 命令。 有关详细信息 raspi-config,请参阅 Raspberry Pi 文档

准备硬件

使用跳线将 I2C GPIO 扩展器上的四个引脚连接到 Raspberry Pi,如下所示:

  • GND 到地面
  • VCC 到 5V
  • SDA 到 SDA (GPIO 2)
  • SCL 到 SCL (GPIO 3)

根据需要参阅下图:

I2C 接口(显示器背面) Raspberry Pi GPIO
显示 I2C GPIO 扩展器字符背面的图像。 Raspberry Pi GPIO 接头引脚排列图。图片由 Raspberry Pi 基金会提供。
图片由 Raspberry Pi Foundation 提供

小提示

建议将 GPIO 扩展板与面包板结合使用,以简化与 GPIO 接头的连接。

创建应用

在首选开发环境中完成以下步骤:

  1. 使用 .NET CLIVisual Studio 创建新的.NET控制台应用。 将其命名为 LcdTutorial

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Iot.Device.Bindings 包添加到项目。 使用项目目录中的 .NET CLIVisual Studio

    dotnet package add Iot.Device.Bindings --version 4.1.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.Create并传入一个带有busIddeviceAddress参数的新I2cConnectionSettings实例来创建I2cDevice的实例。 这 I2cDevice 表示 I2C 总线。 声明 using 可确保对象被妥善处理并释放硬件资源。

      警告

      GPIO 扩展器的设备地址取决于制造商使用的芯片。 配备PCF8574地址的 GPIO 扩展器使用地址 0x27,而那些使用PCF8574A芯片的扩展器则使用 0x3F。 请参阅 LCD 的文档。

    • 另一个 using 声明创建了一个 Pcf8574 实例,并将 I2cDevice 传递给构造函数。 此实例表示 GPIO 扩展器。

    • 另一个 using 声明创建了一个 Lcd2004 的实例来表示显示器。 将多个参数传递给描述用于与 GPIO 扩展器通信的设置的构造函数。 GPIO 扩展器作为 controller 参数传递。

    • while循环无限期运行。 每次迭代:

      1. 清空显示屏
      2. 将光标位置设置为当前行上的第一个位置。
      3. 将当前时间写入显示屏幕的当前光标位置。
      4. 循环访问当前行计数器。
      5. 休眠 1000 毫秒。
  4. 构建应用程序。 如果使用 .NET CLI,请运行 dotnet build。 若要在 Visual Studio 中生成,请按 Ctrl+Shift+B

  5. 将应用作为独立应用部署到 SBC。 有关说明,请参阅 将 .NET 应用部署到 Raspberry Pi。 请确保使用 .. 授予可执行文件chmod +x权限。

  6. 切换到部署目录并运行可执行文件,在 Raspberry Pi 上运行应用。

    ./LcdTutorial
    

    观察 LCD 字符显示器,当前时间应显示在每一行上。

    小提示

    如果显示器已亮起,但未看到任何文本,请尝试调整显示器背面的对比度拨号。

  7. Ctrl+C 终止程序。

祝贺! 你已使用 I2C 和 GPIO 扩展器在 LCD 上输出文本!

获取源代码

本教程的源码可以在 GitHub 上找到。

后续步骤