LCD 16×2 para utilização no raspberry
Fala galera.
Hoje vou demonstrar como utilizar o LCD de 16 linhas por 2 colunas, vendidos por padrão em lojas como o filipeflop, labdegaragem e etc.
Esse que estarei testando especificamente comprei em um KIT do laboratório de garagem, que alias é um kit que eu super reocomendo.
O LCD em questão é o que está abaixo.
A placa é composta por 16 pinos e cada um representa algo. Compilei uma imagem retirada do google que nos mostrará exatamente como deve ser feita a ligação na placa com as explicações (em ingles , porém simples) e ao lado a minha placa como foi conectadad na protoboard
![]() |
![]() |
Aconselho vocês a iniciarem do 16 pra trás, até o 1. Fazendo isso nas 2 primeiras pinagens ele já irá acender!
Lembre-se de colocar o resistor como mostra abaixo OU no negativo como fazemos sempre.
Utilizaremos a mesma pinagem contada como se fosse o nosso raspberry PI normal contando os numeros no Pi Pin
Modifiquei bastante o script padrão de LCD que pode ser achado na internet para se transformar em uma CLASSE para ser utilizada mais facilmente por nós:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
class raspibrLCD:
def __init__(self):
# Define GPIO to LCD mapping
self.LCD_RS = 7
self.LCD_E = 8
self.LCD_D4 = 25
self.LCD_D5 = 24
self.LCD_D6 = 23
self.LCD_D7 = 18
# Define some device constants
self.LCD_WIDTH = 16 # Maximum characters per line
self.LCD_CHR = True
self.LCD_CMD = False
self.LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
self.LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
# Timing constants
self.E_PULSE = 0.00005
self.E_DELAY = 0.00005
GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
GPIO.setwarnings(False)
GPIO.cleanup();
GPIO.setup(self.LCD_E, GPIO.OUT) # E
GPIO.setup(self.LCD_RS, GPIO.OUT) # RS
GPIO.setup(self.LCD_D4, GPIO.OUT) # DB4
GPIO.setup(self.LCD_D5, GPIO.OUT) # DB5
GPIO.setup(self.LCD_D6, GPIO.OUT) # DB6
GPIO.setup(self.LCD_D7, GPIO.OUT) # DB7
def inicializar(self):
# Initialise display
self.lcd_byte(0x33,self.LCD_CMD)
self.lcd_byte(0x32,self.LCD_CMD)
self.lcd_byte(0x28,self.LCD_CMD)
self.lcd_byte(0x0C,self.LCD_CMD)
self.lcd_byte(0x06,self.LCD_CMD)
self.lcd_byte(0x01,self.LCD_CMD)
def irLinha(self,linha):
if(linha == 1):
LCD_LINE = 0x80 # LCD RAM address for the 1st line
self.lcd_byte(LCD_LINE,False);
else:
LCD_LINE = 0xC0 # LCD RAM address for the 2nd line
self.lcd_byte(LCD_LINE,False);
def escrever(self,message,line=1):
# Send string to display
self.irLinha(line);
message = message.ljust(self.LCD_WIDTH," ")
for i in range(self.LCD_WIDTH):
self.lcd_byte(ord(message[i]),self.LCD_CHR)
def lcd_byte(self,bits, mode):
# Send byte to data pins
# bits = data
# mode = True for character
# False for command
GPIO.output(self.LCD_RS, mode) # RS
# High bits
GPIO.output(self.LCD_D4, False)
GPIO.output(self.LCD_D5, False)
GPIO.output(self.LCD_D6, False)
GPIO.output(self.LCD_D7, False)
if bits&0x10==0x10:
GPIO.output(self.LCD_D4, True)
if bits&0x20==0x20:
GPIO.output(self.LCD_D5, True)
if bits&0x40==0x40:
GPIO.output(self.LCD_D6, True)
if bits&0x80==0x80:
GPIO.output(self.LCD_D7, True)
# Toggle 'Enable' pin
time.sleep(self.E_DELAY)
GPIO.output(self.LCD_E, True)
time.sleep(self.E_PULSE)
GPIO.output(self.LCD_E, False)
time.sleep(self.E_DELAY)
# Low bits
GPIO.output(self.LCD_D4, False)
GPIO.output(self.LCD_D5, False)
GPIO.output(self.LCD_D6, False)
GPIO.output(self.LCD_D7, False)
if bits&0x01==0x01:
GPIO.output(self.LCD_D4, True)
if bits&0x02==0x02:
GPIO.output(self.LCD_D5, True)
if bits&0x04==0x04:
GPIO.output(self.LCD_D6, True)
if bits&0x08==0x08:
GPIO.output(self.LCD_D7, True)
# Toggle 'Enable' pin
time.sleep(self.E_DELAY)
GPIO.output(self.LCD_E, True)
time.sleep(self.E_PULSE)
GPIO.output(self.LCD_E, False)
time.sleep(self.E_DELAY)
Aqui podemos ver que existem 2 métodos bases importantes
- incializar
- escrever
A inicializar iremos limpar tudo de lixo ou escrito no LCD para ficar pronto para ser preenchido
A escrever contém 2 parâmetros, onde o primeiro é o texto em questão de ate 16 letras e o segundo que mostra em qual linha quer q seja escrita a palavra. ou seja, ao importar a classe e instanciar, você inicializa a classe e ja pode escrever diretamente nas 2 linhas, como no script abaixo:
#!/usr/bin/python
import os
import time
os.chdir('/opt/LCD');
from lcd import raspibrLCD;
raspi = raspibrLCD();
raspi.inicializar();
raspi.escrever('Raspibr.com.br',1);
time.sleep(2);
raspi.irLinha(2);
raspi.escrever('Ajudem',2);
time.sleep(2);
raspi.escrever('Comentem',2);
time.sleep(2);
raspi.escrever('Obrigado!!!!',2);
time.sleep(2);
raspi.inicializar();
Aqui, estamos importando a nossa classe para o nossa aplicação de teste com o from …… import
após isso, iremos instanciar o objeto e utilizar o inicializar e o escrever de acordo com o que necessitará. Lembre-se que se utilizar a escrita na linha 1 apagar todo seu conteúdo assim como se for escrever na linha 2.
O comando ficará assim no seu LCD:
Espero que tenham gostado e até a próxima!



