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?
Fuente: https://programamos.es/microbit/
Gracias a Jesús Moreno por su libro "Redes con Microbit"