Micropython: Usando el Oled shield del D1 mini

La placa D1 mini es una opción sumamente interesante para nuestros proyectos alrededor del ESP8266 por su pequeño tamaño, bajo costo y la posibilidad de conectarle distintos “shields” enchufados directamente sobre la placa (como en el Arduino UNO) o empleando una placa base. En este artículo veremos como usar uno de estos shields que contiene un display Oled que nos permite mostrar textos, gráficos y hasta imágenes sencillas.

Hardware

El shield incluye una pequeña pantalla OLED (organic light emitting diode o LED orgánico) monocromo de 0,66 pulgadas con una resolución de 64×48 pixeles. Emplea el controlador SSD1306 y se conecta con la D1 mini a través dos pines empleando el protocolo I2C (SCL se conecta a D1 y SDA a D2).

OLED Shield para D1 mini

En la parte posterior tiene dos jumpers para soldar que permiten elegir la dirección I2C entre 0x3C y 0x3D. La alimentación es de 3.3 Voltios.

Jumpers para elegir la dirección I2C

Software

Para poder programar este shield vamos a precisar de dos librerías, la que implementa la comunicación I2C y la que contiene las funciones específicas del controlador SSD1306. Ambas estan incluidas entre las librerías estandard de Micropython, así que no necesitamos descargarlas ni instalarlas en nuestra placa, sólo debemos importarlas al inicio de nuestro código:

from machine import Pin,I2C
from ssd1306 import SSD1306_I2C

No voy a entrar en detalles sobre las funciones de la librería I2C, ya que no las vamos a usar de manera directa (son utilizadas por la librería del display), sólo me voy a detener en el constructor, que nos permite instanciar un objeto del tipo I2C utilizando el siguiente formato:

nombre = I2C (scl=Pin(5), sda=Pin(4), freq=frecuencia)  

nombre: Nombre del objeto perteneciente a la clase I2C

scl, sda: Pines utilizados. En el shield están conectados a los pines 5 (D1) y 4 (D2).

freq: frecuencia de trabajo de SCL (100 KHz es una velocidad standard)

Ejemplo:

i2c = I2C(scl=Pin(5), sda=Pin(4), freq=100000)  #Inicializa i2c

La clase I2C tiene varios métodos, que pueden consultarse en la documentación para mas detalle.

Para crear un objeto del tipo del display debemos usar el constructor de la clase SSD1306_I2C que importamos al inicio con los siguientes parámetros:

nombre = SSD1306_I2C (ancho, alto, dispositivo) 

nombre: Nombre del objeto

ancho: pixeles de ancho del lcd (64 en este caso)

alto: pixeles de alto del lcd (48 en este caso)

dispositivo: nombre del dispositivo I2C previamente creado

Ejemplo:

lcd = SSD1306_I2C (64,48,i2c) 

Antes de ver cada uno de los métodos, algunas de las características del display:

  • En algunos de los métodos puede especificarse el color (0=Negro, 1=Blanco)
  • Todos los métodos escriben en la memoria del display, pero no se notarán los cambios hasta que se llama al método show.
  • Para posicionar elementos en el display se usan las coordenadas x e y con origen en el ángulo superior izquierdo, variando como se ve en la imagen:
Coordenadas x,y

Ahora si, veamos cada uno de los métodos disponibles:

show (): Actualiza el contenido del display. Debe invocarse luego de los otros métodos

text (texto, posx, posy, color): Muestra texto en la posición (posx, posy) con el color indicado

pixel (posx, posy, color): Enciende un pixel en la posición (posx, posy) con el color indicado

fill (color): Rellena la pantalla con pixeles del color indicado (sirve para borrarla)

invert (modo): Invierte los colores. Si modo=1, invierte y si modo=0 vuelve a los colores originales.

scroll (dx, dy): Mueve la imagen dx, dy pixeles (pueden ser valores positivos y negativos)

contrast (contraste): Cambia el valor del contraste (entre 0 y 255) entre el color del frente y del fondo

poweron (): Prende el display

poweroff (): Apaga el display

hline (x, y, px, col): Dibuja una línea horizontal comenzando en x, y con un largo de px pixeles y con el color col.

vline (x, y, px, col): Dibuja una línea vertical comenzando en x, y con un largo de px pixeles y con el color col.

line (x1, y1, x2, y2, col): Dibuja una línea desde el punto x1, y1 al punto x2, y2 con el color col.

rect (x, y, ancho, alto, col): Dibuja un rectángulo comenzando en x, y con medidas ancho por alto y el color col.

fill_rect (x, y, ancho, alto, col): Dibuja un rectángulo relleno comenzando en x, y con medidas ancho por alto y el color col.

Ejemplos:

lcd.fill (0)
lcd.text ("Hola",10,10,1)
lcd.text ("Mundo",10,20,1)
lcd.show()
lcd.fill (0)
lcd.text ("Hola",10,10,1)
lcd.text ("Mundo",10,20,1)
lcd.invert (1)
lcd.show()

lcd.fill (0)
lcd.rect (2, 2, 62, 46, 1)
lcd.fill_rect (6, 6, 54, 38, 1)
lcd.show()

lcd.hline (0, 0, 60, 1)
lcd.vline (0, 0, 40, 1)
lcd.line (0, 0, 60, 40, 1)
lcd.show()

Espero que el artículo les haya servido para iniciarse en el uso de este shield del D1 mini. En futuras publicaciones veremos como mostrar imagenes tipo “mapas de bits”.

Cualquier duda o consulta, pueden escribir en la sección de comentarios.

Deja un comentario

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

A %d blogueros les gusta esto: