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)
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:
Reemplace el contenido de Program.cs por el código siguiente:
C#
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));
usingvar driver = new Pcf8574(i2c);
usingvar lcd = new Lcd2004(registerSelectPin: 0,
enablePin: 2,
dataPins: newint[] { 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 a I2cDevice.Create y pasa un nuevo objeto I2cConnectionSettings con los parámetros busId y deviceAddress. Este objeto I2cDevice representa el bus I2C. La declaración using 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 usan 0x3F. Consulte la documentación de la LCD.
Otra declaración using crea una instancia de Pcf8574 y pasa I2cDevice en el constructor. Esta instancia representa el expansor de GPIO.
Otra declaración using crea una instancia de Lcd2004 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ámetro controller.
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.
Bash
./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.
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.