Estoy transmitiendo continuamente a 9600 bps usando las configuraciones predeterminadas para mis XBees XB24-B. La comunicación es unidireccional, el transmisor está conectado a la UART ATMega328 y el receptor está conectado a la PC a través de USB (FTDI). Aquí está la velocidad de datos real para un programa dado:
¿Porqué es eso? ¿Hay algo que pueda hacer para mejorar estas tarifas?
Editar Para tasas de baudios más altas (115200) obtengo tasas de caída de paquetes aún peores:
Editar Si hago que el Coordinador se dirija al dispositivo final, entonces la tasa de caída de paquetes cae a los niveles normales (6800 bps), lo cual no es ideal pero es mejor que el escenario anterior
Puede [reducir a cero los paquetes caídos][1] asignando la dirección de destino correcta antes de iniciar la transmisión.
¿Cuál es la intensidad de la señal y la velocidad del enlace inalámbrico? Consulte los documentos de la API de XBee, debería poder acceder a esta información. Que antenas estas usando?
La velocidad de datos sin procesar de Zigbee es de solo 250 kbit/seg en la banda de 2,4 Ghz y es un protocolo de sobrecarga muy alto. Con una intensidad de señal casi perfecta y el cifrado habilitado, solo debe esperar un rendimiento máximo de datos de ~ 20-25 kbit / seg sin personalizar la pila, un poco más sin el cifrado. El protocolo de Zigbee realmente solo admite el envío de datos que caben en un solo paquete, que en mi cabeza es algo así como 100 bytes. Si está enviando un flujo de datos, la capa de aplicación tiene que dividir esos datos en paquetes e incluir información adicional en el espacio de datos del paquete para que pueda volver a ensamblarse. Este proceso puede ser bastante lento y reducir aún más el rendimiento de datos.
La pila digimesh de Digi es un poco más rápida, ya que reduce la sobrecarga y permite paquetes más grandes.
No estoy seguro de cuál es su aplicación final prevista aquí, pero Zigbee no está diseñado para la transmisión de datos. Sirve para enviar pequeños bits de información, lecturas de sensores, instrucciones, etc. que caben en un solo paquete. Es muy posible que haya elegido el protocolo incorrecto para su aplicación.
ACTUALIZACIÓN: Con la reciente confirmación de que el Zigbee no está hecho para la transmisión de datos, sugeriría tirarlo a la basura y comprar un mejor transceptor con más funcionalidad, más rendimiento y alrededor de 1/4 del precio .
Recomiendo encarecidamente utilizar el control de flujo si es posible para abordar los paquetes perdidos. Lo más probable es que, en períodos de tiempo pequeños pero significativos, cuando un dispositivo está procesando, no está mirando sus pines UART y, por lo tanto, pierde bits/bytes y puede colgar las cosas. Al implementar el control de flujo de hardware (pines RTS y CTS), cada dispositivo puede decirle al otro cuándo está listo o no para recibir más datos.
Una vez que conecte el control de flujo, creo que logrará el mayor rendimiento que está buscando =)
Trabajo con dispositivos Bluetooth OBD que vinculan mi aplicación de Android a las redes del vehículo, por lo que trabajo bastante con conexión inalámbrica/Bluetooth.
Jader Dias
Jader Dias
Jader Dias
Jader Dias