Mostrar texto en una pantalla LCD
Las pantallas de caracteres LCD son útiles para mostrar información sin necesidad de un monitor externo. Las pantallas de caracteres LCD comunes se pueden conectar directamente a los pin de GPIO, pero para este enfoque es necesario usar hasta 10 pines de GPIO. En escenarios en los que sea necesaria la conexión a una combinación de dispositivos, dedicar tanta cantidad del encabezado GPIO a una pantalla de caracteres no suele ser práctico.
Muchos fabricantes venden pantallas de caracteres LCD 20x4 con un expansor de GPIO integrado. La pantalla de caracteres se conecta directamente al expansor de GPIO, que luego se conecta a las Raspberry Pi por medio del protocolo serial de circuito inter-integrado (I2C).
En este tema, usará .NET para mostrar texto en una pantalla de caracteres LCD mediante un expansor de GPIO I2C.
Requisitos previos
- Equipo de placa única (SBC) basado en ARM (ARMv7 o superior)
- Pantalla de caracteres LCD de 20x4 con interfaz I2C
- Cables de puente
- Placa de pruebas (opcional/recomendada)
- Placa adaptadora GPIO de Raspberry Pi (opcional/recomendada)
- SDK de .NET 7 o versiones posteriores
Nota
En este tutorial, se presupone que el dispositivo de destino es Raspberry Pi. Sin embargo, se puede usar con cualquier equipo SBC basado en Linux que admita .NET, como Orange Pi, ODROID, etc.
Nota
Hay muchos fabricantes de pantallas de caracteres LCD. La mayoría de los diseños son idénticos y el fabricante no debería suponer ninguna diferencia con respecto a la funcionalidad. Como referencia, este tutorial se ha desarrollado con SunFounder LCD2004.
Preparación del equipo de placa única
Asegúrese de que el equipo de placa única esté configurado para admitir estos servicios:
- SSH
- I2C
En muchos dispositivos, no se requiere ninguna configuración adicional. En Raspberry Pi, use el comando raspi-config
. Para obtener más información sobre raspi-config
, consulte la documentación de Raspberry Pi.
Preparación del hardware
Use cables de puente para conectar los cuatro pines del expansor de GPIO de I2C a la Raspberry Pi como se indica a continuación:
- De DGND a la toma de tierra
- De VCC a 5V
- De SDA a SDA (GPIO 2)
- De SCL a SCL (GPIO 3)
Consulte las figuras siguientes según sea necesario:
Interfaz I2C (parte posterior de la pantalla) | GPIO de Raspberry Pi |
---|---|
Imagen de Raspberry Pi Foundation. |
Sugerencia
Se recomienda una placa de pruebas de GPIO junto con una placa para optimizar las conexiones con el encabezado de GPIO.
Creación de la aplicación
Complete los pasos siguientes en el entorno de desarrollo que prefiera:
Cree una aplicación de consola de .NET mediante la CLI de .NET o Visual Studio. Asígnele el nombre LcdTutorial.
dotnet new console -o LcdTutorial cd LcdTutorial
Agregue el paquete Iot.Device.Bindings al proyecto. Use la CLI de .NET desde el directorio del proyecto o Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Reemplace el contenido de Program.cs por el código siguiente:
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); }
En el código anterior:
Una declaración using crea una instancia de
I2cDevice
mediante la llamada aI2cDevice.Create
y pasa un nuevo objetoI2cConnectionSettings
con los parámetrosbusId
ydeviceAddress
. Este objetoI2cDevice
representa el bus I2C. La declaraciónusing
garantiza que el objeto se deseche y que los recursos de hardware se liberen correctamente.Advertencia
La dirección del dispositivo para el expansor de GPIO depende del chip que use el fabricante. Los expansores de GPIO equipados con PCF8574 usan la dirección
0x27
, mientras que los que utilizan chips PCF8574A usan0x3F
. Consulte la documentación de la LCD.Otra declaración
using
crea una instancia dePcf8574
y pasaI2cDevice
en el constructor. Esta instancia representa el expansor de GPIO.Otra declaración
using
crea una instancia deLcd2004
para representar la pantalla. Se pasan varios parámetros al constructor que describen la configuración que se va a usar para comunicarse con el expansor de GPIO. El expansor de GPIO se pasa como parámetrocontroller
.Se ejecuta un bucle
while
indefinidamente. En cada iteración:- Se borra la pantalla.
- Se establece la posición del cursor en la primera posición de la línea actual.
- Se escribe la hora actual en la pantalla, en la posición actual del cursor.
- Se itera el contador de línea actual.
- Se suspende durante 1000 ms.
Compile la aplicación. Si usa la CLI de .NET, ejecute
dotnet build
. Para realizar la compilación en Visual Studio, presione Ctrl+Mayús+B.Implemente la aplicación en el equipo de placa única como una aplicación independiente. Para obtener instrucciones, vea Implementación de aplicaciones .NET en Raspberry Pi. Asegúrese de conceder el permiso execute ejecutable mediante
chmod +x
.Para ejecutar la aplicación en Raspberry Pi, cambie al directorio de implementación y ejecute el archivo ejecutable.
./LcdTutorial
Observe la pantalla de caracteres LCD a medida que se muestra la hora actual en cada línea.
Sugerencia
Si la pantalla está encendida, pero no ve ningún texto, intente ajustar el contraste en la parte posterior.
Presione Ctrl+C para finalizar el programa.
¡Enhorabuena! Ha mostrado texto en una pantalla LCD con I2C y un expansor de GPIO.
Obtención del código fuente
El código fuente de este tutorial está disponible en GitHub.