Saltar a contenido
← Volver a OPRobots.org

Comunicaciones

IRTimer usa cuatro canales de comunicación: ESP-NOW entre módulos, WiFi + HTTP/SSE para el overlay web, RC5 IR para control remoto, y Serial UART para debug.

Interfaces de Comunicación

Interfaz Periférico Velocidad Propósito
ESP-NOW WiFi 2.4 GHz Comandos START/STOP (aux → principal)
WiFi STA+AP WiFi 2.4 GHz Servidor web + overlay OBS
HTTP + SSE TCP/80 Página web + eventos en tiempo real
RC5 IR TSSP77038TR ~1.8 kbps Control remoto infrarrojo
Serial UART USB-CDC 115200 baud Debug y logging

ESP-NOW

Protocolo peer-to-peer de Espressif para comunicación entre módulos sin necesidad de WiFi tradicional.

Parámetros

Característica Detalle
Dirección Aux → Principal (unidireccional)
Canal Detectado por escaneo WiFi del SSID
Payload 1 byte
Retransmisión client_start() reintenta; client_finish() no

Formato de Paquete

Campo Bytes Descripción
DATA 1 Código de comando

Comandos

Valor Nombre Significado
27 START Inicio de cronómetro / nueva vuelta
42 STOP Parada del cronómetro

Flujo de Comunicación

sequenceDiagram
    participant Wall as Pared Aux
    participant Main as Módulo Principal
    participant Web as Web Overlay

    Note over Wall: Robot detectado
    Wall->>Main: ESP-NOW: 27 (START)
    Main-->>Web: SSE: start
    Note over Main: Cronómetro en marcha

    Note over Wall: Robot cruza meta
    Wall->>Main: ESP-NOW: 42 (STOP)
    Main-->>Web: SSE: stop
    Note over Main: Cronómetro parado

    Note over Wall: Nueva vuelta
    Wall->>Main: ESP-NOW: 27 (LAP)
    Main-->>Web: SSE: lap

Callback de Recepción

web.cpp:286-309

static void data_receive(const uint8_t *mac_addr,
                         const uint8_t *incomingData, int len) {
    if (incomingData[0] == 27) {
        stopwatch_disable_sensor_check();
        stopwatch_lap();
    } else if (incomingData[0] == 42) {
        stopwatch_disable_sensor_check();
        stopwatch_lap();
        stopwatch_stop();
    }
}

Al recibir cualquier comando, el sensor IR del módulo principal se deshabilita (no hay función de re-habilitación). Ver SS-01.


WiFi + Server-Sent Events

El módulo principal opera en modo STA+AP y sirve un overlay web con actualizaciones en tiempo real vía Server-Sent Events (SSE).

Parámetros WiFi

Característica Detalle
Modo STA + AP
SSID Variable de entorno IRTIMER_WIFI_SSID
Contraseña Variable de entorno IRTIMER_WIFI_PASS
Puerto 80
Servidor ESPAsyncWebServer

Eventos SSE

Evento Disparador Datos
start web_start() time_ms
stop web_stop()
lap web_lap() lap_time_ms, lap_number, last_lap_ms, best_lap_ms
reset web_reset()

Rate Limiting

Función Rate Limit
web_start() 1 evento/segundo
web_lap() 1 evento/segundo
web_reset() 1 evento/segundo
web_stop() Sin rate limit

⚠️ Advertencia: web_stop() tiene el rate limit comentado. Ver CM-02.

Overlay Web

sequenceDiagram
    participant Browser as Navegador (OBS)
    participant ESP32 as ESP32-C3
    participant Stopwatch as Cronómetro

    Browser->>ESP32: GET / (index.html)
    ESP32-->>Browser: HTML + CSS + JS
    Browser->>ESP32: GET /events (SSE)
    Note over Browser,ESP32: Conexión SSE abierta

    Stopwatch->>ESP32: start/lap/stop/reset
    ESP32-->>Browser: event: start/lap/stop/reset
    Note over Browser: UI se actualiza en tiempo real

La página web usa Bootstrap 5.3.3 con tema oscuro, diseñada como overlay para OBS Studio. El cronómetro se actualiza cada 8 ms en el cliente vía setInterval(__handleTimer, 8).


RC5 IR

Protocolo infrarrojo RC5 decodificado por software en una ISR.

Hardware

Característica Detalle
Receptor TSSP77038TR (38 kHz)
Pin GPIO 7 (IR_PIN)
Interrupción CHANGE (ambos flancos)
Frecuencia portadora 38 kHz (demodulada por el receptor)
Bit rate ~1.8 kHz (889 µs por half-bit)

Timing

Parámetro Valor
Short mínimo 444 µs
Short máximo 1333 µs
Long mínimo 1334 µs
Long máximo 2222 µs

Formato de Trama

Campo Bits Descripción
Start S1 1 Bit de inicio (siempre 1)
Start S2 1 Bit de inicio (siempre 1)
Toggle 1 Cambia en cada pulsación
Address 5 Dirección del dispositivo
Command 6 Comando

Direcciones

Dirección Nombre Uso en IRTimer
0x0B (11) Program RESET del cronómetro
0x07 (7) Computer STOP del cronómetro

Decodificador

rc5.cpp:1-147

El decodificador implementa la máquina de estados del algoritmo Clearwater con 4 estados y una tabla de transición trans[] = {0x01, 0x91, 0x9B, 0xFB}. Los comandos decodificados se convierten en RC5_EVENTS que la máquina de estados de pantalla procesa en control_manage_pending_event().


Serial UART

Parámetro Valor
Interfaz USB-CDC
Baudrate 115200
Formato 8N1
Uso Serial.print / Serial.println para debug

Documento generado el 2026-06-29. Ver también Arquitectura Software, Sensores, Debug.