【问题标题】:Discovering Bluetooth devices quickly快速发现蓝牙设备
【发布时间】:2013-03-20 09:43:01
【问题描述】:

我想做的是: 我有一个包含某些蓝牙设备(BD_ADDR)的数据库。我想知道是否有任何设备在范围内,如果是,告诉它做点什么。 一种方法是始终运行发现,创建已发现设备的列表并将其与数据库进行比较。如果找到数据库中存在的设备,我会打开与它的连接并告诉它做某事。 问题是这个过程很慢,而且要可靠地找到所有设备,查询长度必须很大,并且必须一直重复这个过程。

我的想法是只发现一次我的蓝牙,将其与我的设备配对,然后每当设备进入范围内时,与其建立连接不是通过冗长的发现,而是以某种方式使用我已经拥有的信息用于此设备。

换句话说,是否可以使用我已经知道的有关设备的信息(之前与它配对或刚刚与之建立连接)开始与它通信而无需先发现它?

谢谢你, donescamilloATgmail.com

【问题讨论】:

    标签: bluetooth


    【解决方案1】:

    您为蓝牙使用什么库以及您打算与哪种套接字进行通信?在大多数情况下,如果您知道设备的 BD_ADDR,您应该能够创建到设备的套接字连接。例如,在 BlueZ 中,您只需编写以下内容即可创建与通道 1 上已知服务器的 RFCOMM 连接:

    struct sockaddr_rc addr = { 0 };
    int s, status;
    
    // destination address
    char dest[18] = "00:17:EC:35:96:FF";
    
    // allocate a socket
    s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
    
    // set the connection parameters (who to connect to)
    addr.rc_family = AF_BLUETOOTH;
    addr.rc_channel = 1;
    str2ba( dest, &addr.rc_bdaddr );
    
    // connect to server
    status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
    

    希望这会有所帮助。

    【讨论】:

    • 我在 Windows 上使用 BTstack。不确定它是否实现了套接字通信。只是为了确认 - 如果我有一个设备的 BD_ADDRESS,我不需要任何其他信息(如 clockOffset 等)来连接它(一种或另一种方式,我会找出确切的方式)。是这样吗?谢谢,donescamilloATgmail.com
    • 是的,没错。除了 BD_ADDR 之外,您实际上不需要知道任何其他信息即可连接到设备。但是,您需要确保设备支持您尝试使用的套接字通信。 RFCOMM 可以说是最常用的套接字,所以如果 BTStack 没有实现它,我会感到惊讶。
    猜你喜欢
    • 1970-01-01
    • 2020-01-06
    • 2012-04-19
    • 2017-03-17
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多