不配对是否可以进行蓝牙通信?

电器工程 蓝牙
2022-01-11 05:25:46

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

所以我的问题是,要使用蓝牙通信,有没有一种无需配对的通信方式?换句话说,在非常简单的层面上,假设我的蓝牙接收器需要一个代码“abc123”。蓝牙设备(例如电话)被编程为不断传输此代码。收到代码后,一旦授予访问权限,系统就会开始执行它应该执行的任何操作。当然,这样的系统会以安全为代价消除配对障碍。

那么这个概念有可能吗?我在技术层面上对蓝牙链路协议了解甚少,但如果有人能给我带头,我可以从那时开始学习。不要认为我有限的理解是一种限制。

4个回答

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

友好名称是当您搜索要配对的蓝牙设备时出现在列表中的人类可读名称。激活的速度取决于接收设备轮询友好名称的速度。您没有提到您使用的是哪种类型的接收设备,但我发现此 PDF(第 35 页)详细说明了更新范围内蓝牙设备的友好名称的过程。

您可以根据需要经常轮询友好名称。如果您的触发设备将其友好名称更改为激活码abc123,那么接收设备将能够在不配对的情况下看到该名称并激活您尝试执行的任何任务。这也允许您拥有大量的激活码,我认为您可以获得最多 248 个字节的友好蓝牙名称。

您也可以考虑故意向Bluejacking 敞开心扉我不熟悉它,但如果安全不是问题,它可以工作。

这可以通过蓝牙品牌内的一种称为蓝牙智能(或蓝牙低功耗/蓝牙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

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

简短的回答是肯定的,可以在不配对的情况下使用蓝牙。但是,它仍将始终是点对点链接。不使用配对也存在潜在的问题(主要是缺乏安全性和对这种操作模式缺乏良好的支持)。能不能做到取决于你的接收器的蓝牙硬件。我假设您使用的是“标准”蓝牙而不是低功耗蓝牙(这是完全不同的,并且在手机中不是特别支持)。如果您使用的是低能耗,那么您的发射器将是一个低能耗设备,而您的接收器将是侦听消息的东西。我没有用过这个,所以我不能给你任何关于这个的信息,所以我会坚持使用“普通”蓝牙。

在我看来,有两个问题需要克服:

  1. 关闭引脚配对

  2. 自动连接启动

我将首先介绍第 2 点,因为我觉得这是您真正感兴趣的内容(如果我读错了,请道歉)。为了从电话或其他“主”设备执行此操作,它必须不断搜索远程蓝牙设备。当它识别出一个适用的,它会自动连接到它并发送一些数据或其他数据,以启动所需的任何操作。其他人已经提到在此过程中使用蓝牙友好名称,这当然是一种方法。我对蓝牙友好名称(尤其是但不仅限于 Microsoft 蓝牙堆栈)的经验是,它们不是一种强大的扫描方法。使用蓝牙设备类可能会做得更好,与唯一设备地址同时广播。此设备类有大量预先指定的条目,用于移动电话、笔记本电脑、台式机等。如果您使用非标准设备类之一(例如 00:00:00),您将立即能够过滤掉绝大多数蓝牙设备。然后,您可以连接到剩余的设备并进行某种请求-确认通信以启动您的操作。如果您将此适当地模糊(或检查友好名称作为第二个考虑因素),它应该隐式过滤掉任何剩余的不正确设备。


关于第 1 点,如果您正在创建瞬态连接,引脚配对并不是特别合乎逻辑,但它仍然可能是实现您想要做的最佳方式。如果要避免引脚配对,可以将其关闭并进行未配对连接。你如何做到这一点取决于蓝牙接收器的实现,但这里有几个例子:

  1. Bluegiga WT12:使用命令 SET BT AUTH *
  2. National Semiconductor LMX9838:使用 GAP_SET_SECURITY_MODE 命令和安全模式 1(无配对)

等等。

然后可以在不配对的情况下连接到设备。如果发起连接的设备与接收方相同,这很简单。如果您使用的是 Windows PC,则可以通过费力的创建新连接过程并选择“不使用 pin”,尽管 Windows 可能仍会在您连接时要求您输入 pin(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 堆栈的包装,因此您始终可以直接调用低级函数)。因此,当您发现具有正确设备类别的设备时,为什么不自动配对(使用预定义的配对 pin 号)、建立连接、发送所需的数据、断开连接然后取消配对。这一切都不需要任何用户干预,只要您不这样做数千次(这可能会导致 EEPROM 磨损问题),它不应该给您带来任何问题。它还可以为您省去很多麻烦,让您尝试让不同的 API 与被认为是使用蓝牙的非标准方法很好地协同工作。

是的,无需配对设备即可进行蓝牙通信。使用insecureRfcom安全RFCOM方面。它不需要配对数据传输。