ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.