Latencia más baja de los estándares de Wi-Fi 802.11

8

Estoy haciendo un proyecto usando un Arduino y un módulo ESP8266 que ejecuta el firmware esp-link, lo que me da la posibilidad de usar MQTT para controlar el Arduino. En cambio, había visto algo así como un módulo XBee, ¡pero son tan caros en comparación con el ESP8266! ( Si no sabe qué es ESP8266 o MQTT, no se preocupe, es suficiente saber que está utilizando TCP a través de Wi-Fi ).

Los paquetes MQTT son pequeños, por lo que el rendimiento de la red Wi-Fi nunca será un problema. Pero, la latencia y la fiabilidad son factores importantes. El sistema MQTT está utilizando TCP, por lo que debería ser lo suficientemente confiable, pero no estoy tan seguro acerca de la latencia.

Tengo la opción de usar una conexión 802.11b, .11g o .11n para la red que utiliza el ESP8266. ¿Hay algo en alguno de estos estándares que haga que uno tenga una latencia menor que cualquier otro? ¿Con qué esperaría tener el mejor rendimiento para paquetes muy pequeños e infrecuentes?

seanlano
fuente
1
En las consideraciones de latencia también existe el otro lado involucrado, además de que es un problema de calidad de implementación. No creo que los números teóricos te lleven muy lejos.
PlasmaHH
google para un artículo LWN llamado "hacer wifi rápido".
user3528438

Respuestas:

10

En primer lugar, está haciendo algo MUY correcto que muchos diseñadores y usuarios de IoT no hacen: considera el hecho de que la operación debe ser confiable y limitada por la latencia. No todos lo hacen, y es por eso que muchos dispositivos IoT son realmente malos.

La elección del estándar entre 802.11 b / g / n realmente no influirá mucho en su latencia. Supongo que tenemos latencias limitantes <10 ms, porque todo eso "solo funcionará en el 99.5% de los casos con un buen hardware WiFi".

Si estás en un escenario de latencia, ciertamente no lo harás

  • use TCP (y por lo tanto, MQTT, que se suma a eso)
  • use un dispositivo que emule un enlace en serie lento: si sus paquetes tienen 4 caracteres y tiene 9600 baudios, gastará un milisegundo solo para obtener datos del µC al dispositivo WiFi
  • use WiFi, ya que no hay garantía de que su estación pueda enviar dentro de un período de tiempo finito (solo es probable)

Si necesita confiabilidad, por otro lado, no debe

  • use UDP puro (ya que no hay garantía ni comentarios de que los paquetes lleguen a su destino)
  • usar un protocolo de radio unidireccional puro (mismo motivo)
  • use un ESP8266, lo que le da ventaja de precio por la falta de pruebas, diseño y certificación para una operación de alta confiabilidad (y, por lo tanto, ningún gran fabricante de productos electrónicos lo usará sin realizar las pruebas ellos mismos, en cuyo caso módulos listos de fabricantes confiables generalmente se vuelven más baratos)

Entonces, antes que nada, defina cuáles son sus requisitos de latencia y sus requisitos de confiabilidad. Usted debe tener un pedazo de papel que dice

La latencia para la comunicación de {uno | dos} vías debe ser <{latencia máxima} en {porcentaje tolerable}% de los casos. No debe haber una probabilidad de más del {porcentaje tolerable}% de perder un paquete.

Luego, puede ver los límites teóricos de los sistemas, y luego mirar los límites prácticos de las implementaciones de aquellos que se ajustan a eso.

Marcus Müller
fuente
En primer lugar, estás haciendo algo MUY bien ... ¡Gracias! :) Es solo un ejemplo de juguete por ahora, más que algo que planeo poner a disposición como producto real. La elección del estándar entre 802.11 b / g / n realmente no influirá mucho en su latencia. No pensé que haría mucha diferencia, pero pensé en preguntar. Todavía haré algunas de mis propias pruebas, pero obviamente no tengo el equipo para hacerlo tan a fondo como lo haría un laboratorio. En cuanto a EPS8266 y Wi-Fi, pensé que, dado que era más barato, probaría primero, y probaría otra cosa si no fuera aceptable.
seanlano
Definitivamente definiré una declaración de mi latencia aceptable y probabilidad de pérdida de paquetes, y lo usaré como mi criterio para continuar usando el ESP8266 o no.
seanlano