我们如何通过低功耗蓝牙 (BLE) 使用 HTTP?

Shi*_*cis 4 android bluetooth http bluetooth-lowenergy

有没有办法将 HTTP 消息(GET、POST 等)从 BLE 中央(客户端)发送到 BLE 外设(服务器)?目前,我使用 GATT 协议发送纯文本。由于一个 HTTP 服务器已经在我的外设中运行,我宁愿使用 HTTP 协议。有人建议我在 BLE 上使用 HPS(HTTP 代理服务)来完成这项工作。但我真的对 HPS 一无所知。

有没有其他方法可以通过 BLE 从客户端向服务器发送 HTTP 消息?谁能告诉我如何做到这一点?或者有没有其他方法可以通过 BLE 发送 HTTP。

任何帮助,将不胜感激

mar*_*sig 6

我不同意 Emil 的说法,即基于蓝牙的 IPv6 是唯一的标准化选项。顺便说一句,我为蓝牙 SIG 工作。HTTP 代理服务是标准的 GATT 服务。您可以在此处下载规范:https : //www.bluetooth.com/specifications/gatt/

这里有评论说“蓝牙上的 HTTP”是一个坏主意,但没有详细说明什么是“坏”。我认为可能对所涉及的内容以及 HTTP 代理服务的预期用途存在一些混淆。

此 GATT HTTP 代理服务必须在同时具有低功耗蓝牙 (LE) 堆栈和 TCP/IP 堆栈的设备上运行。它具有 GATT 特性,允许通过向这些特性写入值来配置 HTTP 请求。这包括 HTTP 标头值。预期大多数此类参数在初始设置后不会更改或至少不会频繁更改。充当 GATT HTTP 代理服务客户端的设备然后通过 GATT 服务器间接通过HTTP 和 TCP/IP 发送数据。他们通过写入 HTTP Entity Body 特征来实现这一点……通常是一个很小的值,例如传感器读数。然后,GATT 客户端设备通过将单个字节写入 HTTP 控制点特征(例如,1 以触发 HTTP GET)来触发 HTTP 操作。

谈论基于蓝牙的 HTTP 可能用词不当。这不是这里发生的事情。这是一个三层架构,在 (1) 蓝牙设备和 (2) 双技术蓝牙和 TCP/IP 设备之间具有非常轻量级的蓝牙 LE 通信,充当代理,然后传送它已配置的蓝牙编码请求在其中,通过 TCP/IP 连接到 (3) 远程 HTTP 服务器。

至于关于使用串行端口配置文件的评论以及这将提供性能优势的建议,这也是值得怀疑的。这里没有关于设想的细节,但我认为这个想法是使用串行端口配置文件通过蓝牙 BR/EDR 连接制定和发送整个 HTTP 操作。蓝牙 BR/EDR 在物理层以每秒 2 兆符号的速度运行,默认情况下,蓝牙 LE 以每秒 1 兆符号的速度运行。但自从几年前发布的蓝牙 5 以来,蓝牙 LE 也支持每秒 2 个兆符号。此外,由于 HTTP 代理服务的设计,HTTP 请求的固定或很少变化的组件部分只需要配置一次,您可能会发现在使用 HPS 与 SPP 时传输的数据更少。这一切都取决于,

希望这可以帮助。


Emi*_*mil 4

<edit>您询问除了标准化 HPS 之外 是否还有其他方法可以通过蓝牙发送 HTTP 消息。据我所知,您还有一种更标准化的选择。 </edit> 唯一标准化的是基于 BLE 的 IPv6,但它还远没有得到很好的支持。http 的问题在于,由于需要作为标头发送长字符串,因此效率非常低。

<edit>

您可以在此处找到 HPS 服务:https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id =308344 。

如果您确实想通过 BLE 使用 HTTP,但不想使用任何标准化方式,您可以打开一个 L2CAP CoC,然后简单地向一个方向发送 HTTP 请求,然后向一个方向发回 HTTP 响应。这样您只需用 L2CAP CoC 替换 TCP 即可。

</edit>