# MicroPython ESP32 - Guardián Fénix # Sensores: BME680 + ADXL345 # Servidor web para mostrar datos y registros import machine, time, ujson, network, socket, math from machine import Pin, I2C import bme680 # Asegúrate de tener la librería BME680 para MicroPython import adxl345 # ------------------- # CONFIGURACIÓN SENSORES # ------------------- i2c = I2C(scl=Pin(5), sda=Pin(4)) # BME680 bme = bme680.BME680(i2c) # ADXL345 acc = adxl345.ADXL345(i2c) # ------------------- # CONFIGURACIÓN WIFI (HOTSPOT) # ------------------- ssid = "GuardianFenix" password = "12345678" ap = network.WLAN(network.AP_IF) ap.active(True) ap.config(essid=ssid, password=password) print("Hotspot activo:", ssid) # ------------------- # VARIABLES # ------------------- registros = [] # Lista de registros aceptar_vib = False alerta_activa = False # ------------------- # FUNCIONES DE SENSORES # ------------------- def leer_bme680(): bme.measure(gas=False) temp = bme.temperature() hum = bme.humidity() pres = bme.pressure() return {"temp": round(temp,1), "hum": round(hum,1), "pres": round(pres,1)} def leer_adxl345(): x, y, z = acc.read_g() # m/s² vib = abs((x*2 + y*2 + z*2) * 2) estado = "Estable" global alerta_activa if vib > 6: estado = "Inestable" alerta_activa = True else: alerta_activa = False return {"vib": round(vib,2), "estado": estado} # ------------------- # REGISTRO AUTOMÁTICO # ------------------- def registrar(): datos = leer_bme680() vib = leer_adxl345() datos["vib"] = vib["vib"] datos["estado"] = vib["estado"] datos["hora"] = time.localtime()[3:6] # HH:MM:SS registros.append(datos) # Mantener solo últimos 100 registros if len(registros) > 100: registros.pop(0) return datos # ------------------- # SERVIDOR WEB # ------------------- def web_page(): return """
| # | Hora | Temp | Hum | Pres | Gas | Shake |
|---|