Módulo pantalla¶
Driver de bajo nivel para el panel e-paper LCMEN2R13EFC1 (Heltec Vision Master E213, 2.13», 122×250 px útiles).
El módulo encapsula:
La configuración del bus
machine.SPI(SPI3 del ESP32-S3) y de los pines de control del header J2.La carga de las LUTs (tablas de formas de onda) requeridas por el controlador para las transiciones blanco→negro, negro→blanco, etc.
Un framebuffer en RAM de
128 × 250 / 8 = 4000bytes que se envía al panel en cada refresco.Rutinas de dibujo elementales (píxel, líneas, texto con fuentes 8×8 y 12×16).
El panel se maneja en dos orientaciones lógicas:
orientacion = 0→ 128×250 (retrato, nativo).orientacion = 90→ 250×128 (apaisado, rotación por software).
Nota
El refresco es bloqueante. La función Pantalla.actualizar()
espera al pin BUSY del panel, por lo que puede tardar varios
segundos (típicamente ~2 s en modo completo).
Advertencia
Este driver asume que los módulos fuente_8x8 y
fuente_12x16 están disponibles en el frozen o en el sistema
de archivos del microcontrolador, y que exponen respectivamente los
diccionarios PATRONES y PATRONES_12x16.
- copyright:
2024
- license:
MIT
- class pantalla.Pantalla(orientacion=90)[fuente]¶
Bases:
objectDriver del panel e-paper LCMEN2R13EFC1.
- Parámetros:
orientacion (int) –
0para retrato (128×250) o90para apaisado (250×128). Cualquier otro valor lanzaValueError.- Variables:
orientacion (int) – Orientación lógica actual.
ancho (int) – Ancho lógico en píxeles (depende de la orientación).
alto (int) – Alto lógico en píxeles (depende de la orientación).
buffer (bytearray) – Framebuffer en formato 1 bit por píxel, con
ANCHO_FISICO // 8bytes por fila.inicializado (bool) –
Truesi el panel ya recibió la secuencia de inicialización y aún no se ha dormido.
- __init__(orientacion=90)[fuente]¶
Construye el objeto
Pantalla, configura el bus SPI y reserva el framebuffer. No inicializa el panel; eso ocurre de forma perezosa al llamar ainicializar()oactualizar().- Parámetros:
orientacion (int) –
0(retrato) o90(apaisado).- Muestra:
ValueError – Si
orientacionno es0ni90.
- inicializar()[fuente]¶
Ejecuta la secuencia de arranque del panel: habilita
VEXT, aplica un reset por hardware, espera a queBUSYse libere y carga las LUTs.Es idempotente: si
inicializadoya esTrue, retorna sin hacer nada.
- pixel(x, y, color=1)[fuente]¶
Escribe un píxel en el framebuffer aplicando la rotación correspondiente a
orientacion.Las coordenadas fuera del área lógica se ignoran silenciosamente.
- actualizar()[fuente]¶
Envía el framebuffer al panel y dispara un refresco completo.
La secuencia es:
PON(0x04) — enciende la fuente de alimentación interna.DTM1(0x10) — envía los datos antiguos (todo blanco).DTM2(0x13) — envía el framebuffer actual.DRF(0x12) — ejecuta el refresco (bloqueante).POF(0x02) — apaga la fuente de alimentación.
Al finalizar,
inicializadose restablece aFalsepara forzar una nueva inicialización en el próximo refresco.Nota
Este método puede tardar varios segundos dependiendo de la cantidad de píxeles que cambien.