Cuando conectamos nuestro mBot a mBlock se crea un enlace que, desde el punto de vista del microcontrolador que está en la placa del mBot, siempre es una comunicación serie asincrónica a 115200 bps. El medio físico de la conexión puede ser por cable, bluetooth o wifi. He puesto un analizador lógio en la entrada/salida serial (pines nombrados TX, RX) y he hecho capturas de los paquetes en los tres citados casos y he encontrado que, a pesar que el comando y la respuesta conllevan muy poco tiempo (un par de milisegundos comando y respuesta), los comandos se encuentran separados entre si unos 32 milisegundos (mejor caso: conexión por cable) y unos 60-64 milisegundos (en las conexiones inalámbricas).
He aqui unas capturas de pantalla y por último un video analizando una comunciación inalámbrica.
Conexión por cable:

Conexion por bluetooth:

Conexion por 2.4 GHz:

En todos los casos, cada línea vertical gris, representa 100 milisegundos, como se puede apreciar hay mas paquetes (rayitas verticales blancas y marrones) en el mismo tiempo si la conexión es por cable que si es inalámbrica.
Ampliando un poquito:

Aqui las rayas grises están cada 8 milisegundos.
Y si ampliamos bastante más, se pueden ver los cambios de las señal bit a bit y su significado hexadecimal:
Comando

Respuesta

El mBot en el quirófano:

Le quité la cubierta, para poder levantar un poco el módulo wifi y poder intercalar las puntas de adquisición de datos del analizador lógico.
https://youtu.be/9QtT6o7STvc
¿Para que sirve todo esto?
Bien, si en el bucle principal tenemos 4 comandos al mBot, por ejemplo leer sensor de ultrasonidos, leer siguelinea, actuar sobre el motor 1 y actuar sobre el motor 2. Y si cada trasacción lleva aproximadamente 60 ms, esas cuatro transacciones llevan 240 milisegundos: 1/4 de segundo asi que nuestro bucle principal se ejecuta 4 veces por segundo.
En tiempos humanos eso es bastante rápido. Pero en 1/4 de segundo un mBot puede recorrer digamos 1cm o 2cm dependiendo de a que velocidad se encuentren sus motores.
Mas exactamente, a una velocidad de 100 mBot recorre unos 18cms por segundo y en 1/4 de segundo recorre algo menos que 2 cms.
Si estamos resolviendo la salida de un laberinto y tenemos el siguelinea hacia el frente, entre un bucle y otro: entre una consulta y otra mBot puede recorrer 2cm y darse contra la pared que tiene enfrente, antes que el programa pueda reaccionar.
¿es esto grave?
No, para nada, pero debemos tomarlo com un comportamiento normal.
Cuanto más sabemos de como funciona, mejor podemos ayudar a nuestro mBot a relacionarce con su entorno y seguramente perderemos menos tiempo tratando de refinar algoritmos que, de hecho no tienen nada de malo, simplemente hay cosas que mBot no puede hacer a tiempo.
Algo que he notado en las capturas es que el ritmo no es exactamente constante, asi que, dos ejecuciones simultaneas pueden devolver resultados parecidos pero no iguales, lo cual hace, según creo, más interesante la programación de estos aparatitos 
Saludos
Juan
Cuando conectamos nuestro mBot a mBlock se crea un enlace que, desde el punto de vista del microcontrolador que está en la placa del mBot, siempre es una comunicación serie asincrónica a 115200 bps. El medio físico de la conexión puede ser por cable, bluetooth o wifi. He puesto un analizador lógio en la entrada/salida serial (pines nombrados TX, RX) y he hecho capturas de los paquetes en los tres citados casos y he encontrado que, a pesar que el comando y la respuesta conllevan muy poco tiempo (un par de milisegundos comando y respuesta), los comandos se encuentran separados entre si unos 32 milisegundos (mejor caso: conexión por cable) y unos 60-64 milisegundos (en las conexiones inalámbricas).
He aqui unas capturas de pantalla y por último un video analizando una comunciación inalámbrica.
Conexión por cable:

Conexion por bluetooth:

Conexion por 2.4 GHz:

En todos los casos, cada línea vertical gris, representa 100 milisegundos, como se puede apreciar hay mas paquetes (rayitas verticales blancas y marrones) en el mismo tiempo si la conexión es por cable que si es inalámbrica.
Ampliando un poquito:

Aqui las rayas grises están cada 8 milisegundos.
Y si ampliamos bastante más, se pueden ver los cambios de las señal bit a bit y su significado hexadecimal:
**Comando**

**Respuesta**

El mBot en el quirófano:

Le quité la cubierta, para poder levantar un poco el módulo wifi y poder intercalar las puntas de adquisición de datos del analizador lógico.
https://youtu.be/9QtT6o7STvc
**¿Para que sirve todo esto?**
Bien, si en el bucle principal tenemos 4 comandos al mBot, por ejemplo leer sensor de ultrasonidos, leer siguelinea, actuar sobre el motor 1 y actuar sobre el motor 2. Y si cada trasacción lleva aproximadamente 60 ms, esas cuatro transacciones llevan 240 milisegundos: 1/4 de segundo asi que nuestro bucle principal se ejecuta 4 veces por segundo.
En tiempos humanos eso es bastante rápido. Pero en 1/4 de segundo un mBot puede recorrer digamos 1cm o 2cm dependiendo de a que velocidad se encuentren sus motores.
Mas exactamente, a una velocidad de 100 mBot recorre unos 18cms por segundo y en 1/4 de segundo recorre algo menos que 2 cms.
Si estamos resolviendo la salida de un laberinto y tenemos el siguelinea hacia el frente, entre un bucle y otro: entre una consulta y otra mBot puede recorrer 2cm y darse contra la pared que tiene enfrente, antes que el programa pueda reaccionar.
**¿es esto grave?**
No, para nada, pero debemos tomarlo com un comportamiento normal.
Cuanto más sabemos de como funciona, mejor podemos ayudar a nuestro mBot a relacionarce con su entorno y seguramente perderemos menos tiempo tratando de refinar algoritmos que, de hecho no tienen nada de malo, simplemente hay cosas que mBot no puede hacer a tiempo.
Algo que he notado en las capturas es que el ritmo no es exactamente constante, asi que, dos ejecuciones simultaneas pueden devolver resultados parecidos pero no iguales, lo cual hace, según creo, más interesante la programación de estos aparatitos :)
Saludos
Juan
editado 8 May '18 a las 3:01 am