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 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:
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
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-*
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
chiamandoI2cDevice.Create
e passando un nuovoI2cConnectionSettings
con ibusId
parametri edeviceAddress
. QuestoI2cDevice
rappresenta il bus I2C. Lausing
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 PCF8574A0x3F
usano . Consultare la documentazione di LCD.Un'altra
using
dichiarazione crea un'istanza diPcf8574
e passa l'oggettoI2cDevice
nel costruttore. Questa istanza rappresenta l'espansore GPIO.Un'altra
using
dichiarazione crea un'istanza diLcd2004
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 comecontroller
parametro.Un
while
ciclo viene eseguito in modo indefinito. Ogni iterazione:- Cancella la visualizzazione.
- Imposta la posizione del cursore sulla prima posizione sulla riga corrente.
- Scrive l'ora corrente nella visualizzazione nella posizione del cursore corrente.
- Scorre il contatore della riga corrente.
- Dorme 1000 ms.
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.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
.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.
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.