Partilhar via


Exibir texto em um LCD

Os monitores de caracteres LCD são úteis para exibir informações sem a necessidade de um monitor externo. Monitores de caracteres LCD comuns podem ser conectados diretamente aos pinos GPIO, mas tal abordagem requer o uso de até 10 pinos GPIO. Para cenários que exigem conexão com uma combinação de dispositivos, dedicar uma grande parte do cabeçalho GPIO a um display de caracteres é frequentemente impraticável.

Muitos fabricantes vendem ecrãs de caracteres LCD 20x4 com um expansor GPIO integrado. O ecrã de caracteres liga-se diretamente ao expander GPIO, que depois se liga ao Raspberry Pi através do protocolo serial Inter-Integrated Circuit (I2C).

Neste tópico, irá usar .NET para mostrar texto num ecrã LCD de caracteres usando um expansor GPIO I2C.

Pré-requisitos

Observação

Este tutorial foi escrito assumindo que o dispositivo alvo é o Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux que suporte .NET, como Orange Pi, ODROID e outros.

Observação

Existem muitos fabricantes de monitores de caracteres LCD. A maioria dos designs são idênticos, e o fabricante não deve fazer qualquer diferença para a funcionalidade. Para referência, este tutorial foi desenvolvido com o LCD2004 SunFounder.

Preparar o SBC

Certifique-se de que o SBC está configurado para suportar os seguintes serviços:

  • CHS
  • I2C

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

Preparar o hardware

Use fios jumper para ligar os quatro pinos do expansor GPIO I2C ao Raspberry Pi da seguinte forma:

  • GND à terra
  • VCC para 5V
  • SDA para SDA (GPIO 2)
  • SCL para SCL (GPIO 3)

Consulte as seguintes figuras, conforme necessário:

Interface I2C (parte de trás do ecrã) Raspberry Pi GPIO
Uma imagem da parte de trás do ecrã de caracteres a mostrar o expansor GPIO I2C. Um diagrama que mostra o pinout do cabeçalho GPIO do Raspberry Pi. Imagem cortesia da Raspberry Pi Foundation.
Imagem cortesia da Raspberry Pi Foundation.

Sugestão

Recomenda-se uma placa de breakout GPIO em conjunto com uma placa de ensaio para agilizar as conexões ao cabeçalho GPIO.

Criar a aplicação

Conclua as seguintes etapas em seu ambiente de desenvolvimento preferido:

  1. Crie uma nova aplicação de consola .NET usando .NET CLI ou Visual Studio. Chama-lhe LcdTutorial.

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

    dotnet package add Iot.Device.Bindings --version 4.1.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 ao chamar I2cDevice.Create e passar um novo I2cConnectionSettings com os parâmetros busId e deviceAddress. Isto I2cDevice representa o barramento I2C. A using declaração garante que o objeto é eliminado e que os recursos de hardware são devidamente libertados.

      Advertência

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

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

    • Outra using declaração cria uma instância de Lcd2004 para representar o ecrã. 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 parâmetro controller .

    • Um while loop corre indefinidamente. Cada iteração:

      1. Limpa o ecrã.
      2. Define a posição do cursor para a primeira posição na linha atual.
      3. Grava a hora atual na exibição na posição atual do cursor.
      4. Itera o contador de linha atual.
      5. Dorme 1000 ms.
  4. Crie o aplicativo. Se estiver a usar a CLI .NET, execute dotnet build. Para construir em Visual Studio, pressione Ctrl+Shift+B.

  5. Implante o aplicativo no SBC como um aplicativo independente. Para instruções, consulte Deploy .NET apps para Raspberry Pi. Certifique-se de dar permissão de execução ao executável usando chmod +x.

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

    ./LcdTutorial
    

    Observe o visor de caracteres LCD enquanto a hora atual é exibida em cada linha.

    Sugestão

    Se o ecrã estiver aceso mas não vir qualquer texto, tente ajustar o mostrador de contraste na parte traseira do ecrã.

  7. Termine o programa pressionando Ctrl+C.

Parabéns! Apresentaste texto num LCD usando um I2Ce um expansor GPIO!

Obter o código-fonte

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

Próximos passos