Programación Dirigida por Eventos
Del cambio eléctrico en un pin al onClick de Android: fuentes, eventos y receptores; callbacks, listeners y despacho; Observer, pub/sub y MVVM; bucles de eventos y colas.
Profesorado: Borja Miguel Peñuelas Morales · José Enrique Montero Prieto
Temas
Entorno ESP32-C3 con VS Code y PlatformIO
Prepara y verifica Git, VS Code y PlatformIO en Windows o macOS, compila firmware real para la ESP32-C3 sin tener la placa y sigue el recorrido de un evento desde el pin GPIO hasta loop().
- Práctica
Prepara tu entorno: Git, VS Code y PlatformIO
Comprueba tu equipo, instala las herramientas en Windows (Git Bash) o macOS (zsh), entiende platformio.ini y compila la plantilla hasta obtener firmware.elf y firmware.bin. Termina diagnosticando los fallos típicos.
Sin empezar - Teoría
Del pin al loop(): el evento sin hardware
Sigue en el código de la plantilla el recorrido señal → GPIO → interrupción → ISR → estado compartido → loop(): GPIO9 y BOOT, INPUT_PULLUP, flanco FALLING, attachInterrupt, volatile y antirrebote, y compáralo con un onClick de Android.
Sin empezar
Fundamentos y origen de los eventos
Qué significa que un programa esté dirigido por eventos: quién controla el siguiente paso, inversión de control, el vocabulario fuente / evento / receptor y el viaje de un suceso desde el mundo físico (polling, interrupciones, IRQ, ISR, driver, latencia) hasta tu código. Lo aplicamos reescribiendo agenda.kt como agendaeventos.kt y clasificando diez situaciones reales.
- Teoría
El paradigma dirigido por eventos
Flujo secuencial frente a flujo dirigido por eventos, inversión de control, el vocabulario fuente / evento / receptor y el viaje de un suceso desde el mundo físico hasta tu código: polling, interrupciones, IRQ, ISR, driver y latencia.
Sin empezar - Ejercicios
De agenda.kt a agendaeventos.kt
Un menú de consola que lo decide todo, reescrito en cuatro piezas: evento, fuente, receptor y un bucle «tonto» que solo pide y entrega. Y dónde está ese bucle en Android.
Sin empezar - Ejercicios
Debate: ¿fuente, evento o receptor?
Diez situaciones de la vida real (clics, timeouts, mensajes, sensores y cambios de datos) para practicar la clasificación fuente / evento / receptor y descubrir quién escribe el bucle.
Sin empezar
Callbacks, listeners, handlers y despacho
Entregar código para que otro lo invoque: callbacks síncronos y diferidos, listeners, ciclo de vida, tablas de despacho, Observer, pub/sub, MVVM y todo lo que puede salir mal al notificar.
- Teoría
Callbacks y listeners
Qué es entregar una función para que otro la llame, las cuatro formas de escribirla, clausuras, callbacks síncronos frente a diferidos y cómo una fuente gestiona su lista de listeners.
Sin empezar - Teoría
Ciclo de vida y despacho
Quién da de baja a un listener y por qué olvidarlo fuga memoria; el mismo concepto de referencia a función en seis lenguajes; tablas de despacho en C, Kotlin y JS, y el contexto (void *ctx) que acompaña a cada callback.
Sin empezar - Teoría
Observer, pub/sub y MVVM
Ponemos nombre a lo que ya habíamos construido: el patrón Observer del GoF con sus invariantes, el bus de publicación-suscripción con topics y la pantalla como un observador más en MVC y MVVM.
Sin empezar - Teoría
Cuando notificar sale mal
La letra pequeña de publicar(): orden, altas y bajas en plena ronda, reentrancia y ciclos, antipatrones de suscripción (duplicados, bajas fallidas, callbacks tardíos, excepciones, punteros colgantes) y los errores típicos de Observer, MVP y MVVM.
Sin empezar - Ejercicios
Predice, ejecuta, diagnostica
Cinco escenas con la central de pedidos: predice la salida línea a línea, compárala con la real y diagnostica el fallo con la ficha y la lista de diez preguntas.
Sin empezar
Bucle de eventos, colas y dispatching
Del publicar que llama en el acto a una cola en medio: productor, cola, bucle y handler; FIFO y prioridades con el panel de una caldera; run-to-completion, coalescencia, colas llenas, handlers largos y el Looper de Android.
- Ejercicios
De la llamada directa a la cola
La barra del bar en Kotlin (productor, cola, bucle y handler), run-to-completion y la ficha de traza del panel de una caldera recorrida con cola FIFO y con cola de prioridad.
Sin empezar - Teoría
Bucle de eventos, colas y dispatching
Las piezas del event loop, por qué la cola absorbe ráfagas pero no sobrecargas, prioridad, coalescencia y descarte, run-to-completion y handlers largos, y cómo se ve todo dentro de Android (Looper, Handler, MessageQueue).
Sin empezar
Laboratorio · ESP32 emulado y Bluetooth
Del ESP32 emulado a tu app Android: un firmware que corre en esp-emu manda un tick cada 5 s y responde con eco por Bluetooth clásico (SPP) gracias a Bumble, y una Activity Kotlin lo recibe como eventos que llegan desde otro hilo.
- Práctica
Montar la cadena: firmware, esp-emu, Bumble y emulador
Qué tienes que conseguir, las cuatro piezas del laboratorio, por qué hace falta Bumble, la cadena SPP completa con su orden de arranque, los siete pasos con hitos verificables y cómo se trabaja el firmware.
Sin empezar - Práctica
La BluetoothActivity, eventos externos y diagnóstico
Permisos, dispositivos emparejados, socket RFCOMM con el UUID SPP en un hilo aparte, hilo lector con runOnUiThread y su relación con Observer. Cierra con Windows/WSL2, los tres casos de «no conecta» y la lista de llegada.
Sin empezar
Llévate los apuntes
Markdown para editar o versión imprimible para guardar como PDF (Ctrl/Cmd + P → Guardar como PDF).