From 1e96d056604218c9dc9e8f3047f7b99926dd2118 Mon Sep 17 00:00:00 2001 From: Jarrad Ashton Brown Date: Sat, 28 Feb 2026 14:38:36 -0600 Subject: [PATCH] Added Teams code to uC --- .DS_Store | Bin 0 -> 6148 bytes main.py | 258 +++++++++++++++++++++++++++++++++++++++++++ uC/.DS_Store | Bin 0 -> 6148 bytes uC/main_uC/.DS_Store | Bin 0 -> 6148 bytes 4 files changed, 258 insertions(+) create mode 100644 .DS_Store create mode 100644 main.py create mode 100644 uC/.DS_Store create mode 100644 uC/main_uC/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..57400366e9d09285fc269b94a6bc5579d53189ad GIT binary patch literal 6148 zcmeHK&rcIU6n;~RY(Zp!7LjPOp%)W~A|MGdhFUOMje$^tMZmh<4rO6G)9h}kNJx6t z#Dhl<9{mG6arENRs|PRs10Fni)i<-#&{92cF-G?_GvAwezjnUu&g=pJNmq;40CWJ* zunCNIWA_UYcG21-qGp7V$Q(tef&&!1jML^FPJ|4E4E${jh-WtjQ?LLJfJ4*s%dLXL z3uqNv!#iwOen>$LpcC?tMSmCkjML(oKH=GmnK@XvFO+d#VBmv^&Bi&_8c9Y^MD}5Y zDpc?%>%bCLO^z|W9M6aKwR6Krd3FvLd~nFl^zu;j_vsq6Q4+= zBiebUOY72lw9V``uVsDHuX<_IT^FMj&YeO-Hw&vat>yLjJZHXXGwR9!yGYSxt3LEeO6}cAM+EZ&G9~*1=qU(*-#JYRV_MYq0`v(U5xSMvWG-q3!W$kA)=hLUYQ1be~3BP4pe0)5$vR^@;`0<3yb;qTY zt(RQ8xVW|DQ9swDujTbV&vLorEOF2FZO+y#u<&plBxU3q`?^6f_wPK-G&;xgxByEj^G1)hOh9QM9B~tC1Yfo z+$3}4F3FHb#3I|oCObiVq;Z2UseB5Ehl;$xds&w`oRx6g@NIQH)kvk#dQKG;I)@B| z4Ezrai2cF9CNQP29-!Phu#4bO*rNi4pe|k*1R4rc3hM!)1%(8mh(Rb(pBN+v$9Y5f zr4-f!48noP%9ux0Ch7}?$m%$6NOvHq0K-0HAY`DGfsSCPi}U~X@4x?BgThhBK*+#9 z#Q=#eWEaH8u{vAZ7AMYH1KSg9LWEyEKpBFaI*z3xj^bf#QqX1y1u>V!Z literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..50a16f3 --- /dev/null +++ b/main.py @@ -0,0 +1,258 @@ +# 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 """ + + + + + Guardián Fénix + + + +

🛡️ Guardián Fénix 🔥

+ +
+

🌿 Sensor Ambiental (BME680)

+
+
Temp
-- °C
+
Hum
-- %
+
Pres
-- hPa
+
Gas
-- Ω
+
+
+ +
+

📳 Vibración (ADXL345)

+
+
Shake
--
+
ax=--g
+
ay=--g
+
az=--g
+
+
+ +
+

📝 Registros

+ + + + + + + + + + + +
#HoraTempHumPresGasShake
+
+ + + +""" + +# ------------------- +# SERVIDOR +# ------------------- +addr = socket.getaddrinfo('192.168.4.1',80)[0][-1] +s = socket.socket() +s.bind(addr) +s.listen(5) +print('Servidor escuchando en', addr) + +def handle_client(cl): + try: + req = cl.recv(1024) + req = str(req) + if 'GET /data' in req: + res = ujson.dumps(registros) + cl.send('HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n') + cl.send(res) + elif 'GET /leer' in req: + d = registrar() + cl.send('HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n') + cl.send(ujson.dumps(d)) + elif 'GET /guardar' in req: + d = registrar() + cl.send('HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n') + cl.send(ujson.dumps(d)) + elif 'GET /borrar' in req: + if registros: + registros.pop() + cl.send('HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n') + cl.send(ujson.dumps(registros)) + elif 'GET /toggle' in req: + global aceptar_vib + aceptar_vib = not aceptar_vib + cl.send('HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n') + cl.send(ujson.dumps({"aceptar_vib":aceptar_vib})) + else: + cl.send('HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n') + cl.send(web_page()) + except Exception as e: + print("Error:", e) + cl.close() + +# Loop principal +while True: + registrar() + cl, addr = s.accept() + handle_client(cl) \ No newline at end of file diff --git a/uC/.DS_Store b/uC/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..383f106e3a1cf7d1799ce8df333f2059d93e2205 GIT binary patch literal 6148 zcmeHKPfrs;6n_Inwji=Vi%2xt*oz575s`!#LoE=k9w02iB4FKZhqAJrX?C}*NJx6t z#1G&H@B?__=*6Q~4_^EN9z1!~H?y`3L(D+Tz*%EJ?A;+)z#ZEF2afJvQ|@CQ zceDpZsKZ>|-fRM#Anjc zndmy#t#xa?+NQb9n`U4Ibw6i$>!P*7xobzdWv@E4S=3W=oCTJ{s3!xQGDVk-#||s= zW{%fc*_W|q*r6r0WKkd4+q*q8Ic`i&P4ABzdoz<0HYnrmd@O`vs~P9tBk*r zs|124os>R>5xhp_1P4y3p;kpcMXUO%>(RQBJ-z4qF7)dIgF^$Ufpj`Od~xK`=;-C5 zK4e>^or)*sJI7t_<=i?gI3>O$Z zS)OOH3eD|qx|U7dMV8}1z^lSjWW$9lc~oSQW1BUrCc6|V*Fr^yOsL>Z zl!`QkB=do{q`ty9qse3@`$%ktuSQ z%#sHrPo9tx*(MHo9>#Y>pZbc*r-1mVocPoY(_=1Y73_(kjt8B=mYS&6dj{tgPbp>~ zX5im4AkGH^i@>bHR*3TGz)C&=5EE#Yg1Y!Q5HW_rtio1^*n>jCP{c5ls3!&q!_jUi zzpTPmh+#MoIWp!^BNO#PA#!xI8`2#}HpIA&8HgD;&Om3_)W!Y3@cZ}w@u0XBGY~WI zUok)u^X9yG&a1n%ZE@nRHLyIxB1HJLLX;s`sq0uO;wm1&A_e;lp&(`zwn9V;O8g@r MX^5+sfxpVYFA*l_#sB~S literal 0 HcmV?d00001 diff --git a/uC/main_uC/.DS_Store b/uC/main_uC/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..249f467c5469d943a77fb2fdf8986e80a7b2b2b4 GIT binary patch literal 6148 zcmeHL&1%~~5T141WKAge(1K54p;wbSu4@RrsE%{!p_eM8hqgFUv|VFb18I zCkgZcO3#J9L0_kx*X=h;e8_my3`|YCD3IIfB8XW*s0YIV>mMYlXAQUIv zkdpIIP?$b6OkO4WJWO=BkLjoo_q8jh1V%NvcKqO?_hu)QO9f+;b@ViiGE?i@fUL+$uUebWpC2~ss@ZBU>S})2 zY}8fjS$nal$j48fzIfC7l#Eh+VMYc5*RYX?4wrC=#`U<9!GV9SN8@F1H8#@St{bat zeBAr;{p!cd^?3Bh_;`4G-=FJ%@!wjGzcxifBuPJ7Nf1j(+9xJcorv zTMok98T)Z}7Vd;1%-zwiOgae9BDc%{GqBFUmc6Xf{(pS?`G38Lub2U5;GbeZl)HYH ze)PD#bz^X}*DBOAR1(T7EMAwOVYXt-rLDMzY6Sg?3`EaiVG%tj{2^dy;D#BvR|b9q DQqO!d literal 0 HcmV?d00001