Anzeigen von Text in einem LC-Display

LCD-Zeichen sind zum Anzeigen von Informationen nützlich, ohne dass ein externer Monitor erforderlich ist. Gängige LCD-Zeichen können direkt mit den GPIO-Pins verbunden werden, jedoch erfordert ein solcher Ansatz die Verwendung von bis zu 10 GPIO-Pins. Szenarios, die eine Verbindung mit einer Kombination von Geräten erfordern, sind häufig nicht praktikabel.

Viele Hersteller verkaufen 20 x 4 LCD-Zeichenanzeigen mit einem integrierten GPIO-Expander. Die Zeichenanzeige stellt eine direkte Verbindung mit dem GPIO-Expander her, der dann über das serielle Protokoll der Inter-Integrated Leitung (I2C) eine Verbindung mit dem Raspberry Pi herstellt.

Bei diesem Thema werden Sie .NET zum Anzeigen von Text auf einer LCD-Zeichenanzeige mithilfe eines I2C-GPIO-Expander verwenden.

Voraussetzungen

Hinweis

Dieses Tutorial wurde unter der Annahme geschrieben, dass das Zielgerät ein Raspberry Pi ist. Dieses Tutorial kann jedoch für jeden Linux-basierten SBC verwendet werden, der .NET unterstützt, z. B. Orange Pi, ODROID und mehr.

Hinweis

Es gibt viele Hersteller von LCD-Zeichenanzeigen. Die meisten Designs sind identisch, und der Hersteller sollte keinen Unterschied zu den Funktionen machen. Als Referenz wurde dieses Lernprogramm mit dem SunFounder LCD2004entwickelt.

Vorbereiten des SBC

Stellen Sie sicher, dass Ihr SBC für die Unterstützung der folgenden Dienste konfiguriert ist:

  • SSH
  • I2C

Bei vielen Geräten ist keine weitere Konfiguration erforderlich. Verwenden Sie bei einem Raspberry Pi den raspi-config-Befehl. Weitere Informationen zu raspi-config finden Sie in der Dokumentation für Raspberry Pi.

Vorbereiten der Hardware

Verbinden Sie die vier Pins auf dem I2C-GPIO-Expander mit dem Raspberry PI mithilfe von Jumper-Drähten wie folgt:

  • GND zu Erde
  • VCC zu 5V
  • SDA zu SDA (GPIO 2)
  • SCL zu SCL (GPIO 3)

Weitere Informationen finden Sie in den folgenden Abbildungen:

I2C-Schnittstelle (Rückseite der Anzeige) Raspberry Pi GPIO
Ein Bild der Rückseite der Zeichenanzeige, das den I2C-GPIO-Expander zeigt. Anschlussdiagramm: Raspberry Pi GPIO-Header. Bild mit freundlicher Genehmigung der Raspberry Pi Foundation.
Bild mit freundlicher Genehmigung der Raspberry Pi Foundation.

Tipp

Ein GPIO-Breakout-Board in Verbindung mit einer Steckplatine wird empfohlen, um die Verbindungen zum GPIO-Header zu optimieren.

Erstellen der App

Führen Sie in Ihrer bevorzugten Entwicklungsumgebung die folgenden Schritte aus:

  1. Erstellen Sie eine neue .NET-Konsolen-App, indem Sie entweder die .NET-CLI oder Visual Studio verwenden. Nennen Sie sie LcdTutorial.

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Fügen Sie das Paket Iot.Device.Bindings in das Projekt ein. Verwenden Sie entweder .NET CLI aus dem Projektverzeichnis oder Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code:

    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);
    }
    

    Für den Code oben gilt:

    • Eine using-Deklaration erstellt eine Instanz von I2cDevice, indem I2cDevice.Create aufgerufen und ein neues I2cConnectionSettings mit busId- den deviceAddress-Parametern und übergeben wird. Diese Instanz von I2cDevice stellt den I2C-Bus dar. Mit der using-Deklaration wird sichergestellt, dass das Objekt verworfen wird und die Hardwareressourcen richtig freigegeben werden.

      Warnung

      Die Geräteadresse für den GPIO-Expander hängt von dem vom Hersteller verwendeten Chip ab. Bei GPIO-Expander, der mit einem PCF8574 ausgestattet ist, wird die 0x27-Adresse verwendet, bei der Verwendung von PCF8574A-Chips die Adresse 0x3F. Weitere Informationen finden Sie in der Dokumentation des LCD.

    • Mit einer weiteren using-Deklaration wird eine Instanz von Pcf8574 erstellt und das Element I2cDevice an den Konstruktor übergeben. Diese Instanz stellt den GPIO-Expander dar.

    • Eine andere using-Deklaration erstellt eine Instanz von Lcd2004 zur Darstellung der Anzeige. Es werden mehrere Parameter an den Konstruktor übergeben, die die Einstellungen beschreiben, die für die Kommunikation mit dem GPIO-Expander verwendet werden sollen. Der GPIO-Expander wird als controller-Parameter übergeben.

    • Eine while-Schleife wird ohne zeitliche Begrenzung ausgeführt. Bei jeder Iteration passiert Folgendes:

      1. Löscht die Anzeige.
      2. Legt die Cursorposition auf die erste Position in der aktuellen Zeile fest.
      3. Schreibt die aktuelle Uhrzeit an der aktuellen Cursorposition in die Anzeige.
      4. Iteriert den aktuellen Linienzähler.
      5. Wartet 1000 ms lang ab.
  4. Erstellen Sie die App. Führen Sie dotnet build aus, wenn Sie die .NET-CLI verwenden. Drücken Sie STRG+UMSCHALT+B, um die App in Visual Studio zu kompilieren.

  5. Stellen Sie die App auf dem SBC als eigenständige App bereit. Anweisungen hierzu finden Sie unter Bereitstellen von .NET-Apps auf einem Raspberry Pi-Gerät. Erteilen Sie dabei mithilfe von chmod +x die execute-Berechtigung für ausführbare Dateien.

  6. Führen Sie die App auf dem Raspberry Pi aus, indem Sie zum Bereitstellungsverzeichnis wechseln und die ausführbare Datei ausführen.

    ./LcdTutorial
    

    Sehen Sie sich die LCD-Zeichenanzeige an, wenn die aktuelle Uhrzeit in jeder Zeile angezeigt wird.

    Tipp

    Wenn die Anzeige beleuchtet ist, aber kein Text angezeigt wird, versuchen Sie, die Kontrastauswahloption auf der Rückseite der Anzeige anzupassen.

  7. Beenden Sie das Programm, indem Sie STRG+C drücken.

Glückwunsch! Sie haben einen Text auf einem LCD mit einem I2C und einem GPIO-Expander angezeigt!

Herunterladen des Quellcodes

Der Quellcode für dieses Tutorial ist auf GitHub verfügbar.

Nächste Schritte