En esta práctica necesitaremos trabajar en pareja para contar con dos CyberPi: uno actuará como controlador (mando a distancia) y el otro como receptor, encargado de ejecutar las órdenes en el chasis del mBot2.
La comunicación entre ambos se realizará a través de internet, por lo que será imprescindible disponer de una red Wi-Fi con acceso y contraseña conocida. Y aprenderemos a utilizar los bloques de conexión a Wi-Fi y a verificar si la conexión se ha establecido correctamente.
La comunicación será unidireccional, es decir, uno de los dispositivos enviará las órdenes (Master) y el otro las recibirá y ejecutará (Esclavo).
El objetivo de esta práctica es controlar el movimiento del mBot2 mediante una comunicación inalámbrica, permitiendo enviarle órdenes desde un mando a distancia. Para ello, programaremos dos dispositivos CyberPi: uno actuará como emisor, enviando instrucciones por internet según los botones que se pulsen; el otro será el receptor, encargado de dirigir el movimiento del mBot2 según los mensajes que reciba.
Para que esta comunicación funcione correctamente, ambos CyberPi deben estar conectados a la misma red Wi-Fi, lo que garantizará una conexión estable entre ellos.
El algoritmo mostrado a la izquierda permite conectar el CyberPi a una red Wi-Fi. Mientras se establece la conexión, se mostrarán puntos en la pantalla para indicar que el dispositivo está trabajando y no se ha quedado bloqueado. Una vez conectado correctamente, aparecerá el mensaje "¡Conectado!" en pantalla.
Los bloques turquesa se utilizan para enviar, recibir y analizar mensajes a través de internet, mientras que los bloques azules nos permiten controlar el movimiento, tanto de los motores con encoder (encargados del desplazamiento del mBot2) como del servo conectado al puerto S1, si se desea usar uno.
Como en todas las prácticas, comenzamos implementando el código base de la práctica 0 y la secuencia para reiniciar el CyberPi.
Al presionar el botón "Start", el CyberPi se conectará a la red Wi-Fi que hayamos configurado. Una vez establecida la conexión, cada vez que pulsemos un botón del mando se enviará un mensaje por la red con un determinado código (yo he utilizado un flag y bloques de eventos para gestionar esto).
Cada mensaje enviado por la red contiene un nombre y un valor (que no necesariamente tiene que ser un número), funcionando como una especie de variable compartida. Dado que todos los dispositivos estarán conectados a la misma red, es muy importante que el nombre de esa "variable" sea único para evitar interferencias entre distintos grupos.
En el ejemplo de los bloques anteriores, yo he utilizado "CR-P1" (Control Remoto - Profesor 1), pero vosotros podéis usar cualquier nombre clave o combinación “secreta” que os permita identificar vuestro mando y evitar que otros puedan controlar vuestro robot accidentalmente.
En cuanto al valor del mensaje, podéis usar cualquier combinación de letras o palabras. En mi caso, por comodidad, he elegido las teclas ‘W’, ‘A’, ‘S’, ‘D’ para representar los movimientos de dirección (como en muchos juegos de ordenador), y la letra ‘B’ para el botón que acciona el servo.
En este otro CyberPi, que actuará como receptor, también debemos implementar el código base. Al presionar el botón B (Start), se conectará a la misma red Wi-Fi que el CyberPi emisor (o Master), siguiendo el mismo procedimiento de conexión.
Una vez conectado, este CyberPi receptor estará preparado para escuchar continuamente los mensajes enviados a través de internet. Por cada mensaje recibido, buscará aquellos que correspondan al nombre de la variable o palabra clave que se definió previamente en el Master (por ejemplo: "CR-P1"). Esta clave actúa como un canal privado de comunicación, por lo que debe ser única y personalizada, para evitar interferencias con otros compañeros.
Cada mensaje recibido contiene un valor o código, que puede ser interpretado como una orden. Mediante bloques condicionales (si...entonces), el receptor analizará ese valor y ejecutará una acción concreta usando los bloques azules de control del movimiento del mBot2. Por ejemplo:
'W' → Avanzar
'S' → Retroceder
'A' → Girar a la izquierda
'D' → Girar a la derecha
'B' → Activar un servo (ej: levantar un brazo, accionar una pinza, etc.)
Además, podrías usar un flag para controlar si el robot está en modo activo o en pausa, según convenga.
¿Y si alguien más conoce tu palabra secreta?
Existen dos posibilidades interesantes:
Dos CyberPi Master con la misma clave y un solo receptor: Ambos mandos podrían enviar órdenes al mismo robot... pero eso puede resultar caótico y difícil de controlar.
Varios receptores con la misma clave y un único Master: Con un solo mando se podrían controlar varios robots a la vez, algo útil para algunas dinámicas de grupo.