Bluetooth 快速发现蓝牙设备

Bluetooth 快速发现蓝牙设备,bluetooth,Bluetooth,我想做的是: 我有一个带有特定蓝牙设备(BD_ADDR)的数据库。我想知道这些设备是否在射程内,如果在射程内,告诉它做些什么。 一种方法是一直运行发现,创建发现的设备列表,并将其与数据库进行比较。如果在数据库中找到一个设备,我会打开它的连接并告诉它做些什么。 问题是,这个过程很慢,要可靠地找到所有设备,查询长度必须很大,而且这个过程必须一直重复 我的想法是只发现一次我的蓝牙,将它与我的设备配对,从那时起,每当设备进入范围时,就与它建立连接,而不是通过冗长的发现,而是以某种方式使用我已经拥有的有关

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

我的想法是只发现一次我的蓝牙,将它与我的设备配对,从那时起,每当设备进入范围时,就与它建立连接,而不是通过冗长的发现,而是以某种方式使用我已经拥有的有关该设备的信息

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

谢谢,,
donescamilloATgmail.com

您使用的蓝牙库是什么?您计划使用什么样的插座进行通信?在大多数情况下,如果您知道设备的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_地址,我不需要任何其他信息(如时钟偏移等)来连接到它(以这种或那种方式,我会找到确切的方式)。是这样吗?谢谢,donescamilloATgmail.com是的。连接到设备时,除了BD_ADDR之外,您真的不需要知道任何东西。但是,您需要确保设备支持您尝试使用的套接字通信。RFCOMM可以说是最常用的套接字,所以如果BTStack没有实现它,我会感到惊讶。