30 junho 2018

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.

Raspberry Pi 3 com Display Nokia 5110

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.

Pinagem Display Nokia 5110
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:

Raspi-config Interfacing Options

Na tela de configuração de interface, selecione a opção P4 - SPI, habilitando a interface.

Raspi-config Interface SPI

Reinicie o Raspberry.

Conectando o display Nokia 5110 no Raspberry Pi


Conecte o display na placa Raspberry Pi (estou usando um 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

Detalhe Display Nokia com Raspberry Pi

Coloque o arquivo em formato ttf na mesma pasta do programa abaixo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#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).

Um comentário: