Saltar al contenido
Control Automático Educación

Display OLED Raspberry Pi Pico / ESP8266

En esta entrada aprenderemos a utilizar y programar una pantalla o display OLED con la Raspberry Pi Pico o una NODEMECU ESP8266, ESP32 utilizando MicroPython y el IDE de Thonny.

Antes de comenzar te hago la invitación para que veas nuestro curso gratuito de MicroPython.

Y que te suscribas al canal si te interesan los microcontroladores, la programación y sobre todo loa teoría del control:

OLED SSD1306

Con una pantalla OLED podemos integrar una forma de visualización de datos para el usuario de manera eficiente en nuestros proyectos de sistemas embebidos como la Raspberry Pi Pico o el ESP8266.

Esta pantalla posee un driver CMOS OLED de un solo chip: SSD1306. la cual se comunica con el microcontrolador de usando protocolos como el I2C y SPI .

El protocolo SPI es generalmente más rápido que el I2C pero requiere más pines de E / S. Mientras que I2C requiere solo dos pines y se puede compartir con otros periféricos I2C. Es una compensación entre los pines y la velocidad. 

Circuito OLED Raspberry Pi Pico / ESP8266

Antes que nada es MUY IMPORTANTE que mires la posición de VCC y GND en tu Display OLED, dado que dependiendo del fabricante estos dos pines pueden estar INVERTIDOS.

El circuito que vamos a emplear en la práctica del dia de hoy para programar una pantalla OLED con MicroPython en el ESP8266 y la Raspberry Pi Pico será el siguiente:

Display OLED Raspberry Pi Pico

En esta práctica vamos a mostrar:

  • Textos
  • Gráficos
  • Un plano cartesiano plotando el voltaje leido del potenciometro vs tiempo

Librería SSD1306 MicroPython

Lo primero que debemos hacer es descargar y grabar la librería dentro del dispositivo microcontrolador, esto se puede hacer directamente dentro del IDE de Thonny o a través de los siguientes enlaces:

Homepage: https://github.com/stlehmann/micropython-ssd1306

Uso básico de la librería

Importamos el modulo machine y creamos un objeto I2C

import machine
i2c = machine.I2C(sda=machine.Pin(23), scl=machine.Pin(22))

Creamos un objeto para nuestra pantalla OLED.

from ssd1306 import SSD1306_I2C
oled = SSD1306_I2C(128, 32, i2c)

Esto llena toda la pantalla con píxeles blancos:

oled.fill(1)
oled.show()

 Para borrar la pantalla:

oled.fill(0)
oled.show()

Para escribir algo de texto:

oled.text('Hello', 0, 0)
oled.text('World', 0, 10)
oled.show()

FrameBuffer

También podemos usar las instrucciones de la clase framebuffer con el objeto OLED creado anteriormente.

.pixel (x, y, B / N)

Para dibujar una línea horizontal, pasamos la posición X, Y y luego la longitud de esa línea. Si usa 0 como tercer parámetro, el píxel será negro. El píxel negro se puede utilizar para borrar un píxel iluminado en su posición o para resaltar un píxel en un fondo de píxel iluminado.

.hline (x, y, w, B / W)

Para dibujar una línea horizontal, pasamos la posición X, Y y luego la longitud de esa línea. 

.vline (x, y, w, B / W)

Exactamente los mismos parámetros que la línea horizontal, pero ahora vertical. 

.line (x1, y1, x2, y2, B / W)

Para dibujar una línea en cualquier dirección. Los parámetros son x1, y1, que se refieren al punto inicial x2, y y2, que se refieren al punto final. El último parámetro siempre está relacionado con el píxel (negro o blanco). 

.rect (x, y, w, h, B / W)

Dibujar un rectángulo. Aquí los parámetros son el punto de partida (x, y), el ancho y la altura del rectángulo, comenzando desde el punto de partida.

firmware micropython

Firmware de Micropython

Imagen en el OLED

Hay una aplicación en línea llamada image2cpp – http://javl.github.io/image2cpp/ que puede convertir su imagen en una matriz.

Si ha seleccionado una imagen más grande que 128 × 64, cámbiela a 128 × 64 y seleccione la opción de Escala adecuada. Coloque como color de fondo Black o Transparente.

Una vez que esté satisfecho con el resultado, puede continuar generando la matriz de datos. Simplemente seleccione el formato de salida de código como plan bytes y haga clic en el botón Generar código.

Cree una lista en su código pegando dentro de los corchetes la matriz generada:

logo = [   Pegue aquí la matriz generada  ]

Podemos ahora generar la imagen en MicroPython usando la función bytearray

import framebuf
buffer = bytearray(logo)
fb = framebuf.FrameBuffer(buffer,WIDTH,HEIGHT,framebuf.MONO_HLSB)
oled.fill(0)
oled.blit(fb,0,0)
oled.show()

Código de Ejemplo

A continuación puedes descargar el código de ejemplo donde visualizamos un texto en el display, el logo de Raspberry Pi y finalmente creamos un plano cartesiano para graficar la variación de voltaje del potenciomentro. El código también lo puedes descargar de mi GITHUB.

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (4)

buen dia, queria hacer 2 pregunticas, la primera que diferencia hay entre micropython y circuitpython? y la segunda, no he tenido la oportunidad de trabajar aun con los modulos esp32 pero veo que hay modulos de 38 pines y otros de 30, cuales son las diferencias sustanciales?

Responder

CircuitPytho es una derivación de MicroPython creado por Adafruit para fines educativos y de tal forma que sea más entendible para quien inicia en este mundo. CircuitPython está diseñado por Adafruit para placas Adafruit y no es compatible con ninguna otra cosa.
Los modulos ESP en sí son el microcontrolador, solo que hay diferentes empresas o plataformas que crean su circuito y que tienen como corazón los módulos ESP. Solo que existen diferentes modelos de ESP, dependiendo del modelo, puede tener interfaces I2C, SPI, PWM, etc. Lo que debes hacer es verificar el datasheet de cada placa y ver cual se adapta más a tus necesidades.

Responder

Muchas gracias por tu respuesta Ing. Sergio, solo queria acotar que estuve investigando y tambien hay circuitpython para raspberry pi pico (no solo para placas Adafruit) circuitpython tiene su propio firmware para la pico que es el CircuitPython 6.3.0 en formato .uf2 y se puede descargar aqui:

https://circuitpython.org/board/raspberry_pi_pico/

Responder

Excelente Jorge, gracias por el aporte. Saludos!!

Responder