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
- SBC (computador de placa única) baseado em ARM (ARMv7 ou superior)
- Tela de caracteres LCD 20x4 com interface I2C
- Cabos de jumper
- Breadboard (opcional/recomendado)
- Placa de breakout Raspberry Pi GPIO (opcional/recomendado)
- .NET SDK 7 ou posterior
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 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:
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
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-*
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
chamandoI2cDevice.Create
e passando um novoI2cConnectionSettings
com os parâmetrosbusId
edeviceAddress
. OI2cDevice
representa o barramento I2C. A declaraçãousing
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 usam0x3F
. Confira a documentação do LCD.Outra declaração
using
cria uma instância dePcf8574
e passaI2cDevice
para o construtor. Essa instância representa o expansor GPIO.Outra declaração
using
cria uma instância deLcd2004
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âmetrocontroller
.Um loop de
while
é executado indefinidamente. Cada iteração:- Limpa a tela.
- Define a posição do cursor como a primeira posição na linha atual.
- Escreve a hora atual na tela na posição atual do cursor.
- Itera o contador de linha atual.
- Entra em modo de suspensão após 1000 ms.
Crie o aplicativo. Ao usar a CLI do .NET, execute
dotnet build
. Para criar no Visual Studio, pressione Ctrl+Shift+B.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
.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.
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.