在 LCD 上显示文本
LCD 字符显示器可用于显示信息,而无需外部监视器。 常见的 LCD 字符显示器可以直接连接到 GPIO 引脚,但这种方法最多需要使用 10 个 GPIO 引脚。 对于需要连接到设备组合的场景,将如此多的 GPIO 标头分配给字符显示器通常不切实际。
许多制造商会销售带有集成 GPIO 扩展器的 20x4 LCD 字符显示器。 字符显示器将直接连接到 GPIO 扩展器,然后通过内置集成电路 (I2C) 串行协议连接到 Raspberry Pi。
在本主题中,你将使用 .NET 通过 I2C GPIO 扩展器在 LCD 字符显示器上显示文本。
先决条件
- 基于 ARM(ARMv7 或更高版本)的单板计算机 (SBC)
- 带有 I2C 接口的 20x4 LCD 字符显示器
- 跳线
- 线路板(可选/推荐)
- Raspberry Pi GPIO 分线板(可选/推荐)
- .NET SDK 7 或更高版本
注意
本教程编写时假设目标设备是 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 |
---|---|
图片由 Raspberry Pi 基金会提供。 |
提示
建议将 GPIO 分组讨论板与试验板结合使用,以便简化与 GPIO 标头的连接。
创建应用
在首选开发环境中完成以下步骤:
使用 .NET CLI 或 Visual Studio 创建新 .Net 控制台应用。 将其命名为 LcdTutorial。
dotnet new console -o LcdTutorial cd LcdTutorial
将 Iot.Device.Bindings 包添加到项目。 使用项目目录或 Visual Studio 中的任一 .NET CLI。
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.Create
并传入带有busId
和deviceAddress
参数的新I2cConnectionSettings
来创建I2cDevice
的实例。 这个I2cDevice
表示 I2C 总线。using
声明可确保对象已处置,硬件资源已正确释放。警告
GPIO 扩展器的设备地址取决于制造商使用的芯片。 配备 PCF8574 芯片的 GPIO 扩展器使用地址
0x27
,而使用 PCF8574A 芯片的扩展器使用地址0x3F
。 请查阅你的 LCD 文档。另一个
using
声明创建Pcf8574
的实例,并将I2cDevice
传递到构造函数中。 此实例表示 GPIO 扩展器。另一个
using
声明创建Lcd2004
的实例以表示显示器。 多个参数已传递给构造函数,该构造函数描述用于与 GPIO 扩展器进行通信的设置。 GPIO 扩展器作为controller
参数传递。while
循环无限期运行。 每次迭代:- 清除显示器。
- 将光标位置设置为当前行的第一个位置。
- 将当前时间写入显示器上当前光标位置。
- 循环访问当前行计数器。
- 休眠 1000 毫秒。
构建应用程序。 如果使用的是 .NET CLI,请运行
dotnet build
。 若要在 Visual Studio 中进行生成,请按 Ctrl+Shift+B。将该应用作为独立应用部署到 SBC。 有关说明,请参阅将 .NET 应用部署到 Raspberry Pi。 请确保使用
chmod +x
指定可执行的 execute 权限。通过切换到部署目录并运行可执行文件,在 Raspberry Pi 上运行该应用。
./LcdTutorial
观察 LCD 字符显示器,当前时间应显示在每一行上。
提示
如果显示器已亮起,但看不到任何文本,请尝试调整显示器背面的对比度拨盘。
按 Ctrl+C 终止程序。
恭喜! 你已使用 I2C 和 GPIO 扩展器在 LCD 上显示了文本!
获取源代码
GitHub 上提供此教程的源。