from machine import Pin
import time
import network
import urequests
import ujson
import ntptime
# ────────────────────────────────────────
# Configuración WiFi (¡cámbialo!)
# ────────────────────────────────────────
SSID = 'TU_WIFI'
PASSWORD = 'TU_PASSWORD'
URL_API = 'https://tu-servidor.com/api/registrar-evento' # ← TU endpoint real
def conectar_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Conectando WiFi...')
wlan.connect(SSID, PASSWORD)
timeout = 12
while not wlan.isconnected() and timeout > 0:
time.sleep(1)
timeout -= 1
if wlan.isconnected():
print('WiFi conectado →', wlan.ifconfig())
try:
ntptime.settime()
print("Hora sincronizada vía NTP")
except:
print("No se pudo sincronizar NTP")
else:
print("No se conectó al WiFi")
conectar_wifi()
# ────────────────────────────────────────
# Pines
# ────────────────────────────────────────
laser_pin = Pin(15, Pin.OUT)
button = Pin(26, Pin.IN, Pin.PULL_UP)
alarm_led = Pin(9, Pin.OUT)
laser_pin.value(1) # Láser siempre ON
alarm_led.value(0)
# Estado del sistema
sistema_armado = True # Empieza armado
intrusion_detectada = False # No hay intrusión al inicio
def obtener_hora():
t = time.localtime()
return "{:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(
t[0], t[1], t[2], t[3], t[4], t[5])
def enviar_evento(hora):
try:
payload = ujson.dumps({
"evento": "intrusion_detectada",
"fecha_hora": hora,
"dispositivo": "esp32-laser-01" # opcional: identifica tu equipo
})
resp = urequests.post(
URL_API,
data=payload,
headers={'Content-Type': 'application/json'}
)
print("Evento guardado →", resp.text[:60])
resp.close()
except Exception as e:
print("Error al enviar:", e)
# ────────────────────────────────────────
# Bucle principal
# ────────────────────────────────────────
print("Sistema INICIADO y ARMADO → esperando interrupción del haz...")
while True:
boton_pulsado = (button.value() == 0) # True = interrumpido
if boton_pulsado:
alarm_led.value(1) # LED encendido = alarma
if sistema_armado and not intrusion_detectada:
# ¡Primera detección de intrusión!
hora = obtener_hora()
print("\n¡INTRUSIÓN DETECTADA!")
print("Hora:", hora)
#enviar_evento(hora)
intrusion_detectada = True
sistema_armado = False # Desarmamos temporalmente
else:
alarm_led.value(0) # LED apagado = normal
if intrusion_detectada:
# La intrusión acaba de terminar (se soltó el botón)
print("Intrusión finalizada → sistema se REARMA automáticamente")
intrusion_detectada = False
sistema_armado = True
print("Sistema ARMADO nuevamente → esperando próxima interrupción...")
time.sleep_ms(1) # ~12-13 lecturas por segundo, suficiente