Electrónica y programación para Microcontroladores.

Libros técnicos para electrónica programable.

Email
Contactanos en:

consultas@firtec.com.ar

Arduino

 La Pantalla OLED de 1.3 pulgadas con el controlador SSH1106 de 128x64 píxeles son de uso común con Arduino sin  embargo también las podemos usar con Raspberry PI. 
Si bien estas pantallas son muy pequeñas también son muy visibles dado su alto contraste incluso a plena luz del día. 
El driver interno es un SSH1106 que se comunica por I2C (también existen por SPI). Internamente todo el conjunto funciona a 3,3V pero se han acoplado tanto la alimentación como los pines de entrada para funcionar perfectamente a 5V lo que lo hace ideal para utilizar con cualquier microcontrolador de 5V.
El consumo general depende en gran medida de cuantos píxeles están encendidos, pero el consumo medio ronda los 80mA.
El ejemplo propuesto es bastante simple, obtiene algunos datos del estado interno de la placa Raspberry y los muestra en la pantalla.
Para hacer funcionar la pantalla será necesario cargar una biblioteca que se encarga de resolver todos los problemas de hardware y su acople con Raspberry PI a través del bus I2C. 
Para instalar el correspondiente driver escribimos directamente en la terminal lo siguiente:

sudo -H pip3 install --upgrade luma.oled

Para verificar su funcionamiento podemos ejecutar el siguiente sript Python:

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
57
58
59
60
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from luma.core.interface.serial import i2c
from luma.core.render import canvas
from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106
from time import sleep
 
import os
import sys
import time
import psutil
from pathlib import Path
from datetime import datetime
 
 
if os.name != 'posix':
    sys.exit('{} platform not supported'.format(os.name))
 
from demo_opts import get_device
from luma.core.render import canvas
from PIL import ImageFont
 
 
serial = i2c(port=1, address=0x3C)
device = sh1106(serial, rotate=0)
 
font_path = str(Path(__file__).resolve().parent.joinpath('fonts', 'C&C Red Alert [INET].ttf'))
font2 = ImageFont.truetype(font_path, 12)
 
def bytes2human(n):
   
    symbols = ('K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y')
    prefix = {}
    for i, s in enumerate(symbols):
        prefix[s] = 1 << (i + 1) * 10
    for s in reversed(symbols):
        if n >= prefix[s]:
            value = int(float(n) / prefix[s])
            return '%s%s' % (value, s)
    return "%sB" % n
 
def mem_usage():
    usage = psutil.virtual_memory()
    return "Memoria: %s %.0f%%" \
        % (bytes2human(usage.used), 100 - usage.percent)
 
def disk_usage(dir):
    usage = psutil.disk_usage(dir)
    return "SD:  %s %.0f%%" \
        % (bytes2human(usage.used), usage.percent)
 
with canvas(device) as draw:
        draw.text((5, 0), "Raspberry PI Status", fill="white")
        draw.text((5, 6), "-------------------", fill="white")
        draw.text((0, 16), mem_usage(), font=font2, fill="white")
        draw.text((0, 30), disk_usage('/'), font=font2, fill="white")
        draw.text((9, 50), "www.firtec.com.ar", fill="white")
 

Con el siguiente resultado.

Es importante estar seguro de cual es el controlador de la pantalla, puede ser SSD1306 o SH1106, no son exactamente iguales en lo que es el manejo de memoria interna, observe que en el programa se lee device = sh1106(serial, rotate=0) donde se especifica el controlador de pantalla y en este caso no se rota la pantalla. La rotación de pantalla puede ser 90, 180 o 360 grados, puede consultar la ayuda de la biblioteca y los ejemplos que se descargan con el propio driver.
Puede ser necesario descargar "psutil" con  sudo -H pip3 install psutil  esto depende de la instalación que tiene de Python3