Condividi tramite


Visualizzare testo su un LCD

Le visualizzazioni dei caratteri LCD sono utili per visualizzare le informazioni senza la necessità di un monitor esterno. I caratteri LCD comuni possono essere connessi direttamente ai pin GPIO, ma tale approccio richiede l'uso di fino a 10 pin GPIO. Per gli scenari che richiedono la connessione a una combinazione di dispositivi, dedicando così tanto all'intestazione GPIO a un display di caratteri è spesso impraticabile.

Molti produttori vendono i caratteri LCD 20x4 con un espansore GPIO integrato. La visualizzazione dei caratteri si connette direttamente all'espansore GPIO, che quindi si connette a Raspberry Pi tramite il protocollo seriale Inter-Integrated Circuit (I2C).

In questo argomento si userà .NET per visualizzare il testo in una visualizzazione di caratteri LCD usando un espansore I2C GPIO.

Prerequisiti

  • Computer a scheda singola (SBC) basato su ARM (ARMv7 o versione successiva)
  • Display carattere LCD 20x4 con interfaccia I2C
  • Cavi ponticello
  • Pane (facoltativo/consigliato)
  • Scheda di interruzione Raspberry Pi GPIO (facoltativa/consigliata)
  • .NET SDK 7 o versione successiva

Nota

Questa esercitazione viene scritta presupponendo che il dispositivo di destinazione sia Raspberry Pi. Questa esercitazione può tuttavia essere usata per qualsiasi SBC basato su Linux che supporta .NET, ad esempio Orange Pi, ODROID e altro ancora.

Nota

Ci sono molti produttori di display di caratteri LCD. La maggior parte dei progetti è identica e il produttore non deve fare alcuna differenza per la funzionalità. Per informazioni di riferimento, questa esercitazione è stata sviluppata con SunFounder LCD2004.

Preparare SBC

Assicurarsi che SBC sia configurato per supportare i servizi seguenti:

  • SSH
  • I2C

Per molti dispositivi, non è necessaria alcuna configurazione aggiuntiva. Per Raspberry Pi, usare il raspi-config comando . Per altre informazioni su raspi-config, vedere la documentazione di Raspberry Pi.

Preparare l'hardware

Usare i cavi jumper per connettere i quattro pin sul GPIO I2CPIO espansore a Raspberry Pi come indicato di seguito:

  • GND a terra
  • VCC a 5V
  • SDA a SDA (GPIO 2)
  • SCL to SCL (GPIO 3)

Fare riferimento alle figure seguenti in base alle esigenze:

Interfaccia I2C (retro dello schermo) Raspberry Pi GPIO
Immagine del retro del carattere visualizzato che mostra l'espansore GPIO I2C. Diagramma che mostra il pinout dell'intestazione Raspberry Pi GPIO. Immagine di Raspberry Pi Foundation.
Immagine di Raspberry Pi Foundation.

Suggerimento

È consigliabile semplificare le connessioni all'intestazione GPIO con una scheda di interruzione GPIO.

Creare l'app

Completare i passaggi seguenti nell'ambiente di sviluppo preferito:

  1. Creare una nuova app console .NET usando l'interfaccia della riga di comando .NET o Visual Studio. Denominarlo LcdTutorial.

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Aggiungere il pacchetto Iot.Device.Bindings al progetto. Usare l'interfaccia della riga di comando .NET dalla directory del progetto o da Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Sostituire il contenuto di Program.cs con il codice seguente:

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

    Nel codice precedente:

    • Una dichiarazione using crea un'istanza di I2cDevice chiamando I2cDevice.Create e passando un nuovo I2cConnectionSettings con i busId parametri e deviceAddress . Questo I2cDevice rappresenta il bus I2C. La using dichiarazione garantisce che l'oggetto venga eliminato e le risorse hardware vengano rilasciate correttamente.

      Avviso

      L'indirizzo del dispositivo per l'espansore GPIO dipende dal chip usato dal produttore. I espansori GPIO dotati di PCF8574 usano l'indirizzo 0x27, mentre quelli che usano chip PCF8574A 0x3Fusano . Consultare la documentazione di LCD.

    • Un'altra using dichiarazione crea un'istanza di Pcf8574 e passa l'oggetto I2cDevice nel costruttore. Questa istanza rappresenta l'espansore GPIO.

    • Un'altra using dichiarazione crea un'istanza di Lcd2004 per rappresentare la visualizzazione. Diversi parametri vengono passati al costruttore che descrive le impostazioni da usare per comunicare con l'espansore GPIO. Il espansore GPIO viene passato come controller parametro.

    • Un while ciclo viene eseguito in modo indefinito. Ogni iterazione:

      1. Cancella la visualizzazione.
      2. Imposta la posizione del cursore sulla prima posizione sulla riga corrente.
      3. Scrive l'ora corrente nella visualizzazione nella posizione del cursore corrente.
      4. Scorre il contatore della riga corrente.
      5. Dorme 1000 ms.
  4. Compilare l'app. Se si usa l'interfaccia della riga di comando .NET, eseguire dotnet build. Per compilare in Visual Studio, premere CTRL+MAIUSC+B.

  5. Distribuire l'app in SBC come app autonoma. Per istruzioni, vedere Distribuire app .NET in Raspberry Pi. Assicurarsi di concedere all'eseguibile l'autorizzazione di esecuzione usando chmod +x.

  6. Eseguire l'app in Raspberry Pi passando alla directory di distribuzione ed eseguendo il file eseguibile.

    ./LcdTutorial
    

    Osservare la visualizzazione dei caratteri LCD come ora corrente visualizzata su ogni riga.

    Suggerimento

    Se il display è acceso ma non viene visualizzato alcun testo, provare a regolare il quadrante del contrasto sul retro dello schermo.

  7. Terminare il programma premendo CTRL+C.

Congratulazioni! Hai visualizzato testo su un LCD usando un I2C e un espansore GPIO!

Ottenere il codice sorgente

L'origine per questa esercitazione è disponibile in GitHub.

Passaggi successivi