
左边是 ESP32 设备的 串口输出,右边是 win10 蓝牙客户端收到的数据
python 用的 Bleak 第三方库,这个库是基于 winRT API 实现蓝牙收发的
蓝牙设备大概每秒发送 10000~30000 字节,win10 接收端倒是没有出现什么缺句号、逗号的丢包现象,收到的字节数组比较完整,只是少了好十几个完整的包,如上图对比
ESP32 服务端:ESP32 DEVKIT V1 客户端:笔记本 win10 (自带蓝牙)
bleak.py: https://gist.github.com/allrobot/312ece60434a537cd3cad16a4110b9d4
ESP32.ino: https://gist.github.com/allrobot/69c48cab6c418b8a5c45aed76f306a8a
BLE 通常的连接间隔约为 30 到 50 毫秒,因此每秒只能发送 20 到 30 个数据包。HID 设备可以有 15 毫秒的最快间隔(取决于配置),即每秒 66 个数据包。大多数设备的最大 MTU 为 512 字节,因此这将产生 66 * 512 = 大约 34000 字节每秒 因此,ESP32 上的缓冲区可能因试图以比可能更快的速度发送数据而溢出。
我就一个调包侠,没有调试蓝牙的经验,请问 ESP32 发送缓冲区溢出通常采取什么解决措施?我需要确保高速率传输数据,避免丢包现象
PS:win10 的队列缓冲区 queue.full()一直返回 false