ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Plataforma de dos capas para que centros educativos de La Rioja implementen y monitoricen patios dinámicos (recreos organizados por zonas temáticas), y para que el equipo de orientación regional estudie el impacto agregado en convivencia y bienestar.查看完整 README ↗
Plataforma de dos capas para que centros educativos de La Rioja implementen y monitoricen patios dinámicos (recreos organizados por zonas temáticas), y para que el equipo de orientación regional estudie el impacto agregado en convivencia y bienestar.
Estado actual (MVP completo + nube opcional): todos los módulos funcionan en index.html (archivo autónomo sin build) con persistencia en localStorage, que sigue siendo el almacén de trabajo (la app funciona offline en el patio). Con la nube configurada (Supabase) y una cuenta de centro, cada cambio local se replica y todos los dispositivos del centro ven lo mismo; con la cuenta de orientación regional, las vistas de la red muestran los centros y datos reales en vez de la demo.
Aplicación estática sin build. Las librerías (Leaflet, Leaflet.draw, leaflet-rotate,
turf.js) y las fuentes van incluidas en lib/ — la app funciona sin internet;
solo el fondo del mapa (ortofoto PNOA del IGN, Catastro por WMS, sin API key) y las
búsquedas necesitan conexión.
python -m http.server 8123 (o npx http-server -p 8123 .).index.html también funciona (sin service worker).Es una PWA: servida por https (o localhost) se puede "instalar" en el móvil (menú del navegador → Añadir a pantalla de inicio) y abre a pantalla completa, incluso sin cobertura en el patio.
⚠️ Al publicar cualquier cambio en index.html o lib/, subir el número de
VERSION en sw.js — si no, los dispositivos con la app instalada pueden
tardar en ver la versión nueva.
En producción: https://patiosdinamicos.com (Vercel, proyecto patiosdinamicos;
patiosdinamicos.vercel.app sigue respondiendo). Dominio registrado en Cloudflare
Registrar: los registros DNS (A del ápex y CNAME de www → cname.vercel-dns.com)
deben estar en DNS only (nube gris); con el proxy naranja Vercel no emite el
certificado. Publicar: git push (si el repo está conectado) o
vercel deploy --prod --yes desde esta carpeta.
No hay build: basta con servir la carpeta. Flujo recomendado (igual que otros proyectos del equipo, git → Vercel):
git init ya hecho) y subir a GitHub../.git push redespliega. GitHub Pages también sirve (Settings → Pages →
rama main, carpeta raíz).Cada dispositivo guarda sus propios datos (localStorage). Para mover datos entre dispositivos: Guardar y compartir → Descargar copia completa / Restaurar copia.
La app trabaja siempre contra localStorage (offline primero); la nube es una
réplica sincronizada: cada cambio local se encola en un outbox persistente
y se sube cuando hay conexión; al entrar con la cuenta o pulsar "Sincronizar
ahora" se baja el estado de la nube. Todo el código está en index.html
(buscar NUBE); sin configurar, la app queda exactamente como antes.
insert comentados al final de
schema.sql (rol centro con centro_id; rol admin sin centro).index.html en las constantes NUBE_URL y NUBE_CLAVE_ANON
(la clave anon es pública por diseño: la seguridad la pone el RLS).VERSION en sw.js.En el primer inicio de sesión de un centro cuya nube está vacía, la app ofrece "⬆️ Subir este dispositivo" para volcar todo lo local (este es el traspaso que antes se hacía con la copia completa).
En el cuadro de acceso, un centro interesado pulsa "Solicitar una cuenta" y
rellena un formulario (centro, contacto, correo, mensaje). La petición se guarda
en la tabla solicitudes_cuenta — cualquiera puede crearla sin estar
autenticado, pero solo el rol admin puede leerla. El admin (orientación regional,
panel privado) las ve en la vista ✉️ Solicitudes.
Desde ahí, "✓ Dar acceso" crea la cuenta del centro directamente desde la app: rellena/confirma los datos del centro y la app crea el usuario, da de alta el centro, los enlaza y marca la solicitud como atendida; devuelve una contraseña temporal para pasársela al centro. "Descartar" solo quita la solicitud (spam/duplicada).
Cualquier centro, con o sin cuenta, puede escribir a orientación desde la app con
el botón 💡 Propuestas (pie del menú y modal «Mi cuenta»): elige el tipo
(propuesta de mejora / comentario / algo no funciona), escribe el mensaje y, si
no tiene cuenta, indica su centro y un correo opcional. Se guarda en la tabla
sugerencias (cualquiera inserta, solo el admin lee). El admin las ve como
tercera sección de la vista ✉️ Solicitudes (la badge del menú las cuenta),
con ✉️ Responder (mailto) y ✓ Leída para quitarlas de la lista.
Requiere haber ejecutado en Supabase el bloque sugerencias de
supabase/schema.sql; hasta entonces el botón avisa con un
error claro.
dar-acceso (una vez)El botón "Dar acceso" necesita una función servidor, porque crear cuentas usa la service_role (clave maestra) que no puede vivir en el navegador. El código está en supabase/functions/dar-acceso/index.ts.
Para desplegarla sin instalar nada:
dar-acceso.supabase/functions/dar-acceso/index.ts y pulsa Deploy.SUPABASE_URL, SUPABASE_ANON_KEY y
SUPABASE_SERVICE_ROLE_KEY ya vienen inyectados en las Edge Functions.(Alternativa con CLI: supabase functions deploy dar-acceso.)
Mientras no esté desplegada, la app avisa con un mensaje claro y siempre queda el
alta manual: crear el usuario en Authentication → Users e insertar en
centros/usuarios (ver arriba), y luego Descartar la solicitud.
La misma función maneja también borrar un centro (botón 🗑️ Borrar en la vista
Centros): elimina el centro con todos sus datos (patios, incidencias, ocupación,
encuestas — por on delete cascade) y las cuentas de acceso asociadas. Si ya
tenías la función desplegada de antes, vuelve a pegar index.ts y Deploy para
que incluya la acción de borrado.
Las tarjetas de la vista Centros muestran la última conexión de cada centro.
La app la sella (centros.ultima_conexion) cuando un dispositivo del centro entra;
si esa columna aún no existe, se usa como aproximación la última actividad
registrada (patio guardado, incidencia, etc.). La columna se crea al ejecutar
schema.sql (alter table centros add column if not exists ultima_conexion …).
centros,
usuarios, patios, incidencias, ocupaciones, encuestas,
sesiones_encuesta.geometry generada sin tocar la app.(centro_id, id) y las
subidas son upsert (reintentables sin duplicar).centro_id (vía tabla usuarios
y funciones mi_centro() / soy_admin(), security definer para evitar
recursión de políticas).select sobre todas las tablas — que ya
son agregadas por diseño (curso/grupo, nunca alumnado individual) — y
gestión de la tabla centros. Para la fase de investigación formal se
añadirán vistas agregadas con mínimo k por celda.lib/, service worker), autoguardado del patio y de la rotación (sin botones
de guardar), borrados en dos toques con "Deshacer" en registros, historial de
incidencias navegable por fecha, cruce ocupación × incidencias por zona con
lectura automática, medias por pregunta de las encuestas, exportación CSV del
panel del centro, ids únicos, escapado de textos libres.metodo:'papel'). Anti dobles envíos: cada pase queda
registrado como sesión por curso y trimestre (la encuesta es anónima,
así que el control es por curso, no por persona); al repetir curso la app
avisa y pide confirmación.rotacion.banco, autocompleta las
celdas); motor analizarCentro() compartido por el panel y por el nuevo
informe del patio imprimible (lecturas automáticas, evolución del
bienestar por trimestre, tablas de zonas/incidencias/encuesta); estados
vacíos con salida, checklist "Primeros pasos" en el editor, modal de
privacidad y versión del pie leída del service worker.datos/centros-rioja.json se genera con
py datos/generar-centros.py desde el GeoJSON del mapa de centros del
Gobierno de La Rioja (bi.larioja.org, 147 centros con patio; fuera EOI, CEPA,
conservatorios y ESD). Sustituye a la lista de OSM (erratas y duplicados).
Re-ejecutar el script cada curso y subir la versión del service worker.