在 LCD 上顯示文字

在不需要外部監視器的情況下顯示資訊時,LCD 字元顯示會很有用。 常見的 LCD 字元顯示器可以直接連接到 GPIO 針腳,但這種方法需要使用最多 10 個 GPIO 針腳。 對於需要連線至裝置組合的案例,將太多 GPIO 連接器用於字元顯示通常不切實際。

許多製造商都販售 20x4 的 LCD 字元顯示器,其中包含整合式 GPIO 展開器。 字元顯示器會直接連接到 GPIO 展開器,然後透過內部整合電路 (I2C) 序列通訊協定連接到 Raspberry Pi。

在本主題中,您將使用 .NET,使用 I2C GPIO 展開器,在一個 LED 字元顯示器上顯示文字。

必要條件

注意

本教學課程是以 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 Foundation 所提供顯示 Raspberry Pi GPIO 連接器封裝接腳的圖表。
影像由 Raspberry Pi Foundation 提供

提示

建議將 GPIO 擴充板與試驗電路板搭配使用,以簡化 GPIO 連接器的連接。

建立應用程式

在慣用的開發環境中完成下列步驟:

  1. 使用 .NET CLIVisual Studio建立新的 .NET 主控台應用程式。 將其命名為 LcdTutorial

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Iot.Device.Bindings 套件新增至專案。 從專案目錄或Visual Studio使用.NET CLI

    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.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

下一步