Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 pines GPIO, pero este enfoque requiere el uso de hasta 10 pines GPIO. En los escenarios que requieren conectarse a una combinación de dispositivos, dedicar tanta parte del encabezado GPIO a una pantalla de caracteres suele ser poco práctico.
Muchos fabricantes venden pantallas de caracteres LCD 20x4 con un expansor de GPIO integrado. La pantalla de caracteres se conecta directamente al expansador GPIO, que luego se conecta a Raspberry Pi a través del protocolo serie del circuito Inter-Integrated (I2C).
En este tema, usará .NET para mostrar texto en una pantalla de caracteres LCD mediante un expansor de GPIO I2C.
Prerrequisitos
- Equipo con placa única (ARMv7 o superior) basado en ARM (SBC)
- Pantalla de caracteres LCD de 20x4 con interfaz I2C
- Cables de puente
- Placa de navegación (opcional/recomendada)
- Placa de expansión GPIO de Raspberry Pi (opcional/recomendada)
- SDK de .NET 8 o posterior
Nota:
Este tutorial se escribe suponiendo que el dispositivo de destino sea Raspberry Pi. Sin embargo, este tutorial se puede usar para cualquier 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 debe marcar ninguna diferencia con la funcionalidad. Como referencia, este tutorial se desarrolló con el LCD2004 SunFounder.
Preparación del equipo SBC
Asegúrese de que el CLS está configurado para admitir los siguientes servicios:
- SSH
- I2C
Para muchos dispositivos, no se requiere ninguna configuración adicional. Para Raspberry Pi, use el raspi-config
comando . Para obtener más información sobre raspi-config
, consulte la documentación de Raspberry Pi.
Preparación del hardware
Utiliza cables puente para conectar los cuatro pines en el expansor GPIO I2C al Raspberry Pi de la siguiente manera:
- 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 siguientes cifras según sea necesario:
Interfaz I2C (parte posterior de la pantalla) | Raspberry Pi GPIO |
---|---|
![]() |
![]() Imagen cortesía 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 preferido:
Cree una aplicación de consola de .NET mediante la CLI de .NET o Visual Studio. Asígneles el nombre LcdTutorial.
dotnet new console -o LcdTutorial cd LcdTutorial
Agregue el paquete Iot.Device.Bindings al proyecto. Utilice la CLI de .NET desde el directorio del proyecto o Visual Studio.
dotnet add package Iot.Device.Bindings --version 3.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
. EstoI2cDevice
representa el bus I2C. Lausing
declaración garantiza que el objeto se elimina y los recursos de hardware se liberan correctamente.Advertencia
La dirección del dispositivo para el expansador GPIO depende del chip utilizado por el fabricante. Los expansores GPIO equipados con un PCF8574 usan la dirección
0x27
, mientras que los que usan chips de PCF8574A usan0x3F
. Consulte la documentación de su LCD.Otra declaración
using
crea una instancia dePcf8574
y pasaI2cDevice
en el constructor. Esta instancia representa el expansador GPIO.Otra
using
declaración crea una instancia deLcd2004
para representar la presentación. Se pasan varios parámetros al constructor que describe la configuración que se va a usar para comunicarse con el expansador GPIO. El expansor de GPIO se pasa como parámetrocontroller
.Un
while
bucle se ejecuta indefinidamente. Cada iteración:- Borra la pantalla.
- Establece la posición del cursor en la primera posición de la línea actual.
- 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.Despliegue la aplicación en el SBC como una aplicación autónoma. Para obtener instrucciones, consulte Implementación de aplicaciones .NET en Raspberry Pi. Asegúrese de conceder al ejecutable permiso de ejecución mediante
chmod +x
.Ejecute la aplicación en Raspberry Pi cambiando al directorio de implementación y ejecutando el 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á iluminada pero no ve ningún texto, intente ajustar el marcado de contraste en la parte posterior de la pantalla.
Para finalizar el programa, presione Ctrl+C.
¡Felicidades! Has mostrado texto en un LCD usando un I2C y un expansor GPIO.
Obtención del código fuente
El origen de este tutorial está disponible en GitHub.