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
- ARM-basierter (ARMv7 oder höher) Single-Board-Computer (SBC)
- 20 x 4-LCD-Zeichenanzeige mit I2C-Schnittstelle
- Jumperdrähte
- Breadboard (optional/empfohlen)
- Raspberry Pi GPIO Breakout Board (optional/empfohlen)
- .NET SDK 7 oder höher
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 |
---|---|
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:
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
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-*
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
, indemI2cDevice.Create
aufgerufen und ein neuesI2cConnectionSettings
mitbusId
- dendeviceAddress
-Parametern und übergeben wird. Diese Instanz vonI2cDevice
stellt den I2C-Bus dar. Mit derusing
-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 Adresse0x3F
. Weitere Informationen finden Sie in der Dokumentation des LCD.Mit einer weiteren
using
-Deklaration wird eine Instanz vonPcf8574
erstellt und das ElementI2cDevice
an den Konstruktor übergeben. Diese Instanz stellt den GPIO-Expander dar.Eine andere
using
-Deklaration erstellt eine Instanz vonLcd2004
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 alscontroller
-Parameter übergeben.Eine
while
-Schleife wird ohne zeitliche Begrenzung ausgeführt. Bei jeder Iteration passiert Folgendes:- Löscht die Anzeige.
- Legt die Cursorposition auf die erste Position in der aktuellen Zeile fest.
- Schreibt die aktuelle Uhrzeit an der aktuellen Cursorposition in die Anzeige.
- Iteriert den aktuellen Linienzähler.
- Wartet 1000 ms lang ab.
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.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.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.
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.