Para que las micro:bits puedan comunicarse usaremos la comunicación de radio a radio. Al escuchar la palabra radio solemos pensar en nuestras emisoras musicales favoritas, pero un trasceptor de radio (transmisor/receptor) se usa en las comunicaciones para generar y recibir ondas de radio que pueden contener todo tipo de información, como audio, vídeo o datos digitales. Y todas las micro:bit llevan una radio incorporada. La comunicación inalámbrica utiliza radiación electromagnética (ondas de radio y microondas) para enviar información. Las ondas de radio son esencialmente ondas electromagnéticas que se emiten desde una antena (como las antenas de un router WiFi). Por tanto, la comunicación inalámbrica es siempre broadcast, en el sentido de que las señales enviadas, por ejemplo, por un router WiFI, pueden ser escuchadas por cualquier dispositivo WiFi sintonizado en la misma frecuencia de radio.
La propuesta de redes con Microbit está basada en el libro de Jesús Moreno.
El siguiente material para el aula consta solo de una parte de su libro.
A. BROADCAST
B. MULTICAST
C. UNICAST
D. PIEDRA, PAPEL O TIJERA
¿Qué es Internet?
Fuente: https://programamos.es/microbit/
Gracias a Jesús Moreno por su libro "Redes con Microbit"
La comunicación inalámbrica (radio), como por ejemplo el WiFI o los teléfonos móviles, es una forma popular de conectarse a Internet.
En el proceso no solo aprenderás a utilizar la radio de tu micro:bit; también aprenderás acerca de la comunicación broadcast (o difusión). Las comunicaciones inalámbricas suelen ser broadcast; es decir, una micro:bit puede enviar mensajes a todas las micro:bits.
Resumiendo, este capítulo nos servirá para aprender sobre:
Comunicación inalámbrica y cómo configurar la radio de las placas micro:bit.
El concepto de broadcast y dirección broadcast.
Enviar y recibir distintos tipos de mensajes (por ejemplo, un número o un texto) utilizando broadcast.
En qué ocasiones resulta útil utilizar broadcast y en cuáles no.
La comunicación inalámbrica utiliza radiación electromagnética (ondas de radio y microondas) para enviar información. Las ondas de radio son esencialmente ondas electromagnéticas que se emiten desde una antena (como las antenas de un router WiFi). Por tanto, la comunicación inalámbrica es siempre broadcast, en el sentido de que las señales enviadas, por ejemplo, por un router WiFI, pueden ser escuchadas por cualquier dispositivo WiFi sintonizado en la misma frecuencia de radio.
En redes, la comunicación broadcast (o de difusión) significa que el mensaje enviado por un remitente se transmite a todos los receptores en una red.
Pero, ¿significa esto que la comunicación broadcast solo es posible con las comunicaciones inalámbricas? No, pero es más engorroso. Por ejemplo, en la comunicación por cable la comunicación broadcast es posible repitiendo el mismo mensaje en todos los cables.
Finalmente, los receptores pueden negarse a recibir mensajes de difusión si los mensajes no están etiquetados con una dirección de broadcast.
Una dirección broadcast (o de difusión) es una dirección especial que indica que todos los dispositivos de la red deberían recibir este mensaje.
En estos ejercicios con las placas micro:bit la dirección broadcast se va a configurar estableciendo el ID de grupo de la radio de micro:bit. Por tanto, todas las placas micro:bits deben tener el mismo ID de grupo para que la comunicación broadcast funcione.
Para la comunicación broadcast necesitamos que todas las micro:bits tengan el mismo ID de grupo de radio. Este identificador será la dirección de broadcast. Es algo parecido a lo que hacemos cuando sintonizamos el canal correcto para recibir una transmisión de televisión o una emisora de radio.
Programa tu micro:bit estableciendo el ID de grupo de radio a 0. Para ello tendrás que usar un bloque del menú Radio, como se muestra en la figura a continuación. Puedes aprender más sobre bloques de radio en https://makecode.microbit.org/reference/radio.
Figura 1: Establecer el ID de grupo de radio en MakeCode
En esta tarea vas a programar tu micro:bit para recibir mensajes broadcast enviados desde otra placa. En este caso será la placa del profe la que envíe los mensajes broadcast.
A la hora de escribir tu programa para recibir mensajes hay dos cosas que tienes que tener en cuenta.
Piensa: ¿Qué bloques del editor vas a tener que usar para poder recibir un mensaje a través de la radio?
Haciendo uso de estos bloques, ¿puedes recibir cualquier tipo de mensaje, como por ejemplo un número o un texto?
Primero vas a programar tu micro:bit para que pueda recibir un número. La placa del profe está preparada para enviar mensajes con un número del 0 al 9, así que tu programa debe recibir el mensaje y mostrar por pantalla el número recibido. Cuando lo hayas programado, avisa al profe para que puedas probar tu programa.
Cuando hayas conseguido el paso anterior, vas a programar tu micro:bit para que también pueda recibir un texto. De nuevo, programa tu micro:bit para recibir mensajes de texto y mostrar el texto recibido. Cuando la hayas programado, avisa al profe para que puedas probar tu programa. ¿Qué palabra has recibido?
Ahora es tu turno para enviar mensajes broadcast. Como somos varias personas en clase, y cada persona enviará mensajes broadcast, verás que vas a recibir un montón de mensajes. ¿Es posible saber quién ha enviado cada mensaje?
Programa tu micro:bit para que envíe un número al presionar el botón A y envíe un texto al presionar el botón B.
Amplía el programa realizado en la tarea 2 que permite recibir un texto. Ahora tu placa mostrará una cara “Triste” hasta que reciba un mensaje con el texto “Hola”. En ese momento mostrará una cara “Alegre” durante dos segundos.
Reflexiona sobre algunos problemillas que tiene la comunicación broadcast. ¿Siempre es necesario o útil enviar mensajes a todo el mundo? ¿Qué pasa con la privacidad? ¿Puede ser problemático que todo el mundo reciba todos los mensajes?
¿Es más fácil enviar mensajes broadcast en redes cableadas o inalámbricas? ¿Por qué?
En el apartado anterior experimentamos con la comunicación broadcast,o de difusión, enviando mensajes a todo el mundo. En este capítulo vamos a aprender a enviar mensajes de forma que lleguen a un grupo más pequeño de gente. Para que la actividad fluya mejor vamos a organizarnos en grupos.
La comunicación multicast (que también se conoce como multidifusión o comunicación de grupo) es un concepto interesante que usan muchas tecnologías de Internet. Por ejemplo, permite enviar vídeos de forma muy rápida a través de Internet.
En este apartado vamos a aprender sobre:
El concepto de comunicación multicast y grupo o dirección multicast.
Situaciones en las que este tipo de comunicación es útil y situaciones en las que no lo es.
En el apartado de broadcast todas las micro:bits recibían los mensajes que enviaban todas las demás micro:bits. Como experimentaste, esta situación puede ser algo confusa (¡aunque también divertida!). Hoy vamos a intentar limitar a quién puede enviar mensajes cada placa y de quién puede recibir mensajes. Esto se llama comunicación por grupos o multicast. La comunicación por grupos se usa en Internet para enviar tráfico a muchas personas al mismo tiempo. Por ejemplo, la televisión por Internet y la videoconferencia utilizan la comunicación por grupos.
En la comunicación por grupos o multicast un mensaje es enviado solo a los ordenadores que forman parte del grupo.
Para ello es necesario que los mensajes lleven una etiqueta con una dirección de grupo o dirección multicast.
Una dirección de grupo o multicast es una dirección especial que especifica que todos los dispositivos que pertenecen al grupo deberían recibir ese mensaje.
Para establecer una dirección de grupo (o ID del grupo) vamos a utilizar de nuevo el bloque “radio establecer grupo” que está en la categoría Radio, tal como hicimos en la práctica Broadcast: de una a todos. El mayor reto de este capítulo es crear los grupos de comunicación correctamente.
¿Cómo aprenden los ordenadores que existe un grupo?
¿Cómo se unen a ellos?
¿Qué ocurre cuando abandonan un grupo?
A lo largo de este capítulo tendrás la oportunidad de pensar sobre estas cuestiones mientras experimentas con la creación de grupos.
En primer lugar tenemos que decidir quiénes van a formar parte de cada grupo. Para ello, vamos a crear n grupos. Cada persona tendrá que programar una micro:bit.
En esta tarea vais a elegir un ID único para vuestro grupo (un número entre 0 y 255), y luego tendréis que configurar las radios de vuestras placas con este ID de grupo. Para ello se usa el bloque "radio establecer grupo" en el editor de bloques. Al elegir vuestro ID de grupo tenéis que lograr que sea un número único. 👁️¿Qué pasaría si dos grupos eligen el mismo número? ¿cómo podríamos asegurarnos de que esto no ocurre?
Usad la pizarra para apuntar el ID de grupo que habéis elegido y aseguraos de que es único.
Podéis reutilizar los programas del apartado A. Broadcast para enviar y recibir mensajes dentro de vuestro grupo. Tendréis que actualizarlos para contar el número de mensajes enviados y recibidos, de manera que podáis estar seguros de que solo estáis recibiendo los mensajes enviados desde vuestro grupo.
Cada persona programa su micro:bit para enviar un número aleatorio del 0 al 9 al presionar el botón A. Las placas, además, cuando reciben un número por radio lo muestran durante 2 segundos. Al presionar el botón B muestran el número de mensajes recibidos. Y al presionar los dos botones A y B a la vez, muestran el número de mensajes enviados desde esa placa. Tras jugar a enviar mensajes desde todas las placas del grupo, comprobad que estáis recibiendo correctamente todos los mensajes del grupo y que no habéis recibido mensajes de otros grupos.
¿Sería sencillo que las placas micro:bits pudieran crear los grupos automáticamente? ¿Cómo escogerían el ID de grupo? ¿Cómo podrían asegurarse de que nadie más tiene ese número? ¿Sería útil utilizar broadcast? Debatidlo en grupo.
¿Podría una micro:bit formar parte de más de un grupo? ¿Cómo habría que programar la placa para lograrlo?
La comunicación unicast, enviar mensajes a un único receptor, es la forma habitual de comunicación en Intenet. Por ejemplo, para ver una página web enviamos mensajes unicast a un servidor, que a su vez nos envía la página que hay que mostrar en el navegador.
En este capítulo vamos a enviar mensajes unicast a la placa micro:bit de otro compañero. Y en el proceso vamos a aprender ideas y conceptos fundamentales de las redes de ordenadores, incluyendo:
el concepto de unicast
el concepto de protocolo
el concepto de dirección y dirección IP
el concepto de paquete de datos y de cabecera
Este capítulo trata de la comunicación unicast. Así que, ¿qué es unicast?
Para transmitir mensajes de unos a otros, los ordenadores usan protocolos.
Es decir, que los protocolos definen la forma en que los ordenadores deberían enviar los mensajes y lo que deberían hacer cuando reciben un mensaje. En Internet, todos los ordenadores o dispositivos siguen el protocolo IP: Internet Protocol.
De acuerdo al protocolo IP, cada dispositivo recibe una dirección que debe ser única y que se llama dirección IP. Las direcciones IP se usan para implementar la comunicación unicast en Internet.
Las placas micro:bit también tienen direcciones (pero son un poco diferentes). Y en prácticas anteriores ya hemos modificado parcialmente la dirección de nuestras placas al cambiar el ID de grupo de radio.
Cuando dos ordenadores se comunican, el emisor envía un paquete de datos al receptor.
Un paquete de datos es un conjunto de datos que se envía por una red. Este conjunto de datos se compone de una parte de mensaje real (por ejemplo, una imagen o un texto) y de una o más cabeceras. Una cabecera, o encabezado, contiene información necesaria definida por el protocolo, como por ejemplo, las direcciones IP origen y destino.
Cada protocolo añade diferentes tipos de cabeceras a los mensajes.
La figura anterior muestra que los datos junto a una cabecera forman un paquete de datos. En esta figura además de las direcciones origen y destino, la cabecera de ejemplo también incluye el tipo de mensaje. El tipo de mensaje le dice al receptor si está recibiendo, por ejemplo, un texto o una imagen. Si te acuerdas, en los capítulos anteriores programábamos nuestra placa para recibir un tipo específico de mensaje (texto o número). Si los paquetes contienen una cabecera con información del tipo de mensaje sería más fácil escribir el programa del receptor.
En cualquier caso, en esta práctica vas a crear paquetes de datos añadiendo una cabecera que contendrá tan solo las direcciones origen y destino. Y así vamos a lograr comunicación unicast entre micro:bits.
En esta práctica vamos a aprender a crear paquetes de datos que contengan una dirección origen y otra destino, de manera que podamos enviar mensajes unicast a otras micro:bits. Es decir, nuestras placas recibirán todos los mensajes, pero solamente leerán los que sean para nosotros. Es como cuando llega una carta al buzón de tu piso y puede que haya cartas para diferentes personas, pero solamente abres las tuyas.
Establece el ID de radio de grupo a 0, como hicimos en la práctica Broadcast.
La micro:bit emisora tiene que añadir una cabecera a cada paquete antes de enviarlo. La cabecera incluirá:
dirección origen
dirección destino
Para crear las cabeceras vamos a trabajar con un string (texto) algo especial.
En primer lugar hay que elegir la dirección de cada placa. Podemos usar dos letras, como nuestras iniciales (por ejemplo, AG). Como tienen que ser únicas, las escribimos en la pizarra para que nadie se ponga la misma que tú. Por tanto, en la pizarra escribiríamos algo como "Alberto Gilsanz -> AG".
A continuación elige a qué persona de la clase vas a enviar un mensaje, y toma nota de su dirección. Para preparar la cabecera de cada mensaje a enviar hay que unir las direcciones origen y destino en un único texto. Para ello usaremos el bloque join (unir), de la categoría text (texto).
Ha llegado el momento de crear el paquete. Como hemos visto antes el paquete se forma con la unión de las cabeceras y el mensaje. Así que tu paquete debe contener la siguiente información:
dirección origen + dirección destino + tu mensaje
Elige el texto que quieres enviar como tu mensaje. Por ejemplo "Hola amigo/a".
Usa los bloques de texto para unir (join) tu mensaje a la cabecera.
Con esto tu micro:bit estaría lista para enviar paquetes unicast.
Cuando la micro:bit recibe un paquete tiene que decidir si lo procesa o si lo ignora. Ten en cuenta que la micro:bit recibe un único texto, pero como conocemos el protocolo que estamos utilizando sabemos que:
dirección origen: las primeras 2 letras
dirección destino: las siguientes 2 letras
mensaje: el resto
El receptor utilizará esta información para decidir qué paquetes de los recibidos van efectivamente dirigidos a ella.
Divide el texto recibido en 3 variables: dirección origen, dirección destino y mensaje. Para ello puedes usar los bloques substring of (subcadena de) de la categoría texto.
Comprueba si la dirección destino es igual a la dirección que elegiste para tu placa. Si es así, esto significa que tu micro:bit es la destinataria correcta. Si tu micro:bit no es la destinataria, sé un buen ciudadano e ignora el mensaje. ¡Hay que ser buenos!
¿Podríamos poner nuestras micro:bit en modo espía para escuchar mensajes que vayan a otras personas? ¿Cómo? ¿Es esto algo ético? ¿Cómo podrías proteger tus mensajes para que otras personas no pudieran espiarlos?
En lugar de usar direcciones origen y destino, podríamos lograr algo equivalente al unicast como hicimos en prácticas anteriores, estableciendo un ID de grupo de radio único con cada micro:bit con la que queramos comunicarnos. ¿Qué limitaciones presenta este enfoque?
En esta práctica hemos usado textos de dos letras para las direcciones. ¿Cuántas direcciones diferentes podemos tener con esta solución?
¡Juguemos a Piedra, papel o tijera!
Como sabes, es un juego de dos jugadores. Cada jugador, al mismo tiempo, forma con sus manos una de las opciones (piedra, papel o tijera). Se usan las siguientes reglas para decidir quién gana:
La piedra aplasta a la tijera.
La tijera corta el papel.
El papel cubre la piedra.
Si ambos jugadores escogen la misma forma, empatan.
La figura resume las reglas.
En este capítulo vamos a programar este juego con nuestras placas micro:bit. Y al hacerlo practicaremos:
Comunicación unicast
Uso de variables
Uso de condicionales
Para familiarizarnos con el juego, vamos a programar el juego de forma sencilla, sin comunicación entre las placas.
Usaremos el acelerómetro y la pantalla para crear un juego de piedra, papel y tijeras que puedas jugar con tus amigos
Fíjate en que el programa asigna un número a piedra, papel y tijera. Por ejemplo, piedra=1, papel=2, tijera=3.
Programa el código mostrado en la página de la actividad y descárgalo a tu micro:bit. Juega unas partidas con tu pareja. Tendréis que agitar las placas al mismo tiempo y luego decidir quién gana en base a las reglas descritas en la introducción.
El programa todavía no decide quien gana porque las placas no se comunican entre ellas. Lo decidís vosotros, como en el juego analógico...
Para jugar por radio usarás el botón A para seleccionar entre piedra, papel o tijera. Usarás el botón B para confirmar la selección y enviarla por radio. Al igual que en la tarea 1, se usará: piedra=1, papel=2, tijera=3.
Escribe un programa que haga lo siguiente:
Usa el botón A para seleccionar entre piedra, papel o tijera. Cada vez que pulses el botón A debería mostrar alternativamente un icono de cada una de las tres formas.
Usa el botón B para confirmar tu selección y enviar el número correspondiente por radio mediante comunicación unicast a la placa de tu pareja, tal como hicimos en la actividad D.Comunicación Unicast.
Añade el código para recibir un número. Cuando recibas un número, muestra el icono correspondiente en la pantalla. Por ejemplo, si recibes un 2 deberías mostrar el icono del papel.
Comprobad en pareja que podéis enviar y recibir correctamente.
Tu programa debe decidir quién gana cuando recibes un número desde la micro:bit de tu colega.
Para decidir quién gana, hay que comparar el número que tú escogiste con el número que has recibido por radio. La tabla de abajo puede ayudarte a decidir quién gana cada partida [^2]. Usando esta tabla puedes comparar Mi mano con Mano oponente. Por ejemplo, si los dos números significan piedra, es un empate y el resultado es una cara de sorpresa. Pero si Mi mano es tijera y Mano oponente es piedra, el resultado es una cara triste. Y si fuera al contrario el resultado sería una cara alegre. En base a las reglas del juego, termina de rellenar la tabla.
Una vez rellena la tabla hay que decir cómo programar estas reglas en tu código. El programa deberá:
permitir jugar partidas en base a las reglas del juego
mostrando una cara alegre si ganas tú, una cara triste si pierdes, y una cara sorprendida si es un empate.
A continuación se muestra una plantilla que puede ayudarte a programar la tabla de reglas utilizando bloques si del menú Lógica en el editor de bloques de JavaScript. El objetivo de la plantilla es darte tan solo una idea de la estructura del programa.
Como verás, en la plantilla se usan dos variables: seleccionado y recibido.
Seleccionado se establece a Verdadero cuando haces la selección de mano al presionar el botón B. Por su parte, recibido se pone a Verdadero cuando recibes la mano de tu oponente. En el bloque Por siempre, verás que solo se comprueba la jugada cuando ambas variables son Verdadero. Una vez entras en el bloque para jugar la partida, las variables se ponen a Falso para la siguiente ronda.
Una vez programadas las placas, jugad en pareja unas cuantas partidas a ver quién gana más.
¿Cómo se comprueba que hay un empate en el programa?
¿Cómo cambia la tabla si papel=2, piedra=0, y tijera=1? Dibuja la nueva tabla.
Para echar una partida contra un jugador distinto, ¿qué habría que cambiar en tu programa? Recuerda que estás usando unicast para la comunicación por radio.
¿Qué ocurre si envías tu mano al otro jugador antes de que escoja la suya? ¿Habría algún problema? ¡¿Podría hacer trampas?!
Fuente: https://programamos.es/microbit/
Gracias a Jesús Moreno por su libro "Redes con Microbit"