Raspberry Pi y el Display OLED SH1106 o SSD1306

En este pequeño tutorial te mostraremos como conectar la Raspberry Pi y el Display OLED SH1106 o SSD1306 y desplegar una pequeña cadena de texto, como aparece en la imagen:

Raspberry Pi y el Display OLED SH1106 o SSD1306

Este display monocromático de 128×64 pixeles es bastante útil para mostrar información general en tus proyectos, como la IP de la Raspberry en red, la temperatura y hasta imágenes. Todo esto usando las librerías en Python de Luma.OLED.

» Ver más ejemplos con Raspberry

Los componentes que vas a necesitar

Puedes usar las salidas de poder de 3.5 volts de la Raspberry para alimentar el display y sólo necesitarás algunos cables Dupont hembra-hembra si el display que usas viene con pines de conexión para soldar.

  • Display OLED 12C 128×64 SSD1306 o SH1106
  • Los modelos de Raspberry
    • Raspberry Pi Zero y Zero W
    • Raspberry Pi 3 y 4 Model B
  • Cables de conexión Dupont (conexión hembra y hembra)
  • Fuente de alimentación para la Rasberry por cable USB

Una nota importante: el display que se usa para estas pruebas se adquirió en Amazon como el SSD1106, pero funciona con los drivers SH1106. En nuestro ejemplo en la foto usamos una Raspberry Pi Zero W, pero se ha probado con otros modelos de Raspberry Pi 3 y 4 sin problema.

La Conexión de Pines

Asegúrate de conectar los pines de la GPIO de la Raspberry al Display de acuerdo a la siguiente tabla:

PinNombreSignificadoPin en la Rasberry Función en la Rasberry
1GNDGroundP01-6GND
2VCC+3.3V PowerP01-13V3
3SCLClockP01-5GPIO 3 (SCL)
4SDADataP01-3GPIO 2 (SDA)

Instalar las Librerías de Luma para el Display

Para instalar las librerías basta con ejecutar el siguiente comando en la terminal:

sudo -H pip3 install --upgrade luma.oled

Si tienes problemas para ejecutar el código, es porque quizá te falta alguna dependencia, puedes ver más detalle de las librerías en la página oficial:

https://luma-oled.readthedocs.io

Normalmente no deberías tener problemas.

Veamos el Código para la Raspberry

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 socket

#decodigo.com

serial = i2c(port=1, address=0x3C)
#device = ssd1306(serial, rotate=0)
device = sh1106(serial, width=128, height=64, rotate=0)

#device.capabilities(width=128, height=64, rotate=0)
print("size: " , device.bounding_box)

device.clear()
with canvas(device) as draw:
    draw.rectangle(device.bounding_box, outline="white", fill="black")
    draw.text((10, 10), "Hola Mundo!", fill="white")
    draw.text((10, 20), "decodigo.com", fill="white")
sleep(20)

Es importante establecer la dirección del puerto I2C el cual es el protocolo de comunicación que usa este display.

serial = i2c(port=1, address=0x3C)

También deberás declarar el dispositivo de acuerdo al modelo que has adquirido:

#device = ssd1306(serial, rotate=0)
device = sh1106(serial, width=128, height=64, rotate=0)

Cambiando los valores de rotate puedes invertir la imagen.

Finalmente, se dibuja un rectángulo y dos líneas de texto:

device.clear()
with canvas(device) as draw:
    draw.rectangle(device.bounding_box, outline="white", fill="black")
    draw.text((10, 10), "Hola Mundo!", fill="white")
    draw.text((10, 20), "decodigo.com", fill="white")
sleep(20)

Conectar la Raspberry Pi y el Display OLED SH1106 o SSD1306 no es complicado, pero quizá puedes tener problemas para identificar correctamente el tipo de display o su resolución, por lo que deberás estar intercambiando entre las opciones de dispositivos que maneja Luma o probar distintas resoluciones de pixeles.

Ver más documentación de Luma.OLED: https://luma-oled.readthedocs.io/en/latest/