Raspberry Pi - Display LCD com Python

Introdução

 

Este artigo apresentará uma breve teoria sobre display de LCD, quais são os seus modos de utilização, como realizar as conexões com a Raspberry Pi e principalmente como desenvolver um código em linguagem Python de forma que se consiga utilizar todos os recursos disponíveis neste componente tão importante em sistemas embarcados.

 

Ao final da leitura, aplicando os conceitos teóricos e práticos apresentados sobre o display de LCD na Raspberry Pi, o leitor será capaz de realizar os seus próprios projetos e aplicações com o dispositivo.

 

Este artigo dá continuidade à série de artigos sobre entrada e saída de dados e utilização do PWM publicado pelo Cleiton Bueno e por mim, Roniere Rezende.

 

 

O que é um Display de LCD

 

O display de LCD é uma interface de comunicação visual alfanumérica muito utilizada em diversos equipamentos eletrônicos, como equipamentos industriais, eletrodomésticos, brinquedos e muitos outros. Abaixo é mostrado um exemplo desse dispositivo.

 

Display de LCD
Figura 1 - Display de LCD

 

Eles podem ser especificados pelo número de caracteres que podem existir em cada linha e também pelo número de linhas.  Por exemplo 16x2, 20x2, 40x4, entre outros.

 

Existem dois modos de se conectar e configurar o display de LCD à Raspberry Pi: modo 8 bits, que utiliza 10 portas GPIO para se realizar a manipulação do LCD; e modo 4 bits, que utiliza 6 portas GPIO para se realizar a manipulação do LCD.

 

Neste artigo será abordado o display de LCD 16x2 e trabalhando em modo 4 bits para fins de economia de portas GPIO. Para maiores informações sobre esses dispositivos, recomendo a leitura do artigo Módulo de Display LCD publicado por Henrique Puhlmann.

 

 

Instalação da Biblioteca do Display LCD

 

Para a instalação da biblioteca utilizada para se trabalhar com o display LDC, deve-se primeiramente conectar a Raspberry Pi à internet. Em seguida, abre-se o LX Terminal e executa-se os comandos a seguir para atualizar e se certificar que a biblioteca GPIO está instalada:

 

Desconsidere caso apareça alguma informação de erro, pois a biblioteca provavelmente já estava instalada anteriormente. A biblioteca do display LCD que vamos trabalhar é a Adafruit_Python_CharLCD. Deve-se realizar o download e executá-la, utilizando os seguintes comandos:

 

 

Terminando a instalação, as bibliotecas já estarão disponíveis para o seu uso. A seguir são definidas as principais funções disponíveis.

 

 

Comandos

 

Os comandos Python utilizados para realizar a comunicação entre a Raspberry e o display LDC fazem parte da biblioteca Adafruit_Python_CharLDC e devemos usar o comando import  para poder utilizar esses comandos nos nossos códigos. Como utilizar o comando import é demonstrado na seção “Código”. Lembrando que estes comandos são configurados para serem aplicados nos displays que têm conexões e configurações similares ao HD44780 Character LCD da Hitachi:

 

  • lcd.home():

Move o cursor para a primeira linha e primeira coluna.

  • lcd = LCD.Adafruit_CharLCD(rs, e, d4, d5, d6, d7, bl)

Cria um objeto que nesse exemplo é chamado de “lcd”, mas poderia ser qualquer outro nome. Também inicializa e configura os pinos que enviaram os dados para o display LCD. Esta função configura o modo de funcionamento em 4 bits.

  • lcd.clear():

Limpa a tela do LCD, o deixando sem mostrar qualquer informação.

  • lcd.set_cursor(col, row):

Posiciona o cursor na posição definida pelos valores que são definidos por “col” e por “row”. Como o display de LCD que estamos usando é 16 x 2, então o valor de “col” varia entre 0 a 15 e “row” varia entre 0 ou 1.

  • lcd.enable_display(enable):

Habilita ou desabilita o display.

  • lcd.show_cursor(show):

Mostra ou esconde o cursor. O cursor é mostrado se o valor de “show” for igual a true, caso contrário, se for false, não é mostrado (esse é o valor padrão).

  • lcd.blink(blink):

Habilita ou desabilita a cintilação do cursor. Se “blink” for igual a true a cintilação do cursor é habilitada e caso for false a cintilação é desabilitada (esse é o valor padrão).

  • lcd.move_left():

Move o cursor para a esquerda uma posição.

  • lcd.move_right():

Move o cursor para a direita uma posição.

  • lcd.set_left_to_right():

Configura a direção do texto da esquerda para a direita.

  • lcd.set_right_to_left():

Configura a direção do texto da direita para a esquerda.

  • lcd.autoscroll(autoscroll):

Essa função formata o texto justificado à direita se “autoscroll” recebe o valor true, caso contrário o texto será justificado à esquerda.

  • lcd.message(‘texto”):

Insere um texto no display LCD, incluindo o comando newline “/”.

  • lcd.backlight(backlight):

Habilita ou desabilita o backlight do display LCD. Se “backlight” for igual a true o “backlight” será habilitado, sendo este o valor padrão, e caso for false o “backlight” será desabilitado.

  • lcd.write8(value, char_mode = false):

Recebe um valor de 8 bits e escreve no display LCD um caractere ou um dado. O “value” deve ser um valor inteiro de 0 a 255. Se “char_mode” é true o valor retornado é um caractere, caso contrário será um dado.

  • lcd.create(location, pattern):

Pode-se criar ou personalizar um novo caractere preenchendo cada um dos 8 bits nas 8 linhas que formam um caractere no display LCD. Para maior entendimento de como criar um novo caractere, entrem neste endereço.

 

Existem mais funções dentro da biblioteca mas que não são tão utilizadas. Devido a isso, não foram apresentadas neste artigo. Caso haja interesse de aprofundar o estudo sobre ela, pode-se acessar o endereço eletrônico no GitHub.

 

 

Circuito

 

O circuito é basicamente o mesmo circuito utilizado na publicação sobre PWM, mas agora são adicionadas as conexões com o display de LCD em modo de 4 bits. O botão S1 incrementa e botão S2 decrementa o valor do duty cycle. O valor do duty cycle é apresentado na tela do display de LCD e a luminosidade do led é alterada de acordo com este valor. O trimpot ajusta o contraste do backlight do display LCD.

 

A seguir é apresentado o esquema elétrico e a montagem do circuito no protoboard.

 

Esquema Elétrico

 

Esquema elétrico do display de LCD
Figura 2 - Esquema elétrico

 

Montagem

 

Montagem no Protoboard do projeto com display de LCD
Figura 3 - Montagem no Protoboard

 

 

Código

 

O código deste projeto é similar ao código do artigo anterior, PWM com python, mas neste são acrescentadas funções que realizam a manipulação do display LCD apresentando as informações referentes ao valor no duty cycle, que por consequência realiza alteração na luminosidade do LED.

 

Deem uma recapitulada nesse artigo, por ser um continuação e para não ficar repetitivo não será realizada superficialmente a descrição do código referente ao artigo anterior. Então vamos lá!

 

Entre as linhas 1 e 4 são definidas as bibliotecas de funções que serão utilizadas no código fonte. Observe que na linha 3 é onde foi declarada a biblioteca Adafruit_CharLCD, onde estão definidas as funções que manipulam as informações no LCD.

 

Da linha 6 até a linha 29, é realizada a declaração da função screen_control(), que realiza a manipulação dos dados na tela do display LCD, posicionando e escrevendo cada informação em uma posição pré-definida. Também é nela que recebe as informações sobre o duty cycle e posiciona o valor na tela de uma forma mais legível.

 

Entre as linhas 31 e 38 definem as GPIOs que serão utilizadas nas conexões entre a Raspberry Pi e os conectores do display de LCD. Essa definição deve estar compatível com o desejo apresentado no esquema elétrico e na montagem das conexões mostradas nas figuras 2 e 3. Caso haja alguma alteração nas GPIOs, deve-se ficar atento às conexões também.

 

Da linha 40 à linha 46 são definidas as configuração dos pinos, se serão GPIOs. Sendo assim, as GPIOs 17 e 27 são definidas como entrada, e possuindo um resistor interno de pull-down em cada uma delas e a GPIO 26 como saída.

 

As linhas 48 e 49 definem que o display LCD será de 16 colunas por 2 linhas. Se ele for utilizar  de outra configuração, esses valores devem ser alterados, como é citado nas linhas  52 e 53.

 

Nas linhas 56, 57 e 58 é definido o objeto chamado “ldc”. Poderia ser dado outro nome, e este recebe os valores definidos entre as linhas 31 e 38.

 

A linha 61 define que GPIO 26 será a saída PWM com frequencia de 100 Hz.

 

As linhas 64 e 65 inicializam a saída PWM com um duty cycle em 50% e a linha 68 manipula o valor  inicial do PWM para ser mostrado na tela do display LCD.

 

Entre as linhas 70 e 71 são detectados os eventos de borda de subida das chaves S1 e S2 que são responsáveis pelo incremento e decremento do duty cycle.

 

Das linhas 74 até a 90 é definido o loop  infinito que realiza o incremento e o decremento do duty cycle e manipulam o seu resultado no display LCD através da função screen_control(dc).

 

E nas linhas 92 e 93, é onde o código é finalizado.

 

 

Conclusão

 

Com as informações obtidas neste artigo o leitor é capaz de desenvolver as suas próprias e inúmeras aplicações utilizando o display de LCD, que é um dispositivo de fácil manipulação e muito utilizado na área de eletrônica.

 

Continuaremos no próximo artigo utilizando o display de LCD, mas agora para uma aplicação bem interessante, que será um termômetro digital, definindo como se usar o sensor de temperatura e umidade DHT-22.

 

 

Referências

 

Raspberry PI-GPIO - output com Python

Raspberry PI–GPIO input com Python

PWM na Raspberry Pi com Python

Site Arduino e Cia: Como ligar um display LCD 16x2 ao Raspberry Pi

Biblioteca Adafruit para display de LCD

Fonte da Figura 1

Fonte das Figuras 2 e 3: Desenvolvidas pelo próprio autor no software Fritzing, que pode ser baixado aqui.

Outros artigos da série

<< Raspberry PI - PWM com PythonRaspberry Pi - Projeto Termômetro Digital com Python - Teoria >>
Natural de Cachoeira de Minas, cidade localizada no extremo sul de Minas Gerais. Graduado em engenharia elétrica pela PUC MINAS campus Poços de Caldas e técnico de telecomunicações pela Escola Técnica de Eletrônica "Francisco Moreira da Costa" - ETE "FMC" em Santa Rita do Sapucaí-MG. Atualmente atua como Engenheiro de Desenvolvimento na AMTK Soluções em Telecom na cidade de Itajubá-MG. Possui conhecimentos em eletrônica analógica, digitais, e de potência, em sistemas de telecomunicações e radiofrequência, em sistemas embarcados e linguagem de programação como C / C ++, Python e Lua. Pesquisa e estuda sobre microcontroladores 8 e 32 bits, Arduino, Raspberry, desenvolvimento de dispositivos eletrônicos, sistemas embarcados, software e hardware.

Deixe um comentário

Seja o Primeiro a Comentar!

Notificar
avatar
 
wpDiscuz