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

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 la parte trasera de la pantalla de caracteres en la que se muestra el expansor de GPIO I2C. Diagrama en el que se muestran los pines del encabezado GPIO de Raspberry Pi. Imagen de Raspberry Pi Foundation.
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:

  1. 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
    
  2. 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-*
    
  3. 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 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:

      1. Se borra la pantalla.
      2. Se establece la posición del cursor en la primera posición de la línea actual.
      3. Se escribe la hora actual en la pantalla, en la posición actual del cursor.
      4. Se itera el contador de línea actual.
      5. Se suspende durante 1000 ms.
  4. 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.

  5. 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.

  6. 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.

  7. 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.

Pasos siguientes