Delen via


Tekst weergeven op een LCD-scherm

LCD-karakterbeeldschermen zijn handig voor het weergeven van informatie zonder de noodzaak van een extern beeldscherm. Gemeenschappelijke LCD-karakterbeeldschermen kunnen rechtstreeks worden aangesloten op de GPIO-pinnen, maar een dergelijke aanpak vereist het gebruik van maximaal 10 GPIO-pinnen. Voor scenario's waarbij verbinding moet worden gemaakt met een combinatie van apparaten, is het vaak onpraktisch om zoveel van de GPIO-header aan een tekenweergave te wijden.

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

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

Vereisten

Notitie

Deze zelfstudie is geschreven ervan uitgaande dat het doelapparaat 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 karakter displays. De meeste ontwerpen zijn identiek en de fabrikant mag geen verschil maken in de functionaliteit. Ter referentie: deze zelfstudie is ontwikkeld met de SunFounder LCD2004.

De SBC voorbereiden

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

  • SSH
  • I2C

Voor veel apparaten is geen aanvullende configuratie vereist. Voor Raspberry Pi gebruikt u de raspi-config opdracht . Raadpleeg de Raspberry Pi-documentatie voor meer informatie overraspi-config.

De hardware voorbereiden

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

  • GND op de grond
  • VCC naar 5V
  • SDA naar SDA (GPIO 2)
  • SCL naar SCL (GPIO 3)

Raadpleeg indien nodig de volgende cijfers:

I2C-interface (achterkant van beeldscherm) Raspberry Pi GPIO
Een afbeelding van de achterkant van de tekenweergave met het I2C GPIO-uitbreidingsprogramma. 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.

Tip

Een GPIO-breakoutboard 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 vanuit de projectmap of Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.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 een nieuwe I2cConnectionSettings aan te roepen I2cDevice.Create en door te geven met de busId parameters endeviceAddress. Dit I2cDevice vertegenwoordigt de I2C-bus. De using declaratie zorgt ervoor dat het object wordt verwijderd en hardwareresources correct worden vrijgegeven.

      Waarschuwing

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

    • Een andere using declaratie maakt een exemplaar van Pcf8574 en geeft de I2cDevice door aan de constructor. Dit exemplaar vertegenwoordigt het GPIO-uitbreidingsprogramma.

    • Met een andere using declaratie wordt een exemplaar van Lcd2004 gemaakt om de weergave weer te geven. Er worden verschillende parameters doorgegeven aan de constructor waarin de instellingen worden beschreven die moeten worden gebruikt om te communiceren met het GPIO-uitbreidingsprogramma. Het GPIO-uitbreidingsprogramma wordt doorgegeven als de controller parameter .

    • Een while lus wordt voor onbepaalde tijd uitgevoerd. Elke iteratie:

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

  5. Implementeer de app in de SBC als een zelfstandige app. Zie .NET-apps implementeren in Raspberry Pi voor instructies. Zorg ervoor dat u de uitvoerbare uitvoerbare uitvoermachtiging 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-tekenbeeldscherm zoals de huidige tijd op elke regel wordt weergegeven.

    Tip

    Als het beeldscherm brandt, maar u geen tekst ziet, past u de contrastknop aan de achterkant van het beeldscherm aan.

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

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

De broncode ophalen

De bron voor deze zelfstudie is beschikbaar op GitHub.

Volgende stappen