Compartilhar via


Exibir texto em uma tela LCD

As telas de caracteres LCD são úteis para exibir informações sem a necessidade de um monitor externo. As telas de caracteres LCD comuns podem ser conectadas diretamente aos pinos GPIO. Porém, esse método requer o uso de até 10 pinos GPIO. Em situações que exigem a conexão com uma combinação de dispositivos, dedicar tanto espaço do cabeçalho GPIO a uma tela de caracteres normalmente é impraticável.

Muitos fabricantes vendem telas de caracteres LCD 20x4 com uma expansor GPIO integrado. A tela de caracteres se conecta diretamente ao expansor GPIO, que se conecta ao Raspberry Pi por meio do protocolo serial I2C.

Neste tópico, você usará o .NET para exibir texto em uma tela de caracteres LCD usando um expansor GPIO I2C.

Pré-requisitos

Observação

Este tutorial foi escrito supondo que o dispositivo de destino seja o Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux com suporte para .NET, como Orange Pi, ODROID e muito mais.

Observação

Há muitos fabricantes de telas de caracteres LCD. A maioria dos designs é idêntico e o fabricante não deve fazer nenhuma diferença na funcionalidade. Para referência, este tutorial foi desenvolvido com o SunFounder LCD2004.

Preparar o SBC

Verifique se o SBC está configurado para dar suporte aos seguintes serviços:

  • SSH
  • I2C

Para muitos dispositivos, nenhuma configuração adicional é necessária. Para Raspberry Pi, use o comando raspi-config. Para obter mais informações sobre raspi-config, consulte a Documentação do Raspberry Pi.

Preparar o hardware

Use fios de jumper para conectar os quatro pinos no expansor GPIO I2C ao Raspberry Pi da seguinte maneira:

  • GND ao aterramento
  • VCC a 5V
  • SDA a SDA (GPIO 2)
  • SLC a SLC (GPIO 3)

Confira os seguintes números conforme necessário:

Interface I2C (parte de trás da tela) GPIO do Raspberry Pi
Imagem da parte de trás da tela de caracteres mostrando o expansor GPIO I2C. Um diagrama mostrando a pinagem do cabeçalho GPIO do Raspberry Pi. Imagem cortesia da Fundação Raspberry Pi.
Imagem cortesia da Raspberry Pi Foundation.

Dica

Recomenda-se uma placa de fuga GPIO com uma placa de ensaio para simplificar as conexões com o cabeçalho GPIO.

Criar o aplicativo

Siga estas etapas em seu ambiente de desenvolvimento preferencial:

  1. Crie um aplicativo de console .NET usando a CLI do .NET ou o Visual Studio. Atribua a ele o nome LcdTutorial.

    dotnet new console -o LcdTutorial
    cd LcdTutorial
    
  2. Adicione o pacote Iot.Device.Bindings ao projeto. Use a CLI do .NET no diretório do projeto ou no Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Substitua o conteúdo do Program.cs pelo seguinte código:

    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);
    }
    

    No código anterior:

    • Uma declaração de uso cria uma instância de I2cDevice chamando I2cDevice.Create e passando um novo I2cConnectionSettings com os parâmetros busId e deviceAddress. O I2cDevice representa o barramento I2C. A declaração using garante que o objeto seja descartado e os recursos de hardware sejam liberados corretamente.

      Aviso

      O endereço do dispositivo para o expansor GPIO depende do chip usado pelo fabricante. Os expansores GPIO equipados com um PCF8574 usam o endereço 0x27, enquanto os com chips PCF8574A usam 0x3F. Confira a documentação do LCD.

    • Outra declaração using cria uma instância de Pcf8574 e passa I2cDevice para o construtor. Essa instância representa o expansor GPIO.

    • Outra declaração using cria uma instância de Lcd2004 para representar a tela. Vários parâmetros são passados para o construtor, descrevendo as configurações a serem usadas para se comunicar com o expansor GPIO. O expansor GPIO é passado como o parâmetro controller.

    • Um loop de while é executado indefinidamente. Cada iteração:

      1. Limpa a tela.
      2. Define a posição do cursor como a primeira posição na linha atual.
      3. Escreve a hora atual na tela na posição atual do cursor.
      4. Itera o contador de linha atual.
      5. Entra em modo de suspensão após 1000 ms.
  4. Crie o aplicativo. Ao usar a CLI do .NET, execute dotnet build. Para criar no Visual Studio, pressione Ctrl+Shift+B.

  5. Implante o aplicativo no SBC como um aplicativo autônomo. Para obter instruções, confira Implantar aplicativos .NET no Raspberry Pi . Dê a permissão de execução ao executável usando chmod +x.

  6. Execute o aplicativo no Raspberry Pi alternando para o diretório de implantação e executando o executável.

    ./LcdTutorial
    

    Observe na tela de caracteres LCD como a hora atual é exibida em cada linha.

    Dica

    Se a tela estiver ligada, mas nenhum texto aparecer, tente ajustar o mostrador de contraste na parte de trás da tela.

  7. Encerre o programa pressionando Ctrl+C.

Parabéns! Você exibiu texto em um LCD usando um I2C e um expansor GPIO.

Obter o código-fonte

A fonte deste tutorial está disponível no GitHub.

Próximas etapas