Unidad 7
Introducción 📜
Sección titulada «Introducción 📜»En unidades anteriores, exploraste cómo conectar un dispositivo físico (micro:bit) a una aplicación web usando Web Serial y también cómo conectar dos ventanas del navegador en tu propio computador usando Node.js y Socket.IO.
Ahora, daremos un paso más allá en la conectividad. Usaremos un dispositivo que llevas contigo a todas partes, tu teléfono celular, como un dispositivo de entrada. Capturaremos los eventos táctiles (touch) en una página web simple en tu celular y enviaremos esa información en tiempo real a una aplicación p5.js, que se ejecutará en el navegador de tu computador.
Para lograr este “puente” entre dispositivos, utilizaremos Node.js y Socket.IO como servidor intermediario, similar a la unidad anterior. Sin embargo, como tu celular y tu computador no estarán (inicialmente) en la misma red local o no podrán “verse” directamente, introduciremos una herramienta poderosa: Microsoft Dev Tunnels (accesible a través de VS Code) para exponer de forma segura nuestro servidor local a Internet.
Set: ¿Qué aprenderás en esta unidad? 💡
Sección titulada «Set: ¿Qué aprenderás en esta unidad? 💡»Al finalizar esta unidad, serás capaz de:
- Configurar y utilizar VS Code Port Forwarding (Dev Tunnels) para exponer un servidor Node.js local a Internet de forma segura.
- Implementar una aplicación cliente en un dispositivo móvil (teléfono) que capture eventos táctiles y los envíe a un servidor Node.js usando Socket.IO.
- Implementar una aplicación cliente en un computador de escritorio que reciba datos en tiempo real desde el servidor Node.js (originados en el móvil) y los utilice para controlar una visualización p5.js.
- Utilizar JSON para estructurar y transmitir datos complejos (coordenadas táctiles) entre cliente y servidor.
- Analizar y comprender el flujo completo de datos: Móvil (Touch) -> Servidor Node.js (vía Dev Tunnel) -> Escritorio (Visualización).
- Crear tu propia aplicación interactiva que conecte un dispositivo móvil y un computador usando las tecnologías aprendidas.
Actividad 01
Sección titulada «Actividad 01»👣 Pasos:
- Prepara el proyecto:
- Descarga o clona el código del caso de estudio en tu computador. El código está en este repositorio.
- Abre una terminal en la carpeta raíz del proyecto.
- Ejecuta
npm install
para instalar las dependencias (express
,socket.io
). Haz esto solo la primera vez.
- Inicia el servidor local:
- Abre la carpeta del proyecto en VS Code.
- Abre una terminal integrada en VS Code (View > Terminal).
- En la terminal, ejecuta
npm start
. - Deberías ver el mensaje:
Server is listening on http://localhost:3000
. ¡Pero aún no accedas a esa URL!
- Expón el servidor con Dev Tunnels:
- Selecciona PORTS. Click en Forward a Port (Dev Tunnels).
- En el número de puerto, selecciona
3000
(¿Por qué este?) - En la columna Visibility, selecciona
Public
. Esto permitirá que el túnel sea accesible desde cualquier lugar. - Copia la URL que aparece en la columna Forwarded Address. Esta URL es la que usarás para acceder al servidor desde tu celular.
- Envía esta URL a tu celular. Se verá algo como
https://TU-TENDRAS-UNA-DIFERNTE.use2.devtunnels.ms/
.
- Accede a las aplicaciones:
- En tu Computador: abre un navegador web y ve a la URL:
http://localhost:3000/desktop/
. Deberías ver el canvas de p5.js con un círculo rojo. - En tu Celular: abre un navegador web y ve a la URL que enviaste pero añadiendo /mobile/ al final. Algo así como esto:
https://TU-TENDRAS-UNA-DIFERNTE.use2.devtunnels.ms//mobile/
(Asegúrate de añadir/mobile/
al final). Deberías ver el canvas de p5.js con el texto “Touch to move the circle”.
- En tu Computador: abre un navegador web y ve a la URL:
- Prueba la interacción:
- Toca y mueve el dedo sobre la pantalla de tu celular.
- Observa el navegador de tu computador. El círculo rojo debería moverse siguiendo tu dedo.
- Observa la terminal donde corre
server.js
. Deberías ver mensajes “New client connected”, “Received message => …”, y “Client disconnected” cuando cierras las pestañas.
- Cierra el Port: una vez termines de hacer las pruebas NO OLVIDES CERRAR el puerto.
- ¿Si cerraste el puerto?
Seek: Investigación 🔎
Sección titulada «Seek: Investigación 🔎»Actividad 02
Sección titulada «Actividad 02»👣 Pasos: (Explicación conceptual)
-
El problema de la conexión directa:
- Cuando ejecutas
npm start
, el servidor escucha enlocalhost:3000
.localhost
(o127.0.0.1
) es una dirección especial que siempre se refiere a tu propia máquina. - Si intentaras acceder a
http://localhost:3000
desde tu celular, este buscaría un servidor en el propio celular, no en tu computador. - Podrías usar la IP local de tu computador (ej.
192.168.1.X
), pero esto solo funciona si ambos dispositivos están en la misma red Wi-Fi y no hay firewalls bloqueando. No funcionaría si tu celular usa datos móviles o está en otra red. - Necesitamos una dirección pública y accesible desde cualquier lugar.
- Cuando ejecutas
-
La solución: VS Code Dev Tunnels (Port Forwarding):
- Dev Tunnels actúa como un intermediario seguro. Crea un túnel desde una URL pública en Internet (la que obtuviste, como
https://TU-TENDRAS-UNA-DIFERNTE.use2.devtunnels.ms/
) hasta el puerto3000
de tulocalhost
. - Cuando tu celular (o cualquier cliente en Internet) se conecta a la URL pública de Dev Tunnels, el servicio de Dev Tunnels reenvía esa conexión de forma segura a través del túnel hasta tu servidor Node.js local.
- Del mismo modo, las respuestas de tu servidor local viajan de vuelta por el túnel hasta el servicio Dev Tunnels, que las entrega al cliente (celular/escritorio).
- Analogía: Es como tener un número de teléfono público (la URL de Dev Tunnels) que redirige las llamadas a tu teléfono privado en casa (
localhost:3000
), sin exponer directamente tu número privado.
- Dev Tunnels actúa como un intermediario seguro. Crea un túnel desde una URL pública en Internet (la que obtuviste, como
-
Capturando la entrada: eventos táctiles en p5.js (
mobile/sketch.js
):- p5.js ofrece funciones específicas que se ejecutan automáticamente cuando ocurren eventos táctiles en un dispositivo móvil (o simulación en escritorio).
touchMoved()
: es la función clave aquí. Se llama continuamente mientras el usuario mantiene un dedo presionado y lo mueve sobre el canvas. Dentro de esta función,mouseX
ymouseY
contienen las coordenadas actuales del toque.- Optimización (
threshold
): el código no envía un mensaje en cada pequeño movimiento detectado portouchMoved()
. Comprueba si el movimiento desde la última vez que se envió (lastTouchX
,lastTouchY
) supera un umbral (threshold
). Esto evita inundar la red con mensajes si el dedo tiembla o se mueve mínimamente, enviando solo cambios significativos. - Otras funciones útiles (no usadas en este caso base, pero relevantes):
touchStarted()
: se llama una vez cuando el usuario toca la pantalla por primera vez.touchEnded()
: se llama una vez cuando el usuario levanta el dedo de la pantalla.
Actividad 03
Sección titulada «Actividad 03»Actividad 04
Sección titulada «Actividad 04»Apply: Aplicación 🛠
Sección titulada «Apply: Aplicación 🛠»Actividad 05
Sección titulada «Actividad 05»Aplica lo aprendido
Sección titulada «Aplica lo aprendido»Evidencias 🗂️
Sección titulada «Evidencias 🗂️»Reflect: Consolidación y metacognición 🤔
Sección titulada «Reflect: Consolidación y metacognición 🤔»Para esta fase de pediré que hagas un diagrama que explique cómo funciona tu aplicación y cómo se comunican los diferentes componentes.