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:
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:
Pin | Nombre | Significado | Pin en la Rasberry | Función en la Rasberry |
---|---|---|---|---|
1 | GND | Ground | P01-6 | GND |
2 | VCC | +3.3V Power | P01-1 | 3V3 |
3 | SCL | Clock | P01-5 | GPIO 3 (SCL) |
4 | SDA | Data | P01-3 | GPIO 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:
pip install luma-core
pip install luma-oled
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/