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!