Aula 11: Informações da CPU no display OLED

Nesta vamos explicar como mostrar as informações da CPU da Raspberry Pi com display OLED 0.96″.

Informações da CPU no display OLED

E o que será mostrado? Com tanto uso, é importante monitorar informações de sua placa em tempo real, incluindo àquelas que mostram a “saúde” da mesma, tais como temperatura da CPU, frequência da CPU e uso percentual.

Material necessário

Para fazer este projeto, você precisará de:

Preparação: baixar fonte TTF para display

No projeto, irá ser utilizada para exibição de informações no display uma fonte TTF que simula um display de 7 segmentos. O resultado final fica bem bacana! Para isso, faça o seguinte procedimento:

  1. Acessando a Raspberry Pi (com interface gráfica, ou seja, utilizando-a como um computador), baixe o arquivo compactado da fonte clicando aqui.
  2. Descompacte o arquivo em qualquer pasta da sua Raspberry Pi.
  3. Na pasta em que ficará o projeto, coloque somente o arquivo .TTF (advanced_pixel_lcd-7.ttf)

Se quiser outras fontes, esse site tem um monte delas. É só escolher, baixar e usar!

Preparação: biblioteca PSUTIL

A biblioteca PSUTIL é uma biblioteca Python capaz de obter informações do computador ao qual está rodando (no nosso caso, na Raspberry Pi).  As informações possíveis de serem obtidas são diversas: uso de CPU, uso de disco, memória RAM utilizada e livre, usuários logados e muito mais. Para mais informações sobre ela, visite este site.

Para instala-la na Raspberry Pi, utilize o comando abaixo:

sudo pip install psutil

Circuito informações da CPU no display OLED

Veja abaixo o circuito esquemático do projeto.

Circuito informações da CPU no display OLED

Código informações da CPU no display OLED

Abaixo está o código-fonte do projeto que mostra as informações da CPU da Raspberry Pi com display OLED:

import time
import Adafruit_SSD1306
import Image
import ImageDraw
import ImageFont
import subprocess
import psutil
 
#Variaveis globais
# Raspberry Pi - configuracao dos pinos:
RST = 24 #embora nao utilizado de fato, eh preciso defini-lo para a biblioteca funcionar
 
# Configura uso do display OLED de 128x64 (comunicacao I2C)
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
 
 
#Funcao: escreve uma informacao (e seu titulo / classificacao) no display OLED
#Parametros: Informacao e seu titulo e informacoes do display
#Retorno: nenhum
def EscreveInformacaoDisplayOLED(TituloInformacao,Informacao,draw,width,height):
    global image
 
    #desenha um retangulo preto em todo o display (garante que o display sera apagado)
    draw.rectangle((0,0,width,height), outline=0, fill=0)
 
    #Fonte do titulo: fonte ttf que simula display 7 segmentos, com tamanho 8
    font_titulo = ImageFont.truetype('advanced_pixel_lcd-7.ttf', 8)
 
    #Fonte da informacao: fonte ttf que simula display 7 segmentos, com tamanho 12
    font_info = ImageFont.truetype('advanced_pixel_lcd-7.ttf', 16)
 
     
    #escreve titulo da informacao e informacao
    top = 10
    draw.text((0, top), TituloInformacao, font=font_titulo, fill=255)
    draw.text((0, top+40), Informacao, font=font_info, fill=255)
 
    #atualiza buffer do display com informacoes a serem escritas
    disp.image(image)
    disp.display()
    return
 
#Funcao: obtem frequencia do processador e a escreve no display
#Parametros: informacoes do display
#Retorno: nenhum
def FreqProcessador(draw, width, height):
    #obtem informacao da freq do processador
    cpuinfo_cur_freq = "cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq"
    cpufreq = subprocess.check_output(cpuinfo_cur_freq, shell=True)
    cpufreqGhz = str(float(cpufreq)/1000000)+"GHz"
    print "Frequencia do processador: "+cpufreqGhz
    EscreveInformacaoDisplayOLED("Frequencia",cpufreqGhz,draw,width,height)
    return
 
#Funcao: obtem temperatura do processador e a escreve no display
#Parametros: informacoes do display
#Retorno: nenhum
def TempProcessador(draw, width, height):
    #obtem informacao da freq do processador
    cur_tempcpu = "cat /sys/class/thermal/thermal_zone0/temp"
    tempcpu = subprocess.check_output(cur_tempcpu, shell=True)
    cputempCelsius = str(float(tempcpu)/1000)+"C"
    print "Temperatura do processador: "+cputempCelsius
    EscreveInformacaoDisplayOLED("Temperatura",cputempCelsius,draw,width,height)
    return
 
#Funcao: obtem uso percentual da CPU e o escreve no display
#Parametros: informacoes do display
#Retorno: nenhum
def UsoCPU(draw, width, height):
    #obtem informacao da freq do processador
    cur_uso_cpu = psutil.cpu_percent()
    uso_cpu_percentual = str(cur_uso_cpu)+"%"
    print "Uso percentual da CPU: "+uso_cpu_percentual
    EscreveInformacaoDisplayOLED("Uso de CPU",uso_cpu_percentual,draw,width,height)
    return
     
#------------------------------------------------------
#   PROGRAMA PRINCIPAL Display Oled com Raspberry Pi
#------------------------------------------------------
#Inicializa biblioteca de comunicacao com display e o limpa
disp.begin()
disp.clear()
disp.display()
 
#obtem altura e largura totais do display
width = disp.width
height = disp.height
 
#Preparacoes necessarias para apagar e desenhar na tela
image = Image.new('1', (width, height)) #imagem binaria (somente 1's e 0's)
draw = ImageDraw.Draw(image)
 
#laco principal
while True:
    #Mostra a frequencia do processador por 3 segundos
        FreqProcessador(draw,width,height)
    time.sleep(3)
 
    #Mostra a temperatura do processador por 3 segundos
    TempProcessador(draw,width,height)
    time.sleep(3)
 
    #Mostra o uso percentual da CPU por 3 segundos
        UsoCPU(draw,width,height)
    time.sleep(3)

Salve este código-fonte como InfoDispOLED.py e rode-o com o seguinte comando:

sudo python InfoDispOLED.py

Projeto em ação!

Abaixo você confere o projeto do monitor de informações da Raspberry Pi com display OLED em ação.

Informações da CPU no display OLED

O presente conteúdo é uma adaptação do post “Informações da CPU da Raspberry Pi Zero W com display OLED“, escrito pelo Maker Hero Pedro Bertoleti e publicado no blog da FilipeFlop em 12 de dezembro de 2017.