Código empleado - marcos-allen/TE2003B_OLED GitHub Wiki

El código empleado (oled.py) para verificar la funcionalidad del esquema de comunicación fue desarrollado en el lenguaje de programación Python y se desglosa a continuación.


Librerías

El código presentado comienza con la importación de las librerías. from board import SCL, SDA nos sirve para importar los pines SCA (Serial Clock Line) y SDA (Serial Data Línea) desde el módulo board, los cuales nos permiten establecer la comunicación I2C. import busio, esta biblioteca nos permite manejar la comunicación I2C. from PIL import Image, ImageDraw, ImageFond nos ayuda a poder mostrar textos o gráficos simples en la pantalla OLED. import adafruit_ssd1306 es el controlador de la pantalla OLED que nos permitirá usar la pantalla OLED. Y finalizamos con import time que nos permite el uso de la función sleep() para controlar la duración de las transiciones del contador.

from board import SCL, SDA
import busio
from PIL import Image, ImageDraw, ImageFont
import adafruit_ssd1306
import time

Configuraciones iniciales

i2c crea un objeto de comunicación I2C usando los pines SCL y SDA, disp nos permite crear un objeto de display para controlar la pantalla OLED. Después, usando disp.fill(0) llenamos la pantalla con ceros, es decir, borramos la pantalla y mostramos el contenido de memoria del display a la pantalla física usando disp.show(). Después, en las variables widt y height guardamos el ancho y el alto del display.

i2c = busio.I2C(SCL, SDA)
disp = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c)
disp.fill(0)
disp.show()
width = disp.width
height = disp.height

Función imprimeNombres

Una vez realizada las configuraciones iniciales, creamos la primera función que imprime texto a la pantalla OLED, en este caso, enviaremos nuestros nombres. Primero, en la variableimage creamos una nueva imagen en blanco y negro con el tamaño obtenido de la pantalla. Después, en draw creamos un dibujo vinculado con la nueva imagen creada. Y usamos font y draw.rectangle() para cargar una fuente predeterminada y dibujar un rectángulo. Proseguimos haciendo un delay de 2 segundos en el programa usando time.sleep(2). Finalmente, en draw.text() agregamos el mensaje a enviar junto con los saltos de línea correspondientes, y usando disp.image() y disp.show() cargamos el mensaje anterior en el buffer de la pantalla OLED y lo mostramos físicamente.

def imprimeNombres():
    image = Image.new('1', (width, height))
    draw = ImageDraw.Draw(image)
    font = ImageFont.load_default()
    draw.rectangle((200,200,width,height), outline=300, fill=270)
    
    time.sleep(2)
    draw.text((15, 20), 'Marcos\nTania\nJosé', font=font, fill=270)
    disp.image(image)
    disp.show()

Función imprimeMensaje

Creamos la función que le solicite al usuario un mensaje y lo imprima en la pantalla OLED. Primero en la variable mensaje guardamos el mensaje escrito por el usuario. Las variables image, draw y font funcionan igual que en la función anterior: crear una imagen en blanco y negro, crear un dibujo vinculado a esa imagen y cargar una fuente por defecto para poder escribir texto. Después se da un delay de 2 segundos. Finalmente, en draw.text() colocamos el mensaje recibido del usuario, y usando disp.image() y disp.show() cargamos el texto en el buffer de la pantalla OLED y lo mostramos físicamente.

def imprimeMensaje():
    mensaje = input("Ingresa un mensaje (no mayor a 50 caracteres):")
    image = Image.new('1', (width, height))
    draw = ImageDraw.Draw(image)
    font = ImageFont.load_default()
    
    time.sleep(2)
    draw.text((15, 20), mensaje, font=font, fill=270)
    disp.image(image)
    disp.show()

Llamado a funciones

El programa finaliza con la llamada a las funciones antes mencionadas; de este modo, primero se imprimen los nombres, después se solicita una vez un mensaje al usuario y posteriormente se imprime dicho mensaje.

imprimeNombres()
imprimeMensaje()