Como usar o display Nokia 5110 com Raspberry Pi
O Display Nokia 5110 é um display LCD com excelente relação custo/benefício, pois é um display gráfico com resolução de 84 x 48 pixels onde você pode mostrar imagens e textos, além de ser muito fácil de utilizar com Arduino. Neste post, vamos mostrar como você pode usar o display Nokia 5110 com Raspberry Pi.
O display LCD Nokia 5110
O display que vamos usar é este mostrado na imagem abaixo, na cor vermelha, e que funciona com tensão de 3.3V. Os pinos de sinal podem ser usados tanto em dispositivos como Arduino (nível de sinal de 5V) como com Raspberry Pi, onde o nível de sinal é de 3.3V.
Veremos logo a seguir que a conexão do display Nokia 5110 com Raspberry Pi é feita por meio da interface SPI, que vamos habilitar no passo abaixo.
Habilitando a interface SPI no Raspberry Pi
Para habilitar a interface SPI no Raspberry Pi, vamos usar o raspi-config:
sudo raspi-config
Será apresentada a tela abaixo, onde você deve navegar até a opção 5 – Interface Options:
Na tela de configuração de interface, selecione a opção P4 – SPI, habilitando a interface.
Reinicie a Raspberry Pi.
Conectando o display Nokia 5110 com Raspberry Pi
Conecte o display na placa Raspberry Pi (estou usando uma placa Raspberry Pi 3, mas você pode usar outras placas da linha Raspberry) seguindo o esquema abaixo, que mostra a relação entre os pinos do display e a interface SPI do Raspberry:
Pinos Display Nokia 5110 | Pinos RPi | ||
---|---|---|---|
# | Função | # | GPIO |
1 | RST | 18 | GPIO24 |
2 | CE | 24 | GPIO8 – SPI_CE0 |
3 | DC | 16 | GPIO23 |
4 | DIN | 19 | GPIO10 – SPI_MOSI |
5 | CLK | 23 | GPIO11 – SPI_SCLK |
6 | VCC | 1 | 3.3V |
7 | LIGHT | 6 | GND |
8 | GND | 6 | GND |
Nosso circuito fica assim:
Repare no pino LIGHT do display Nokia 5110, que deve ser conectado ao negativo para funcionar, ok?
Biblioteca Adafruit display Nokia 5110
Para utilizar a biblioteca da Adafruit, vamos primeiro instalar alguns pacotes para o seu correto funcionamento. Abra uma janela de terminal e digite os comandos abaixo:
sudo apt-get install python-pip python-dev build-essential sudo pip install RPi.GPIO
Instale também a Python Imaging Library usando o comando a seguir:
sudo apt-get install python-imaging
Finalmente, instale a biblioteca:
sudo apt-get install git git clone https://github.com/adafruit/Adafruit_Nokia_LCD.git cd Adafruit_Nokia_LCD sudo python setup.py install
Pronto. Para testar o display Nokia 5110 com Raspberry Pi, entre na pasta EXAMPLES e você encontrará arquivos de exemplo como o animate.py, image.py e shapes.py. Para rodar esses programas, utilize o comando de exemplo abaixo:
sudo python shapes.py
Utilize o mesmo comando para os outros programas existentes na pasta.
Dica extra
A imagem de capa deste post foi feita utilizando a fonte baby blocks.ttf, que eu baixei deste site aqui.
Coloque o arquivo em formato ttf na mesma pasta do programa abaixo:
#Programa: Teste Display Nokia 5110 com Raspberry Pi #Autor: Arduino e Cia # #Baseado no exemplo da biblioteca Adafruit Nokia LCD import time import Adafruit_Nokia_LCD as LCD import Adafruit_GPIO.SPI as SPI from PIL import Image from PIL import ImageDraw from PIL import ImageFont #Configuracao SPI Raspberry Pi DC = 23 RST = 24 SPI_PORT = 0 SPI_DEVICE = 0 # Hardware SPI usage: disp = LCD.PCD8544(DC, RST, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=4000000)) #Inicializa a biblioteca e define o contraste disp.begin(contrast=40) #Apaga o display disp.clear() disp.display() image = Image.new('1', (LCD.LCDWIDTH, LCD.LCDHEIGHT)) draw = ImageDraw.Draw(image) #Desenha um quadrado branco para apagar a tela draw.rectangle((0,0,LCD.LCDWIDTH,LCD.LCDHEIGHT), outline=255, fill=255) #Linhas superior e inferior draw.line((0,0,83,0), fill=0) draw.line((0,47,83,47), fill=0) #Define a fonte do texto font = ImageFont.truetype('baby blocks.ttf', 11) #Mostra o texto na tela na coordenada especificada draw.text((0,2), 'ARDUINO', font=font) draw.text((36,17), 'E', font=font) draw.text((24,32), 'CIA', font=font) #Display image. disp.image(image) disp.display() print('Press Ctrl-C to quit.') while True: time.sleep(1.0)
Defina a fonte do texto na linha 43, colocando o nome do arquivo (no caso, baby blocks.ttf), e em seguida o tamanho desejado (no programa, utilizamos o tamanho 11).
Opa… vou jah testar 🙂
Ola,
Estou tentando executar conforme vocês orientam, mas a biblioteca python-imaging parece obsoleta, e sugerem a substituição pela python-pil.
root@raspberrypi:~/Adafruit_Nokia_LCD# apt-get install python-imaging
Reading package lists… Done
Building dependency tree
Reading state information… Done
Package python-imaging is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
python-pil
Mesmo assim, após a instalação da biblioteca python-pil, o script não funciona, conforme abaixo:
root@raspberrypi:~/Adafruit_Nokia_LCD/examples# python shapes.py
Traceback (most recent call last):
File “shapes.py”, line 60, in
disp = LCD.PCD8544(DC, RST, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE, max_speed_hz=4000000))
File “build/bdist.linux-armv6l/egg/Adafruit_GPIO/SPI.py”, line 46, in __init__
SystemError: error return without exception set
Vejo que a inteface SPI parece carregada, e Ok:
root@raspberrypi:~/Adafruit_Nokia_LCD# lsmod | grep “spi_bcm *”
spi_bcm2835 20480 0
Alguma ideia do que pode estar acontecendo?
Acabei de encontrar a solução em https://www.gitmemory.com/issue/rm-hull/luma.oled/292/671024522.
Usando o comando abaixo, verificar se está na versão 3.5.
# pip3 list | grep spidev
Se sim, fazer downgrade conforme abaixo:
# pip3 install spidev==3.4 –force-reinstall