Delen via


Tekst weergeven op een LCD

LCD-tekenweergaven zijn handig voor het weergeven van informatie zonder dat er een externe monitor nodig is. Algemene LCD-tekenschermen kunnen rechtstreeks worden aangesloten op de GPIO-pinnen, maar een dergelijke benadering vereist het gebruik van maximaal 10 GPIO-pinnen. Voor scenario's waarin verbinding moet worden gemaakt met een combinatie van apparaten, is het toewijzen van zoveel van de GPIO-header aan een karakterweergave vaak niet praktisch.

Veel fabrikanten verkopen 20x4 LCD-karakterschermen met een geïntegreerde GPIO-uitbreiding. Het tekenscherm maakt rechtstreeks verbinding met de GPIO-expander, die vervolgens via het seriële protocol Inter-Integrated Circuit (I2C) verbinding maakt met de Raspberry Pi.

In dit onderwerp gebruikt u .NET om tekst weer te geven op een LCD-tekenweergave met behulp van een I2C GPIO-uitbreiding.

Vereiste voorwaarden

Notitie

Deze handleiding is geschreven, ervan uitgaande dat het doelapparaat een Raspberry Pi is. Deze zelfstudie kan echter worden gebruikt voor elke linux-SBC die .NET ondersteunt, zoals Orange Pi, ODROID en meer.

Notitie

Er zijn veel fabrikanten van LCD-karakterschermen. De meeste ontwerpen zijn identiek en de fabrikant mag geen verschil maken met de functionaliteit. Ter referentie is deze zelfstudie ontwikkeld met de SunFounder LCD2004.

De SBC voorbereiden

Zorg ervoor dat uw SBC is geconfigureerd ter ondersteuning van de volgende services:

  • SSH
  • I2C

Voor veel apparaten is geen extra configuratie vereist. Gebruik de raspi-config opdracht voor Raspberry Pi. Raadpleeg de raspi-config voor meer informatie.

De hardware voorbereiden

Gebruik jumperdraden om de vier pinnen op de I2C GPIO-expander als volgt te verbinden met de Raspberry Pi:

  • GND naar aarde
  • VCC naar 5V
  • SDA naar SDA (GPIO 2)
  • SCL naar SCL (GPIO 3)

Raadpleeg indien nodig de volgende cijfers:

I2C interface (achterzijde van het display) Raspberry Pi GPIO
Een afbeelding van de achterkant van het tekenscherm met de I2C GPIO-uitbreiding. Een diagram met de pinout van de Raspberry Pi GPIO-header. Afbeelding met dank aan Raspberry Pi Foundation.
Afbeelding met dank aan Raspberry Pi Foundation.

Hint

Een GPIO-breakoutbord in combinatie met een breadboard wordt aanbevolen om verbindingen met de GPIO-header te stroomlijnen.

De app maken

Voer de volgende stappen uit in de ontwikkelomgeving van uw voorkeur:

  1. Maak een nieuwe .NET-console-app met behulp van de .NET CLI of Visual Studio. Noem het LcdTutorial.

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Voeg het pakket Iot.Device.Bindings toe aan het project. Gebruik .NET CLI uit de projectmap of Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Vervang de inhoud van Program.cs door de volgende 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);
    }
    

    In de voorgaande code:

    • Een using-declaratie maakt een exemplaar van I2cDevice door het aanroepen I2cDevice.Create en doorgeven van een nieuw I2cConnectionSettings exemplaar met de busId en deviceAddress parameters. Dit I2cDevice vertegenwoordigt de I2C-bus. De using declaratie zorgt ervoor dat het object wordt verwijderd en hardwarebronnen correct worden vrijgegeven.

      Waarschuwing

      Het apparaatadres voor de GPIO-uitbreiding is afhankelijk van de chip die door de fabrikant wordt gebruikt. GPIO-expanders uitgerust met een PCF8574 gebruiken het adres 0x27, terwijl degenen die gebruikmaken van de PCF8574A-chips het adres 0x3F gebruiken. Raadpleeg de documentatie van uw LCD.

    • Met een andere using-declaratie wordt een exemplaar van Pcf8574 gemaakt en wordt de I2cDevice doorgegeven aan de constructor. Dit exemplaar vertegenwoordigt de GPIO-uitbreiding.

    • Met een andere using declaratie wordt een exemplaar van Lcd2004 aangemaakt om de weergave te representeren. Er worden verschillende parameters doorgegeven aan de constructor die de instellingen beschrijft die moeten worden gebruikt om te communiceren met de GPIO-uitbreiding. De GPIO-uitbreiding wordt doorgegeven als de controller parameter.

    • Een while lus draait oneindig. Elke iteratie:

      1. Hiermee wordt het scherm gewist.
      2. Hiermee stelt u de cursorpositie in op de eerste positie op de huidige regel.
      3. Hiermee schrijft u de huidige tijd naar de weergave op de huidige cursorpositie.
      4. Hiermee wordt de huidige regelteller herhaald.
      5. Wacht 1000 milliseconden.
  4. Bouw de app. Als u de .NET CLI gebruikt, voert u het volgende uit dotnet build. Druk op Ctrl+Shift+B om te bouwen in Visual Studio.

  5. Implementeer de app als een zelfstandige app in de SBC. Zie .NET-apps implementeren in Raspberry Pi voor instructies. Zorg ervoor dat u de uitvoerbare uitvoerbaar bestand uitvoeringsrechten geeft met behulp van chmod +x.

  6. Voer de app uit op de Raspberry Pi door over te schakelen naar de implementatiemap en het uitvoerbare bestand uit te voeren.

    ./LcdTutorial
    

    Bekijk het LCD-karakterdisplay terwijl de huidige tijd op elke regel wordt weergegeven.

    Hint

    Als de weergave is verlicht, maar er geen tekst wordt weergegeven, kunt u proberen de contrastkiezer aan de achterkant van de weergave aan te passen.

  7. Beëindig het programma door op Ctrl+C te drukken.

Gefeliciteerd! U hebt tekst op een LCD weergegeven met behulp van een I2C en een GPIO-uitbreiding!

De broncode ophalen

De bron voor deze zelfstudie is beschikbaar op GitHub.

Volgende stappen