# Luz por movimiento: HC-SR501 + ESP32 + tira LED

Este paquete mantiene DHT11/ARD-360 en GPIO27 y MOSFET de la tira en GPIO23.
Añade HC-SR501 en GPIO26 (D26). Espera 30 s y transiciones 2 s por defecto.

## Cablear con USB y fuente de 12 V desconectados

Conectar según las letras impresas en el módulo, no según derecha/izquierda:

| HC-SR501 | Conexión |
|---|---|
| VCC | Alimentación de 5 V |
| OUT / DO | D26 / GPIO26 de la ESP32 |
| GND | GND común con ESP32 y fuente de la tira |

Si la ESP32 está alimentada por USB, usar el punto 5V/VIN solo si la placa
lo identifica como la línea de 5 V; en la expansión, comprobar su etiqueta.
No conectar OUT a 5 V o 12 V. El HC-SR501 típico entrega señal de 3.3 V.
No alimentar este módulo desde 3V3: requiere aproximadamente 5 V en VCC.
Si hay dudas sobre el orden de pines, enviar foto de ambos lados del módulo.

En la expansión con filas G/V/S, la señal debe llegar al pin **S de D26**.
No asumir el voltaje de la fila V. El GPIO26 no sustituye a GPIO27 del DHT11.
No se cambia el circuito de alimentación externa de la tira.

Colocar puente de disparo en **H** (repetible) y retardo TIME al mínimo.
Usar sensibilidad media como punto de partida. No forzar topes de potenciómetros.
El firmware ignora movimiento durante 60 s tras arrancar para estabilizar el PIR.

La espera de 30 s empieza cuando OUT deja de estar alto. El retardo propio
del PIR se suma: no son exactamente 30 s desde el último movimiento físico.
Un PIR detecta cambios/movimiento; una persona inmóvil puede dejar de activarlo.

## Cargar el programa

1. Descargar https://transbook.mx/homecore/assets/HomeCorePIR.zip y extraer
   en carpeta nueva. Abrir HomeCoreMonitor/HomeCoreMonitor.ino.
2. Copiar el secrets.h anterior a la carpeta HomeCoreMonitor para conservar
   Wi-Fi, UID, token y certificado. Añadir/actualizar sin duplicar:

```cpp
#define HOMECORE_SENSOR_TYPE 11
#define HOMECORE_DHT_PIN 27
#define HOMECORE_LED_ENABLED 1
#define HOMECORE_PIR_ENABLED 1
#define HOMECORE_TEMPERATURE_ENABLED 1
```

Si no conservas secrets.h, duplicar secrets.example.h como secrets.h y completar
los datos. Conservar MotionLight.h y trusted-root.h junto al .ino.

3. Arduino IDE: DOIT ESP32 DEVKIT V1, paquete ESP32 **3.3.11** (API LEDC 3.x),
   puerto USB de la placa, carga 115200. Bibliotecas: WebSockets 2.7.2,
   ArduinoJson 7.4.3, DHT sensor library 1.4.6, Adafruit Unified Sensor 1.1.15.
4. Subir y abrir Monitor Serie a 115200. Aparece HomeCore PIR v1; esperar
   `[PIR] Listo tras estabilizacion.` antes de probar movimiento.
5. Primera instalación: modo automático, 30 s sin señal, fade de 2 s, brillo100%.
   Movimiento renueva la espera; movimiento durante apagado invierte la transición.
6. En HomeCore actualizar la página y abrir **Automatización de la luz** en
   la tarjeta LED. Solo propietario cambia modo, espera, transición y brillo.
   Guardar requiere conexión y confirmación de la ESP32.

## Manual, reinicio y desconexión

Encender/Apagar cambia a modo manual persistente. El PIR no vuelve a encender
hasta seleccionar modo automático. El ACK confirma aceptación del objetivo;
el brillo reportado muestra el avance, no una medición eléctrica de la tira.
En modo manual, guardar ajustes inicia una transición a apagado.

Automático sigue funcionando sin Wi-Fi, Internet, NTP ni sesión HomeCore, en
una tarea local cada 20 ms. TLS o reconexión no bloquean su temporización.
Ajustes se conservan en NVS tras reinicio. No se conserva el estado encendido:
reinicia apagado; automático espera nuevamente 60 s de estabilización.
En manual, perder conexión apaga la salida por seguridad, como antes.

Pausar acceso de la ESP32 desde HomeCore detiene su conexión, pero NO el modo
automático local. Para desactivar ese modo seleccionar Manual mientras la placa
está conectada, esperar confirmación y apagar. Sin conexión, cortar alimentación
es la forma física de detener la luz. La interfaz marca estado sin confirmar.

## Verificación física pendiente

Compilado y probado con motor simulado y protocolo de pruebas. Comprobar en
la placa: calentamiento, movimiento, fade, 30 s tras bajar OUT, retrigger,
manual, reinicio y funcionamiento sin router.

PWM GPIO23: 1 kHz, 8 bits. La limitación del IRLB8721 a 3.3 V ya documentada
sigue aplicando; PWM no garantiza su disipación. La fuente y MOSFET deben ser
adecuados a la corriente real de la tira, también durante las transiciones.

Fuentes:
- https://docs.sunfounder.com/projects/umsk/en/latest/01_components_basic/12-component_pir_motion.html
- https://www.addicore.com/products/pir-infrared-motion-sensor-hc-sr501
- https://docs.espressif.com/projects/arduino-esp32/en/latest/api/ledc.html

## Diagnóstico PIR v2

Desde la revisión esp32-pir-2, Monitor Serie a115200 muestra cada2s una línea
`[PIR DIAG] uptime=... | GPIO26=LOW/HIGH | listo=SI/NO | movimiento=SI/NO | modo=AUTO/MANUAL | brillo=...`.
También se conservan mensajes de cambio de movimiento. La lectura se toma
cada20ms antes de aplicar warmup y modo; no depende de Wi-Fi ni del DHT11.

- `listo=NO`: todavía en estabilización de60s.
- `GPIO26=HIGH` y `listo=SI`: debe mostrar movimiento=SI, incluso en Manual.
- En Manual no hay encendido automático: volver a Automático desde HomeCore.
- `GPIO26=LOW` todo el tiempo no demuestra por sí solo que el sensor esté roto;
  verificar señal OUT, tierra común, cable y punto físico S de D26.
- Uptime que regresa a cero sin intervención indica reinicios, no un temporizador PIR.

Actualizar firmware conserva los ajustes NVS: si estaba Manual, seguirá Manual.
No pulsar Encender/Apagar al probar detección automática: esos botones seleccionan
Manual. Compartir varias líneas antes/durante/después de pasar frente al sensor.


## PIR v3: aislar reinicios con el DHT desconectado

Esta versión no lee DHT ni genera telemetría simulada cuando
HOMECORE_TEMPERATURE_ENABLED=0. En la revisión inicial de aislamiento el valor era0; por solicitud del usuario
se restauró el valor por defecto1. Mantener SENSOR_TYPE11 no activa la lectura
si se conserva un HOMECORE_TEMPERATURE_ENABLED=0 en secrets.h. Para
volver a temperatura real, reconectar y habilitar explícitamente el indicador
solo después de comprobar estabilidad del PIR.

El arranque indica PIR v3; `[DHT] Desactivado` aparece solamente si el indicador es0. SNTP se inicia una vez que
Wi-Fi tiene IP, mediante esp_netif_sntp_init, sin llamadas directas configTime.
TLS conserva validación de certificado y espera de hora correcta. No se
eliminan watchdogs ni se reduce el minuto de estabilización del PIR.

El registro recibido muestra assertion lwIP y watchdogs tras autenticación.
La lectura DHT es una sospecha para estos últimos, no una atribución resuelta
sin el ELF exacto 90af23c02 del equipo del usuario. La prueba física debe
confirmar uptime continuo superior a60s y listo=SI, antes de evaluar movimiento.

Referencia de SNTP seguro:
https://docs.espressif.com/projects/esp-idf/en/v5.2/esp32/api-reference/network/esp_netif.html


Actualización solicitada: DHT11 vuelve a estar habilitado por defecto. Mantener
HOMECORE_TEMPERATURE_ENABLED=1 y HOMECORE_SENSOR_TYPE=11 para lecturas reales
en GPIO27. El cambio de SNTP seguro permanece; validar si reaparece watchdog
al leer DHT antes de concluir que los reinicios están resueltos. El valor0
queda disponible únicamente para pruebas de aislamiento explícitas.

## Prueba de entrada sin resistencia interna (2026-10-08)

GPIO26 se configura con `pinMode(PIR_INPUT_PIN, INPUT);`, sin pull-down interno,
para probar la señal OUT del HC-SR501. El arranque identifica `OUT GPIO26 INPUT`.
Mantener OUT conectado y las tierras del PIR y ESP32 unidas durante la prueba;
con OUT desconectado la entrada puede flotar y sus lecturas no son concluyentes.
El DHT11 sigue habilitado. Esperar los 60 s de estabilización antes de evaluar movimiento.
