不配对就可以进行蓝牙通信吗?


35

我正在研究一种可以“立即”无线激活系统的设备。首先想到的是使用RFID技术,该技术具有即时且廉价的通信优势。但是,我有兴趣使用手机的蓝牙功能来完成此任务。

所以我的问题是,要使用蓝牙通信,是否有一种无需配对的通信方式?换句话说,在一个非常简单的级别上,假设我的蓝牙接收器正在等待代码“ abc123”。蓝牙设备(例如电话)已编程为不断发送此代码。接收到代码后,一旦授予访问权限,系统便开始执行其应做的任何事情。这样的系统当然会以安全为代价消除配对障碍。

那么这个概念可能吗?我对技术方面的蓝牙链接协议了解甚少,但是如果有人可以帮助我,我可以从这一点开始学习。不要将我有限的理解视为约束。


有一个蓝牙模式可以做到这一点,但我不知道它叫什么。它用于将本地广告发送到经过的手机。
jippie 2012年

2
有各种各样的433Mhz模块可以“即时”发送开/关信号。常用于车库门开启器。尽管它们不提供固有的安全性,但它们也便宜且易于操作。
pjc50

Answers:


24

是的,这完全有可能。我之前对此进行了评论,此后对此进行了进一步的研究。您可以让触发的蓝牙设备通过其友好名称发送激活信号。

友好名称是当您搜索要配对的蓝牙设备时出现在列表中的易于理解的名称。激活速度取决于接收设备轮询友好名称的速度。您没有提到您使用的接收设备类型,但是我发现此PDF(Pg.35)详细介绍了更新范围内蓝牙设备的友好名称的过程。

您可以根据需要轮询友好名称。如果触发设备将其友好名称更改为激活码abc123,则接收设备将能够看到该名称而无需配对并激活您要执行的任何任务。这也使您可以使用多种激活码,我认为您最多可以获取248个字节的友好蓝牙名称。

您也可以考虑故意向Bluejacking开放自己。我不熟悉它,但是如果安全性不是问题,它可能会起作用。


2
完美,这似乎是最有希望的。我喜欢友好名称方法的简单性,并且“二十一点”似乎也是一个不错的选择。
capcom 2012年

12

简短的回答是,可以不配对使用蓝牙。但是,它仍然始终是点对点链接。不使用配对也存在潜在的问题(主要是缺乏安全性以及缺乏对这种操作模式的良好支持)。是否可以完成取决于接收器的蓝牙硬件。我假设您使用的是“标准”蓝牙,而不是低功耗蓝牙(这是完全不同的,并且在移动电话中并不是特别受支持)。如果您使用的是低能耗,那么您的发送器将是低能耗的设备,而您的接收器将是侦听消息的对象。我没有使用过,所以我无法提供任何信息,因此我将坚持使用“普通”蓝牙。

如我所见,有两个问题需要克服:

  1. 关闭引脚配对

  2. 自动启动连接

首先,我将介绍2号,因为我得到的印象是这是您真正感兴趣的(如果我读错了,很抱歉)。为了通过电话或其他“主”设备执行此操作,必须连续搜索远程蓝牙设备。当它识别出一个合适的设备时,它将自动连接到它并发送一些数据或其他数据来启动所需的任何操作。其他人提到在此过程中使用了蓝牙友好名称,这无疑是做到这一点的一种方法。我对Bluetooth友好名称(特别是但不限于Microsoft Bluetooth堆栈)的经验是,它们不是一种健壮的扫描方法。使用蓝牙设备类可能会做得更好,它与唯一设备地址同时广播。该设备类别具有大量针对手机,笔记本电脑,台式机等的预定条目。如果您使用一种非标准设备类别(例如00:00:00),则可以立即进行操作过滤掉绝大多数蓝牙设备。然后,您可以连接到其余设备,并进行某种请求确认通信以启动操作。如果您使它变得晦涩难懂(或将友好名称作为第二个考虑因素),则它应隐式过滤掉所有剩余的不正确设备。


关于数字1,如果要创建瞬态连接,则引脚配对并不是特别合乎逻辑,但它仍然可能是实现所需功能的最佳方法。如果要避免引脚配对,可以将其关闭并建立未配对的连接。如何执行此操作取决于蓝牙接收器的实现,但以下是一些示例:

  1. Bluegiga WT12:使用命令SET BT AUTH *
  2. 美国国家半导体LMX9838:在安全模式1下使用GAP_SET_SECURITY_MODE命令(无配对)

等等

然后无需配对即可连接到设备。如果启动连接的设备与接收器相同,则非常简单。如果您使用的是Windows PC,则可以进行繁琐的创建新连接过程并选择“不要使用大头针”,尽管Windows在连接时可能仍会要求您提供大头针(通常可以使用0000,但是这非常片状)。如果您将python和pybluez一起使用,则非常简单:

import bluetooth
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((<insert MAC address>, <insert port number>))

但是,如果你想从移动电话连接,它就会被很多更复杂。Android SDK似乎并不真正支持未配对的连接:

当前的Android蓝牙API需要在建立RFCOMM连接之前先配对设备。(当您初始化与蓝牙API的加密连接时,将自动执行配对。)

(来自http://developer.android.com/guide/topics/connectivity/bluetooth.html)。有很多解决方法,但是它们非常复杂并且没有得到很好的支持。如果您使用的是iPhone,则蓝牙连接是完全不同的蠕虫(许可等),因此,我暂时将其保留。


说了这么多,我看过的几乎每个API都允许配对取消配对将要执行(值得注意的是python / pybluez例外,但这只是Windows上Microsoft堆栈的包装,因此您始终可以直接调用低级函数)。因此,当您找到具有正确设备类别的设备时,为什么不仅仅自动配对(具有预定义的配对插针编号),建立连接,发送所需的数据,断开连接然后取消配对。这一切都不需要用户干预,只要您不做数千次(可能会导致EEPROM磨损的问题),就不会给您带来任何问题。尝试使不同的API与被认为是使用蓝牙的非标准方法很好地配合使用时,也将为您节省很多麻烦。


1
感谢您的出色回应!现在有很多事情我需要研究。
capcom 2012年

10

这可以通过蓝牙品牌内的一项技术来实现,该技术称为蓝牙智能(或蓝牙低功耗 / 蓝牙 4.0),并且还取决于您所使用的电话。

与常规蓝牙相比,低能耗技术的主要好处是它消耗的功率少得多,并且设备的预期寿命可能长达数年,具体取决于连接间隔以及在纽扣电池上投放多少广告。

要解决此问题,您可以将有问题的代码放入芯片的广告数据中。(蓝牙 4.0核心规范第3卷,C部分,第11.1.4或11.1.10节)

有3家主要生产低能耗芯片的芯片制造商(TI,CSR和Nordic Semiconductor)

Nordic有一个称为nRF8001的连接芯片(连接芯片,完全合格的设备)和SoC nRF51822。使用nRF8001的好处是您可以使用自己选择的处理器,而不必担心蓝牙规范,因为它由芯片处理。nRF51822的优势在于它是片上系统,减少了BOM,它正在运行Cortex-M0,并且在发布时应完全合格。

TI具有8051 SoC芯片cc2540,而CSR具有SoC芯片CSR µEnergy

一切都归结为您的需求和对处理器,功能/成本的偏好


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.