V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
McVander
V2EX  ›  程序员

Android BLE(低功耗蓝牙)相关的问题

  •  
  •   McVander · Mar 10, 2023 · 3000 views
    This topic created in 1146 days ago, the information mentioned may be changed or developed.

    Android BLE 相关问题

    前言

    最近工作中接到 BLE 相关的需求,遇到一个数据传输的问题,需要各位大佬相助。

    场景

    1.通过 Android APP 与 USB 内置的 BLE 蓝牙模块,进行通信数据交互,基于 BLE(低功耗) 2.由于蓝牙交互一定涉及到服务端、客户端,所以在调试之前,我本地已经通过两个手机能够完全模拟数据传输,已经调通

    问题

    当正式联调时,约定先尝试模拟通信( APP 端发一条消息、USB 蓝牙回一条消息)

    然后问题就来了

    在 Android 端连接时,请求 mtu 为 247 ,也收到成功指令

    然后发消息时,目前与 USB 约定是定长式交互,每次固定 128 长度,我发现我发一条,USB 回复的那条一直无法收到

    而当发送 3 4 条时,USB 蓝牙才将之前的数据一起返回。

    因为之前 BLE 的经验比较少,到这里有点判断不出来,到底是哪方面的问题,我尝试打印 onCharacteristicChanged 也发现确实没收到消息

    各位大佬有遇到过相关的情况吗?

    Supplement 1  ·  Mar 11, 2023
    最后,我找到了一种方案,根据 9 楼的冷知识,我了解到手机通过“开发者模式”可以捕捉“蓝牙包”的通信,然后根据日志在 Wireshark 上发现,USB 蓝牙模块返回的数据就是存在问题的。下周到时候再和硬件同事沟通下。谢谢各位

    https://it.cha138.com/javascript/show-81690.html
    25 replies    2023-03-11 08:20:48 +08:00
    McVander
        1
    McVander  
    OP
       Mar 10, 2023
    [Android] 这边 BLE 的实现是基于 Android_BLE_Library 这个框架,目前来看和框架无关
    https://github.com/NordicSemiconductor/Android-BLE-Library
    zhoucan007
        2
    zhoucan007  
       Mar 10, 2023 via iPhone
    先直接抓包啊,看有没有实际发送出去
    McVander
        3
    McVander  
    OP
       Mar 10, 2023
    @zhoucan007 老哥,我经验比较少,我应该如何捕获蓝牙的交互报文。(目前硬件测提供的一个 C 语言写的可执行程序,我执行之后自动捕获 USB 蓝牙的信息,然后通信)
    McVander
        4
    McVander  
    OP
       Mar 10, 2023
    @zhoucan007 目前开发环境是在 Ubuntu 上
    zhoucan007
        5
    zhoucan007  
       Mar 10, 2023 via iPhone
    用 nordic 的开发板子啊
    McVander
        6
    McVander  
    OP
       Mar 10, 2023
    @zhoucan007 是的、蓝牙模块我看是 nrf52840 模块
    codefu
        7
    codefu  
       Mar 10, 2023
    你这个 usb 的 ble 蓝牙是不是要给个回车才行?
    zhoucan007
        8
    zhoucan007  
       Mar 10, 2023 via iPhone
    @McVander 我的意思是用他们的 52840 DK 然后用 Sniffer 之类的,Wireshark
    402645707
        9
    402645707  
       Mar 10, 2023
    冷知识 Wireshark 可以通过 ADB 抓手机收到的蓝牙报文,安装的时候勾上这个支持或者直接选完整安装
    McVander
        10
    McVander  
    OP
       Mar 10, 2023
    @zhoucan007 谢了,老哥,我去和硬件同事沟通一下
    McVander
        11
    McVander  
    OP
       Mar 10, 2023
    @codefu 实际测试,发现发送数据量较小时,是能够发送一条 接收一条的 ,数据量较大时,就一块回来。
    初步怀疑和 mtu 的设置相关
    bruce0
        12
    bruce0  
       Mar 10, 2023
    winshark 我记得就支持抓蓝牙吧
    McVander
        13
    McVander  
    OP
       Mar 10, 2023
    @402645707 我研究研究看看,我刚刚一直在研究怎么捕获 USB 的蓝牙数据模块,从手机这侧的蓝牙入手也可以
    McVander
        14
    McVander  
    OP
       Mar 10, 2023
    @bruce0 USB 模块,提供读写节点那种,插上好像电脑没有蓝牙功能
    bruce0
        15
    bruce0  
       Mar 10, 2023
    @McVander app 能跑在电脑上吗 在电脑上抓
    string2020
        16
    string2020  
       Mar 10, 2023
    这几条之间 间隔多少 ms
    string2020
        17
    string2020  
       Mar 10, 2023
    这几条之间 间隔多少 ms 。所谓发消息手机和 USB 是怎么实现。
    zhoucan007
        18
    zhoucan007  
       Mar 10, 2023 via iPhone
    @402645707 额,还是得空中包吧,怕硬件不认啊……手机抓的是空中包么?
    sunmker
        19
    sunmker  
       Mar 10, 2023
    McVander
        20
    McVander  
    OP
       Mar 11, 2023
    @bruce0 不行,电脑操作不了,不过我后来找到方案了,感谢
    McVander
        21
    McVander  
    OP
       Mar 11, 2023
    @string2020 USB 蓝牙模块,为了方便测试(每条间隔是固定的 3s ),手机端是根据原生的低功耗蓝牙的 Gatt 实现的。USB 蓝牙模块在 Linux 上提供对应的读写端口来进行通信
    McVander
        22
    McVander  
    OP
       Mar 11, 2023
    @sunmker 感谢,目前就是用这一类调试助手测试得到的结果
    McVander
        23
    McVander  
    OP
       Mar 11, 2023
    最后,我找到了一种方案,根据 9 楼的冷知识,我了解到手机通过“开发者模式”可以捕捉“蓝牙包”的通信,然后根据日志在 Wireshark 上发现,USB 蓝牙模块返回的数据就是存在问题的。下周到时候再和硬件同事沟通下。谢谢各位
    Jabin
        24
    Jabin  
       Mar 11, 2023 via Android
    分包试试,每次不超过 20 字节
    McVander
        25
    McVander  
    OP
       Mar 11, 2023
    @Jabin 我们使用的场景,交互可能比较频繁,并且数据量一般情况都在 200 字节。分包感觉传输效率太低。最后能抓到蓝牙日志,问题似乎明确了一些
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3872 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 204ms · UTC 00:50 · PVG 08:50 · LAX 17:50 · JFK 20:50
    ♥ Do have faith in what you're doing.