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()