Dela via


Visa text på en LCD-skärm

LCD-teckenskärmar är användbara för att visa information utan behov av en extern bildskärm. Vanliga LCD-teckenskärmar kan anslutas direkt till GPIO-stiften, men en sådan metod kräver att upp till 10 GPIO-stift används. För scenarier som kräver anslutning till en kombination av enheter är det ofta opraktiskt att ägna så mycket av GPIO-huvudet åt en teckenvisning.

Många tillverkare säljer 20x4 LCD-teckenskärmar med en integrerad GPIO-expanderare. Teckenvisningen ansluter direkt till GPIO-expanderaren, som sedan ansluter till Raspberry Pi via serieprotokollet Inter-Integrated Circuit (I2C).

I det här avsnittet använder du .NET för att visa text på en LCD-teckenskärm med hjälp av en I2C GPIO-expanderare.

Förutsättningar

Anteckning

Den här självstudien skrivs förutsatt att målenheten är Raspberry Pi. Den här självstudien kan dock användas för alla Linux-baserade SBC som stöder .NET, till exempel Orange Pi, ODROID med mera.

Anteckning

Det finns många tillverkare av LCD-teckenskärmar. De flesta designer är identiska och tillverkaren bör inte göra någon skillnad för funktionaliteten. Som referens utvecklades den här självstudien med SunFounder LCD2004.

Förbereda SBC

Se till att din SBC är konfigurerad för att stödja följande tjänster:

  • SSH
  • I2C

För många enheter krävs ingen ytterligare konfiguration. Använd kommandot för raspi-config Raspberry Pi. Mer information om raspi-configfinns i Raspberry Pi-dokumentationen.

Förbereda maskinvaran

Använd bygeltrådar för att ansluta de fyra stiften på I2C GPIO-expanderaren till Raspberry Pi enligt följande:

  • GND till marken
  • VCC till 5V
  • SDA till SDA (GPIO 2)
  • SCL till SCL (GPIO 3)

Se följande siffror efter behov:

I2C-gränssnitt (baksidan av displayen) Raspberry Pi GPIO
En bild av baksidan av teckenskärmen som visar I2C GPIO-expanderaren. Ett diagram som visar pinouten för Raspberry Pi GPIO-huvudet. Bild med tillstånd Raspberry Pi Foundation.
Bild med tillstånd Raspberry Pi Foundation.

Tips

En GPIO-utbrytningstavla tillsammans med en brödbräda rekommenderas för att effektivisera anslutningarna till GPIO-huvudet.

Skapa appen

Slutför följande steg i önskad utvecklingsmiljö:

  1. Skapa en ny .NET-konsolapp med antingen .NET CLI eller Visual Studio. Ge den namnet LcdTutorial.

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Lägg till paketet Iot.Device.Bindings i projektet. Använd antingen .NET CLI från projektkatalogen eller Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Ersätt innehållet i Program.cs med följande kod:

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

    I koden ovan:

    • En användningsdeklaration skapar en instans av I2cDevice genom att anropa I2cDevice.Create och skicka in en ny I2cConnectionSettings med parametrarna busId och deviceAddress . Detta I2cDevice representerar I2C-bussen. Deklarationen using säkerställer att objektet tas bort och att maskinvaruresurser släpps korrekt.

      Varning

      Enhetsadressen för GPIO-expanderaren beror på vilket chip som används av tillverkaren. GPIO-expanderare som är utrustade med en PCF8574 använder adressen 0x27, medan de som använder PCF8574A-chips använder 0x3F. Läs lcd-dokumentationen.

    • En annan using deklaration skapar en instans av Pcf8574 och skickar I2cDevice den till konstruktorn. Den här instansen representerar GPIO-expanderaren.

    • En annan using deklaration skapar en instans av Lcd2004 för att representera visningen. Flera parametrar skickas till konstruktorn som beskriver de inställningar som ska användas för att kommunicera med GPIO-expanderaren. GPIO-expanderaren skickas som parameter.controller

    • En while loop körs på obestämd tid. Varje iteration:

      1. Rensar skärmen.
      2. Anger markörens position till den första positionen på den aktuella raden.
      3. Skriver aktuell tid till visningen vid den aktuella markörens position.
      4. Itererar den aktuella radräknaren.
      5. Rymmer 1 000 ms.
  4. Skapa appen. Om du använder .NET CLI kör du dotnet build. Om du vill skapa i Visual Studio trycker du på Ctrl+Skift+B.

  5. Distribuera appen till SBC som en fristående app. Anvisningar finns i Distribuera .NET-appar till Raspberry Pi. Se till att ge den körbara körningsbehörigheten med hjälp av chmod +x.

  6. Kör appen på Raspberry Pi genom att växla till distributionskatalogen och köra den körbara filen.

    ./LcdTutorial
    

    Observera LCD-teckenvisningen när den aktuella tiden visas på varje rad.

    Tips

    Om skärmen är tänd men du inte ser någon text kan du prova att justera kontrastratten på baksidan av skärmen.

  7. Avsluta programmet genom att trycka på Ctrl+C.

Grattis! Du har visat text på en LCD-skärm med en I2C och en GPIO-expanderare!

Hämta källkoden

Källan för den här självstudien är tillgänglig på GitHub.

Nästa steg