如何解决 win10 端的 winRT 蓝牙丢包现象? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ALLROBOT
V2EX    问与答

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

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

    左边是 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     Solana     3078 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 11:03 PVG 19:03 LAX 04:03 JFK 07:03
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86