Uso de un módulo de pantalla OLED I2C con Raspberry Pi

Los módulos de pantalla OLED en miniatura son una excelente manera de agregar una pantalla pequeña a sus proyectos de Raspberry Pi. Están disponibles en varios tamaños, pero los tamaños comunes incluyen 128×32 y 128×64 píxeles. Los más baratos tienen píxeles de un solo color que son blancos, amarillos o azules. Mi dispositivo tiene píxeles blancos y usa una interfaz I2C que solo requiere cuatro cables para conectarse al Pi.

En este tutorial explicaré cómo configuro mi módulo de pantalla OLED de 0.96″ usando la interfaz I2C de Pi. Una vez configurado, es fácil usar Python para colocar texto, dibujar formas o incluso mostrar imágenes y animaciones simples.

El módulo OLED

Mi módulo de pantalla OLED es un módulo de pantalla LED LCD OLED de 0,96″ I2C IIC SPI Serial 128X64.

Tiene cuatro pines. Dos son de alimentación (Vcc y Gnd) y dos son para la interfaz I2C (SDA y SCL). Es posible que deba soldar el encabezado antes de poder usarlo.

Actualizar sistema operativo

Como con todos mis proyectos, comencé creando una tarjeta SD con la última imagen de Raspbian. Luego me aseguré de que estuviera actualizado ejecutando los siguientes comandos:

sudo apt update sudo apt upgrade

Este paso puede demorar unos minutos si hay muchos paquetes para actualizar, pero generalmente ahorra algo de frustración en el futuro.

Configuración del módulo de visualización

Mi pantalla tenía cuatro pines, dos para alimentación y dos para la interfaz I2C.

Los conecté directamente al encabezado GPIO de Raspberry Pi usando el siguiente esquema:

OLED PinPi GPIO PinNotas
vcc 1 * 3,3 V
Tierra 14 ** Terrestre
SCL 5 SCL I2C
ASD 3 SCA I2C

* Puede conectar el pin Vcc al pin 1 o al 17, ya que ambos proporcionan 3,3 V.
** Puede conectar el pin Gnd al pin 6, 9, 14, 20, 25, 30, 34 o 39, ya que todos proporcionan tierra.

Habilitar interfaz I2C

La interfaz I2C está deshabilitada de forma predeterminada, por lo que debe habilitarla. Puede hacer esto dentro de la herramienta raspi-config en la línea de comando ejecutando:

sudo raspi-config

Para obtener detalles adicionales sobre este paso, consulte cómo habilitar la interfaz I2C en la publicación de Raspberry Pi.

Es posible que las siguientes bibliotecas ya estén instaladas, pero ejecute estos comandos de todos modos para asegurarse:

sudo apt install -y python3-dev sudo apt install -y python-smbus i2c-tools sudo apt install -y python3-pil sudo apt install -y python3-pip sudo apt install -y python3-setuptools sudo apt install -y python3-rpi.gpio

Si está utilizando Python 2, utilice estos comandos en su lugar:

sudo apt install -y python-dev sudo apt install -y python-smbus i2c-tools sudo apt install -y python-pil sudo apt install -y python-pip sudo apt install -y python-setuptools 

Recomendaría usar Python 3 a menos que tenga una muy buena razón para usar Python 2.

Búsqueda de la dirección del módulo de pantalla OLED

Con las bibliotecas I2C instaladas, utilicé el comando i2cdetect para encontrar el módulo en el bus I2C.

i2cdetect -y 1

y obtuve el siguiente resultado:

Esta fue una buena noticia, ya que mostró que el dispositivo había sido detectado con una dirección de «0x3c». Esta es la dirección hexadecimal predeterminada para este tipo de dispositivo. No tengo idea de por qué el PCB del dispositivo sugiere que la dirección es «0x78» cuando claramente es «0x3c».

Si tiene un Model B Rev 1 Pi original, escriba el siguiente comando en su lugar:

i2cdetect -y 0

Instalar la biblioteca OLED Python

Para mostrar texto, formas e imágenes, puede usar la biblioteca Python de Adafruit. Debería funcionar con todas las pantallas basadas en SSD1306, incluidos sus propios dispositivos de 128×32 y 128×64.

Para instalar la librería clonaremos el repositorio git de Adafruit. Asegúrese de que git esté instalado ejecutando:

sudo apt install -y git

Luego clone el repositorio usando el siguiente comando:

git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git

Una vez que se complete, navegue hasta el directorio de la biblioteca:

cd Adafruit_Python_SSD1306

e instale la biblioteca para Python 2:

sudo python setup.py install

y/o Python 3:

sudo python3 setup.py install

Este proceso le permitirá incluir la biblioteca dentro de sus propios scripts de Python.

Ejemplos de secuencias de comandos de Python

Ahora estamos listos para probar algunos scripts de ejemplo. Navegue al directorio «ejemplos»:

cd examples

Allí debería encontrar una serie de scripts de ejemplo como:

  • animar.py
  • botones.py
  • imagen.py
  • formas.py
  • estadísticas.py

Estos ejemplos se pueden ejecutar usando:

python shapes.py

o usando Python 3:

python3 shapes.py

Los ejemplos deberían darle pantallas que aparecen en los ejemplos a continuación:

Al modificar estos scripts, puede crear sus propios gráficos con formas, imágenes y texto según su proyecto. ¡A ver si puedes adivinar cuáles eran fotos que descargué en mi Pi desde Google Imágenes!

Ajuste del tamaño de la pantalla

Los ejemplos de Adafruit asumen que tiene una pantalla de 128 × 32. Todavía funcionan con una pantalla de 128×64 píxeles, pero es mejor cambiarlos antes de pasar a algo más complicado. Para hacer esto, simplemente edite los scripts y deshabilite la línea de configuración de 128×32 colocando un carácter # al frente, y habilite la línea de 128×64 eliminando el carácter # del frente. La sección en el script ahora debería verse así:

Este paso se vuelve imprescindible si quieres empezar a crear tus propias imágenes para mostrar en pantalla.

Creación de nuevas imágenes

Entonces, probó el ejemplo de image.py y se preguntó cómo puede crear sus propias imágenes. Es bastante fácil si tiene una aplicación de edición de imágenes como Photoshop o GIMP. Prefiero usar GIMP porque es gratis.

Idealmente, desea que las imágenes sean:

  • resolución 128×64
  • Color de 1 bit (es decir, blanco y negro)

De forma predeterminada, el ejemplo image.py convertirá la imagen a 1 bit, pero asume que la resolución es correcta.

Notarás en el script una línea alternativa que cambia el tamaño y convierte una imagen para que puedas cargar imágenes sin preocuparte por su tamaño y color.

Cargue la imagen y conviértala a color de 1 bit:

image = Image.open('happycat_oled_64.ppm').convert('1')

Cargue una imagen, cambie el tamaño y conviértala a 1 bit:

image = Image.open('example.png').resize((disp.width, disp.height), Image.ANTIALIAS).convert('1')

La técnica que utilices depende de ti. El cambio de tamaño y la conversión requieren un tiempo de procesamiento adicional, por lo que en las aplicaciones de alto rendimiento es mejor alimentar las imágenes del script que ya han sido redimensionadas.

Cambiar el tamaño y convertir imágenes

Si desea cargar una imagen o foto, cárguela en su aplicación de gráficos y realice los siguientes pasos:

  • Cargar imagen
  • Redimensionar/escalar a 128×64
  • Convertir a color de 1 bit (monocromo)
  • Exportar como archivo “.pbm” o “.png”
  • Copie a su Pi en la misma ubicación que su secuencia de comandos de Python
  • Actualice el script de Python para usar su nuevo archivo

La imagen de ejemplo de Adafruit es un archivo «ppm» porque es en color, aunque se convierte a monocromo en el punto en que se muestra en la pantalla. Adafruit usa ppm ya que la biblioteca también es compatible con sus módulos OLED de color. Si no tiene una pantalla a color, puede cambiar a pbm o png.

Prefiero crear archivos «pbm», ya que son archivos en blanco y negro y mucho más pequeños. También significa que su secuencia de comandos de Python no necesita convertirlos. La biblioteca puede manejar ambos, solo asegúrese de usar el nombre de archivo y la extensión correctos en sus scripts.

Aumento de la velocidad del bus I2C

Si está mostrando varias imágenes por segundo, vale la pena aumentar la velocidad del bus de la interfaz, ya que puede mejorar el rendimiento. Consulte la publicación Change Raspberry Pi I2C Bus Speed.

Solución de problemas

Si su pantalla no funciona, debe comenzar desde el principio de este tutorial y seguirlo. Aquí hay algunas cosas a considerar:

  • ¿Habilitó I2C e instaló «python-smbus» e «i2c-tools»?
  • ¿Son correctas las conexiones de los cuatro módulos? ¿Confundiste SDA y SCL?
  • ¿»i2cdetect -y 1″ le dio la dirección de la pantalla en el bus I2C?
  • Si su pantalla está usando una dirección diferente a 0x3c, ¿ajustó el script de Python?

Compra una pantalla OLED en miniatura

Estas pantallas están disponibles en varios minoristas, así que eche un vistazo y elija una que sea conveniente para su ubicación:

Lea las descripciones detenidamente, ya que algunos módulos de pantalla OLED utilizan la interfaz SPI en lugar de I2C. Esos están bien, pero deberá seguir un tutorial diferente para usar ese estilo.