Condividi tramite


Visualizzare testo su un LCD

Gli schermi dei caratteri LCD sono utili per visualizzare informazioni senza la necessità di un monitor esterno. I display di caratteri LCD comuni possono essere collegati direttamente ai pin GPIO, ma tale approccio richiede l'uso di un massimo di 10 pin GPIO. Per gli scenari che richiedono la connessione a una combinazione di dispositivi, dedicare gran parte dell'intestazione GPIO a un display di caratteri è spesso poco pratico.

Molti produttori vendono display con 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 testo in una visualizzazione di caratteri LCD usando un espansore GPIO I2C.

Prerequisiti

  • Computer basato su ARM (ARMv7 o versione successiva) a scheda singola (SBC)
  • Display a caratteri LCD 20x4 con interfaccia I2C
  • Cavetti di collegamento
  • Piastra di prototipazione (facoltativo/consigliato)
  • Scheda di interfaccia Raspberry Pi GPIO (facoltativa/consigliata)
  • .NET SDK 8 o versione successiva

Annotazioni

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

Annotazioni

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à. Come riferimento, questa esercitazione è stata sviluppata con il SunFounder LCD2004.

Preparare il SBC

Verificare che il 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 del jumper per collegare i quattro pin sull'espansore GPIO I2C al Raspberry Pi come indicato di seguito:

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

Fare riferimento alle figure seguenti in base alle esigenze:

Interfaccia I2C (posteriore dello schermo) Raspberry Pi GPIO
Immagine della parte posteriore della visualizzazione dei caratteri che mostra l'espansore GPIO I2C. Un diagramma che mostra il pinout del connettore GPIO del Raspberry Pi. Immagine per gentile concessione di Raspberry Pi Foundation.
Immagine per gentile concessione Raspberry Pi Foundation.

Suggerimento

Per semplificare le connessioni all'intestazione GPIO, è consigliabile usare una scheda breakout GPIO insieme a una breadboard.

Creare l'app

Completare i passaggi seguenti nell'ambiente di sviluppo preferito:

  1. Creare una nuova app console .NET utilizzando il CLI di .NET o Visual Studio. Denominarlo LcdTutorial.

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Aggiungere il pacchetto Iot.Device.Bindings al progetto. Usare .NET CLI dalla directory del progetto o Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.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 oggetto I2cConnectionSettings con i parametri busId e deviceAddress. Questo I2cDevice rappresenta l'autobus I2C. La using dichiarazione garantisce che l'oggetto venga eliminato e che le risorse hardware vengano rilasciate correttamente.

      Avvertimento

      L'indirizzo del dispositivo per l'espansore GPIO dipende dal chip usato dal produttore. I espansori GPIO dotati di un PCF8574 usano l'indirizzo 0x27, mentre quelli che usano chip PCF8574A usano 0x3F. Consultare la documentazione dell'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. L'espansore GPIO viene passato come controller parametro.

    • Un while ciclo viene eseguito per un periodo illimitato. 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 in corrispondenza della posizione corrente del cursore.
      4. Incrementa il contatore della linea corrente.
      5. Attende 1000 millisecondi.
  4. Compilazione dell'app. Se si usa l'interfaccia della riga di comando di .NET, eseguire dotnet build. Per compilare in Visual Studio, premere Ctrl+Shift+B.

  5. Distribuire l'app nel 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 il display dei caratteri LCD mentre l'ora corrente viene mostrata su ciascuna riga.

    Suggerimento

    Se lo schermo è acceso ma non viene visualizzato alcun testo, provare a regolare la composizione del contrasto sul retro dello schermo.

  7. Terminare il programma premendo CTRL+C.

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

Ottenere il codice sorgente

La sorgente per questa esercitazione è disponibile su GitHub.

Passaggi successivi