En esta lección vas a aprender sobre comunicación bidireccional: enviar un mensaje a una micro:bit y recibir una respuesta a tu mensaje. También aprenderemos sobre el programa Ping, que es una herramienta muy utilizada para comprobar si dos ordenadores tienen conectividad.
Este capítulo se basa en los aprendizajes de Comunicación unicast: de una a una. Las nuevas ideas son:
La comunicación de ida y vuelta (comunicación bidireccional)
El programa Ping
El concepto de tiempo de viaje (o tiempo de ida y vuelta)
La comunicación bidireccional permite comunicación de ida y vuelta entre dos ordenadores. Es un modo de comunicación en el que la información se transmite en ambas direcciones pero no al mismo tiempo.
Con la comunicación bidireccional, por tanto, las micro:bits podrán tanto enviar como recibir mensajes. Y de este modo es posible crear protocolos en los que, cuando un equipo envía un mensaje, espera a recibir una respuesta determinada a su mensaje.
El programa Ping envía un mensaje ping para comprobar si otro ordenador está bien. Y espera que este mensaje sea respondido con un mensaje pong. Es como jugar al ping-pong pero con ordenadores y a través de redes. Si el emisor no recibe una respuesta a su ping podemos suponer que hay algún tipo de problema, bien en la red, bien en el receptor. También es problemático si la respuesta pong llega al emisor pero tarda mucho en hacerlo.
Así que el programa Ping mide el tiempo de viaje , o tiempo de ida y vuelta, round-trip-time(RTT) entre dos ordenadores para detectar este tipo de problemas.
En otras palabras, el emisor mide la diferencia de tiempo entre el momento en que envió el ping y en que recibió el pong.
RTT = Tiempo_recepción_pong - Tiempo_envío_ping
La siguiente figura muestra la relación entre ping, pong, y round-trip-time.
Además del round-trip-time (RTT), el programa Ping aporta otra información estadística. La figura de la derecha muestra un ejemplo de salida como resultado de usar la orden:
ping www.google.com en la web http://ping.eu/ping.
En este ejemplo se enviaron cuatro mensajes a www.google.com.
El RTT para cada mensaje se muestra con el valor time en cada línea. Por ejemplo, para el primer ping el RTT es 10.2 ms (milisegundos). El programa también informa de estadísticas del ping. Por ejemplo, se muestra que se han enviado 4 mensajes y se han recibido 4 mensajes. Este significa que se han perdido el 0% de los mensajes. La media del RTT (que aparece como avg) es 10.184 ms.
Con tu micro:bit, de cara a calcular el round-trip-time tendrás que usar el bloque tiempo de ejecución (ms).
En el resto de este capítulo usarás el tiempo de ejecución para calcular el RTT. Será muy útil para guardar el tiempo en el que enviaste un mensaje y también en el que recibiste un mensaje.
**Ojo: guardar el tiempo significa establecer el valor de una variable para que sea igual al tiempo de ejecución actual.
Esta actividad se hace en parejas. Juntos vais a programar vuestras micro:bits para implementar y probar el programa Ping. Tendréis que realizar cuatro tareas:
Ping usa unicast entre las micro:bits emisora y receptora. Echa un ojo al capítulo Unicast para recordar cómo se implementa la comunicación unicast.
Puedes partir del programa que desarrollaste en el capítulo anterior.
Decidid qué micro:bit va a enviar los pings y que micro:bit va a responder con mensajes pong.
Estableced los valores de las direcciones en base a esta decisión.
Diseñad la cabecera de vuestro mensaje, tanto para el paquete ping como para el pong.
El emisor del ping tiene que almacenar el tiempo justo antes de enviar un paquete ping. Entonces envía el paquete "ping".
Usa tiempo de ejecución para almacenar el momento en que se envía el ping. Envía un paquete ping a la micro:bit receptora.
La micro:bit receptora responde al mensaje ping con un mensaje "pong".
Programa la micro:bit receptora para que envíe un paquete pong unicast cuando recibe un paquete ping. La dirección destino del paquete pong debe ser la dirección de origen del paquete ping.
Cuando la micro:bit emisora recibe el pong calcula el round-trip-time.
Programa la micro:bit emisora para recibir un paquete pong. Cuando recibe un pong almacena el tiempo en el que lo ha recibido usando el tiempo de ejecución. Muestra por pantalla la diferencia entre el tiempo de envío y el de recepción. Ejecuta el programa 5 veces y escribe en una archivo de hoja de cálculo los tiempos que se muestran en la pantalla.
Contesta a las siguientes preguntas:
¿Cuál fue el RTT máximo?
¿Cuál fue el RTT mínimo?
¿Cuál fue el RTT medio?
Amplía tu programa ping para que envíe automáticamente más de un mensaje Ping. Prueba, por ejemplo, con 10 Pings. Calcula la media del tiempo de viaje de los mensajes.
El programa ping informa sobre el tiempo de viaje (RTT). Pero, ¿y si calculases el tiempo que tarda solo en la ida? ¿Es posible calcular el tiempo solo de la ida o de la vuelta? En otras palabras, ¿es posible calcular el tiempo que tarda el mensaje en llegar de el emisor al receptor?