📱 Bluetooth: Eventos del Móvil📡 LoRa: Radiofrecuencia🛡️ Filtro: Seguridad Anti-Eco
graph TD %% --- ESTILOS --- classDef ble fill:#e1f5fe,stroke:#01579b,stroke-width:2px; classDef logic fill:#fff9c4,stroke:#fbc02d,stroke-width:2px; classDef lora fill:#ffe0b2,stroke:#e65100,stroke-width:2px; classDef success fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px; classDef fail fill:#ffebee,stroke:#c62828,stroke-width:2px; %% --- CARRIL 1: MUNDO BLUETOOTH (ASÍNCRONO) --- subgraph BLE_World [🔵 MUNDO BLUETOOTH] direction TB App[📱 App Android] -->|Envía 'LEER'| BLE_RX(📥 Callback RX) BLE_RX -->|Detecta Comando| Flag[🚩 Levantar Bandera 'solicitarDato'] end %% --- CARRIL 2: BUCLE PRINCIPAL (SÍNCRONO) --- subgraph Loop_World [⚙️ PROCESADOR ESP32] Start(🔄 Inicio Loop) --> CheckFlag{❓ ¿Bandera Arriba?} CheckFlag -- No --> Sleep(💤 Reposo / Pantalla) Sleep -.-> Start CheckFlag -- Sí --> Action[🏁 Bajar Bandera] Action --> LoRa_TX end %% --- CARRIL 3: MUNDO LORA (RADIO) --- subgraph LoRa_Logic [📡 TRANSACCIÓN RADIO] LoRa_TX[📢 TX: 'REQ_HUM']:::lora --> Timer[⏳ Iniciar Cronómetro 4 Segundos]:::logic Timer --> Wait{❓ ¿Hay Datos?}:::lora Wait -- No --> CheckTime{⏰ ¿Tiempo Agotado?}:::fail CheckTime -- No --> Wait CheckTime -- Sí --> ErrorBLE[❌ Notificar BLE: 'ERROR TIMEOUT']:::fail Wait -- Sí --> ReadMsg[📨 Leer Mensaje]:::lora ReadMsg --> Filter{🛡️ FILTRO ANTI-ECO ¿Empieza por 'HUM:'?}:::logic Filter -- No (Es 'REQ_HUM' rebotado) --> Ignore[👻 Ignorar Eco]:::fail Ignore --> CheckTime Filter -- Sí (Es el Dato Real) --> Success[✅ Éxito]:::success end %% --- CONEXIÓN FINAL --- Success --> NotifyBLE[🔔 Notificar BLE: 'HUM: 60.5']:::ble ErrorBLE --> End((Fin)) NotifyBLE --> End %% ASIGNACIÓN DE CLASES class App,BLE_RX,Flag,NotifyBLE ble; class Start,CheckFlag,Action,Sleep,Timer,Filter logic;
Diagrama Visual: Cerebro del Sensor Slave
🛡️ El Cerebro del Sensor Slave (Corregido)
Leyenda Táctica: 🔵 Zona Azul: Escucha pasiva. 🔴 Barrera Roja (Anti-Eco): Ignora órdenes repetidas (< 2.5s). 🟣 Barrera Violeta (Anti-Colisión): Espera 1.5s para no pisar al Repetidor.
graph TD %% --- DEFINICIÓN DE ESTILOS --- classDef listen fill:#e3f2fd,stroke:#2196f3,stroke-width:2px,rx:10,ry:10; classDef filter fill:#ffebee,stroke:#e53935,stroke-width:2px,rx:5,ry:5; classDef work fill:#e8f5e9,stroke:#43a047,stroke-width:2px,rx:5,ry:5; classDef wait fill:#f3e5f5,stroke:#8e24aa,stroke-width:3px,stroke-dasharray: 5 5,rx:5,ry:5; classDef tx fill:#fff3e0,stroke:#fb8c00,stroke-width:2px,rx:5,ry:5; %% --- EL BUCLE INFINITO --- Start(("👂 ESCUCHANDO")):::listen --> Msg{"⚡ ¿Llegó Mensaje?"}:::listen Msg -- No --> Start Msg -- Sí --> Check{"¿Dice 'REQ_HUM'?"}:::listen Check -- No (Ruido) --> Start %% --- BARRERA 1: ANTI-ECO --- subgraph Defense1 [🛡️ BARRERA 1: MEMORIA ANTI-ECO] direction TB Check -- Sí --> TimeCheck{"🧠 ¿Hace menos de 2.5s?"}:::filter TimeCheck -- Sí (Es un Eco) --> Ghost["👻 IGNORAR ECO"]:::filter Ghost --> Start end %% --- ZONA DE TRABAJO --- TimeCheck -- No (Orden Nueva) --> Mark["📝 Anotar Hora"]:::work Mark --> Read["🌡️ Leer Sensor DHT11"]:::work Read --> Pack["📦 Crear Paquete"]:::work %% --- BARRERA 2: ANTI-COLISIÓN --- subgraph Defense2 [🛑 BARRERA 2: ANTI-COLISIÓN] direction TB Pack --> Wait["⏳ ESPERA TÁCTICA (1500 ms)"]:::wait Note["Evita chocar con el Repetidor"] -.-> Wait end %% --- TRANSMISIÓN --- Wait --> Radio["🚀 TRANSMITIR DATOS"]:::tx Radio --> Start
I am raw html block. Click edit button to change this html
Arquitectura Heltec LoRa Mesh
HELTECMESH
Sistema de Telemetría LoRa Mesh
Una arquitectura IoT avanzada bajo demanda que une Bluetooth Low Energy y LoRa mediante nodos Heltec V3.
868/915 MHz
ESP32-S3
SX1262
Arquitectura del Sistema
El sistema utiliza una pila de comunicación multicapa. El usuario inicia las solicitudes a través de una App Móvil (Bluetooth), que se conecta a un Gateway Maestro. El Gateway traduce esto en una señal LoRa de largo alcance, saltando a través de un Repetidor para llegar al Sensor Esclavo distante.
📱
App Móvil
Interfaz de Usuario
Bluetooth LE
📡
Gateway Maestro
Traductor de Protocolo
BLE ↔ LoRa
🔁
Repetidor
Extensor de Rango
Almacenar y Reenviar
🌡️
Sensor Esclavo
Adquisición de Datos
Respuesta Inteligente
Protocolo Anti-Colisión
En una red Mesh, las transmisiones simultáneas causan colisiones. Para prevenir esto, nuestro protocolo implementa una estricta segmentación temporal. El gráfico ilustra el Retardo Táctico de 1500ms que el Esclavo impone para permitir que el Repetidor termine de transmitir antes de que el Esclavo intente responder.
Solicitud Maestro: t=0ms
Eco Repetidor: t=100ms
Zona de Espera Esclavo: 1.5 Segundos
Respuesta Esclavo: t=1600ms
Flujo Lógico Inteligente del Esclavo
El Nodo Sensor no es pasivo; filtra activamente el tráfico. Debe distinguir entre el comando original y el eco del Repetidor, y debe gestionar el tiempo de su transmisión para evitar interferir con la red.
Visualización del Árbol de Decisión
👂 Modo ESCUCHA
↓
⚡ Recibido "REQ_HUM"
↓
Defensa 1: Anti-Eco
🧠 Revisar Memoria ¿Activo < 2.5s?
↓ (Si No)
🌡️ Leer Sensor DHT11
↓
Defensa 2: Anti-Colisión
⏳ ESPERA 1500ms Dejar terminar al Repetidor
↓
🚀 TRANSMITIR Respuesta
Ventana de Rechazo de Eco
El sistema ignora comandos duplicados durante 2.5 segundos después de una operación válida. Esto previene el problema de "Doble Respuesta" causado por los ecos del Repetidor.
Eficiencia y Ciclo de Trabajo
Al usar una arquitectura "Bajo Demanda" en lugar de transmisión continua, el sistema logra un ahorro masivo de energía. La radio solo está activa durante la breve ventana de transmisión, permaneciendo en modo de escucha de bajo consumo la mayor parte del tiempo operativo.