共用方式為


在 LCD 上顯示文字

LCD 字元顯示器適用於顯示資訊,而不需要外部監視器。 常見的 LCD 字元顯示器可以直接連接到 GPIO 針腳,但這種方法需要使用最多 10 個 GPIO 針腳。 對於需要連接多種裝置的情況,將大量 GPIO 腳位用於字元顯示器通常是不切實際的。

許多製造商銷售整合了 GPIO 擴展器的 20x4 LCD 字元顯示器。 字元顯示會直接連接到 GPIO 展開器,然後透過 Inter-Integrated 線路 (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 Foundation 提供。
圖片由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 3.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.CreateI2cConnectionSettings 參數的新 busId,來建立deviceAddress的實例。 這 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 上取得

後續步驟