Cómo usar una pantalla OLED con Arduino

En esta entrada os queremos mostrar cómo usar una pantalla OLED con Arduino y poder mostrar la información que queráis: texto, imágenes, animaciones, etc.

Pero primero queremos daros una breve descripción del protocolo i2c, el cual usaremos para comunicar Arduino con la pantalla OLED.

Para usar este protocolo solo necesitaremos 4 pines:

  • Vcc para alimentar la pantalla. En este caso usaremos 3,3 Voltios.
  • GND o masa, como punto de referencia a 0 Voltios.
  • SDA (Serial Data), es decir la información que Arduino mandará a la pantalla para representar lo que programemos.
  • SCL (Serial Clock), es decir, la señal de reloj.

Una cosa a tener muy en cuenta es los pines que deberemos usar para SDA y SCL, los cuales dependerán de la placa de Arduino que estemos usando. A continuación os mostramos una tabla resumen con el puerto que se deberá usar según la placa utilizada.

PlacaI2C pins
Uno, Nano, EthernetA4 (SDA), A5 (SCL)
Mega256020 (SDA), 21 (SCL)
Leonardo2 (SDA), 3 (SCL)
Due20 (SDA), 21 (SCL), SDA1, SCL1
Figura 1. Tabla pines i2c

En nuestro ejemplo vamos a usar un Arduino Uno, por lo tanto, deberemos usar los puertos A4 y A5, tal como indica la tabla anterior.

Circuito

El circuito es muy simple:

Una vez tenemos montado el circuito, empieza la diversión. Podremos «pintar» todo lo que se nos ocurra. Pero empezaremos por lo más sencillo, simple texto.

Mostrando texto

Para mostrar texto, podemos usar un código como el siguiente:

Lo primero que nos encontramos son los 3 «include», los cuales añadirán en nuestro código, algunas librerías que nos facilitarán mucho la vida. Es posible que estas no estén instaladas por defecto en el IDE de Arduino, para añadirlas hay que ir a Programa Incluir Librería > Gestionar Liberías y buscamos las dos librerías Adafruit_SSD1306 y Adafruit_GFX.

A continuación definiremos el ancho y alto de la pantalla. Esto es muy importante, ya que si introducimos valores incorrectos, el contenido no se mostrará correctamente. Por lo tanto, es necesarios que sepáis la resolución de vuestra pantalla. Normalmente todos los vendedores lo indican cuando compramos la pantalla, algunas otras tienen esa información impresa por la parte de atrás. En nuestro caso, estamos usando una pantalla de 0.96 pulgadas, con una resolución de 128 pixeles de ancho por 64 píxeles de alto.

Por último, este bloque del código:

Limpiará la pantalla en primer lugar, borrando cualquier cosa que pueda haber anterior, ajustará el tamaño del texto a 1 (podemos elegir el valor que queramos), ajustará el color del texto a blanco (dependiendo del tipo de pantalla podremos elegir más colores o menos, por ejemplo si es una pantalla monocromo, solo podrá ser blanco o negro), ajustará la posición del cursor a la posición 0 en el eje X y 10 pixeles en el eje Y, y mostrará el texto que nosotros pongamos, en este caso «¡Hola mundo!».

Mostrando imágenes

Figura 3. Imagen de ejemplo
Figura 4. Imagen en pantalla OLED

Para mostrar imágenes en la pantalla OLED, debemos convertir la imagen a formato array de bytes. Es decir, un array que almacene el valor de cada byte que compondrá la imagen para poder representarla. Para convertir la imagen, existen varias herramientas en Internet, nosotros solemos usar esta URL https://diyusthad.com/image2cpp, por su sencillez y poder hacerlo online, sin necesidad de descargar ningún software adicional.

Paso a paso el proceso sería el siguiente:

  • Elegir la imagen deseada y subirla a https://diyusthad.com/image2cpp o la herramienta deseada.
  • Elegir las dimensiones de nuestra pantalla en el apartado Canvas size/s, en nuestro ejemplo 128×64 píxeles.
Figura 5. Convirtiendo imagen en array de bytes
  • Seleccionar las opciones que queramos para mostrar la imagen, como por ejemplo invertir colores, si queremos centrar la imagen, etc.
  • En el apartado 4 (Output), seleccionar Arduino code, seleccionar Generate code y copiar el resultado que aparece entre llaves {};
Figura 6. Copiando código generado
  • Cargar el código que os dejamos a continuación, modificando el texto COPIA TU CODIGO AQUI por el de nuestra imagen.

Mostrando animaciones

Por último, es también posible dibujar animaciones. Para hacernos la vida más fácil, usaremos las funciones que se incluyen en las librerías de Adafruit: Adafruit_SSD1306 y Adafruit_GFX.

La propia librería incluye algunos ejemplos, para testear animaciones y todo tipo de elementos en nuestra pantalla OLED. A continuación os dejamos uno para pantallas de 128×64 usando el protocolo i2c que ya vimos al principio de la entrada:

Al cargar ese programa en vuestro Arduino, veréis una serie de animaciones de todo tipo. Si nos fijamos en el código en detalle, vemos que existen varias funciones ya programadas para pintar diferentes formar geométricas como las siguientes:

Como podéis ver, con estas funciones podremos dibujar diferentes elementos como rectángulos, círculos, triángulos, incluso texto en movimiento. Lo interesante es buscar entre las diferentes funciones que nos ofrece la librería y reutilizarlas para crear nuestras propias animaciones.

Y con esto finalizamos la entrada de hoy, esperamos que os haya gustado. Como siempre, si tenéis cualquier duda o sugerencia, no dudéis en dejarnos un comentario.