V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ALLROBOT
V2EX  ›  问与答

如何解决 win10 端的 winRT 蓝牙丢包现象?

  •  
  •   ALLROBOT · 2022-03-29 23:07:43 +08:00 · 1128 次点击
    这是一个创建于 996 天前的主题,其中的信息可能已经有所发展或是发生改变。

    左边是 ESP32 设备的 串口输出,右边是 win10 蓝牙客户端收到的数据

    python 用的 Bleak 第三方库,这个库是基于 winRT API 实现蓝牙收发的

    蓝牙设备大概每秒发送 10000~30000 字节,win10 接收端倒是没有出现什么缺句号、逗号的丢包现象,收到的字节数组比较完整,只是少了好十几个完整的包,如上图对比

    ESP32 服务端:ESP32 DEVKIT V1 客户端:笔记本 win10 (自带蓝牙)

    bleak.pyhttps://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

    6 条回复    2022-03-30 15:46:35 +08:00
    vibbow
        1
    vibbow  
       2022-03-30 07:42:36 +08:00
    高速传输不是应该用经典蓝牙模式么?
    ALLROBOT
        2
    ALLROBOT  
    OP
       2022-03-30 11:20:34 +08:00
    @vibbow #1 愣住了,我光顾鼓捣 BLE ,忘了经典蓝牙😂

    桌面端的蓝牙调试工具,BLE 的有 BluetoothLEExplorer ,但扫不到经典蓝牙设备,有什么调试软件能扫到经典蓝牙?
    vibbow
        3
    vibbow  
       2022-03-30 12:02:52 +08:00
    @ALLROBOT 虽然我不是搞硬件开发的
    但是经典蓝牙不是有标准的 Serial Port Profile 么?
    ALLROBOT
        4
    ALLROBOT  
    OP
       2022-03-30 13:26:37 +08:00
    @vibbow #3 我是半吊子,之前没接触硬件....我调用经典蓝牙示例项目( Arduino 的 ESP32 示例文件 SerialToSerialBT_SSP ),改代码传输传感器的数值,PC 端的总要一个软件输出经典蓝牙的特征值存储的数值、服务名、dBm 值等

    PS: 用 wireshark 捕获蓝牙数据包太麻烦了,数据包要一个个点开。。。
    vibbow
        5
    vibbow  
       2022-03-30 14:11:13 +08:00
    经典蓝牙有 Serial Port Profile 的话,配对后会直接在电脑里生成一个 COM 口。
    随便用一个 terminal 软件打开这个 COM 口,就可以看数据了。

    至于底层的蓝牙信号什么的我也不知道怎么看...
    ALLROBOT
        6
    ALLROBOT  
    OP
       2022-03-30 15:46:35 +08:00
    @vibbow #5 电脑扫不到 SPP😂

    https://forum.arduino.cc/t/bluetooth-not-working-with-windows-10-and-not-working-with-android/920136

    这个帖子完美符合我描述的情况,不同的是,我在 win10 使用 BluetoothLEExplorer 软件可以顺利和 ESP32 的 BLE 通信),手机的 BLE 调试助手 app 可以配对

    顺便一提,Arduino 的最后的回复是我发帖的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2711 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:44 · PVG 19:44 · LAX 03:44 · JFK 06:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.