使用什么蓝牙(2.1 或 4.0)以及如何使用?

What bluetooth to use (2.1 or 4.0) and how?

标题好像太笼统了(想不出好的标题)。我会尽量在问题描述中具体说明。

我被要求制作一个周期性收集数据的工业控制箱(每 5 秒可能收集 10-20 字节的数据)。操作员将使用笔记本电脑或手机 phone 通过蓝牙收集数据(无需打开盒子),每周或每月或可能更长时间。

我会负责选对modules/chips,做PCB,做嵌入式软件。因为盒子不是大批量生产,所以我可以自由地(modules/chips使用,价格,功能等)设计不同的组件。

整个应用程序需要一个 USART 端口在可用时读取数据(可能每 5-10 秒一次),一个用于数据存储的 SPI 端口(SD 卡 reader/writer),几个用于 LED 指示灯的 GPIO 引脚或可能是按钮(我们是否需要按钮以及需要多少取决于我的设计)。

我是蓝牙新手。我通读了 wiki 和一些谷歌搜索页面。了解配对,了解 class 1 和 class 2 差异,了解 2.1 和 4.0 差异。

但我还有很多地方不清楚要使用什么蓝牙module/chip。

  1. 我的一个朋友向我提到了TI CC2540。我检查了一下,它只支持 4.0 BLE 模式。从 Google 开始,BT4.0 的有效载荷最多为 20 字节。 BT4.0 是否适合我需要每月或几个月收集大量数据的应用程序?或者最好将 BT2.1 与 EDR 用于此应用程序? BT4.0 BLE模式似乎配对速度更快但吞吐量更低?

  2. 我读了CC2540,发现它不是只有BT的芯片,它有几个GPIO引脚和uart引脚(我不确定SPI)。我能说 CC2540 本身就足以承载整个应用吗?包括蓝牙、UART接收数据、SD卡reading/writing?

  3. 我最初的设计是使用 ARM cortex-M/AVR32 MCU。该程序只是一个循环,轮流为每个 task/events 提供服务(或者我什至可以安装 Linux)。会有一个蓝牙模块。该模块将自动处理配对。我只需要向模块发送要发送到另一端的数据。当然可能还有一些其他的控制,比如把模块调到低功耗模式,因为蓝牙每个月只用一次之类的。但是经过对蓝牙的一些研究,我不确定是否存在这样的BT模块。 CC2540这样的编程芯片是必须的吗?

  4. 在我的理解中,我设计的设备将是一个 BT slave,laptop/phone 将是 master。我的设备会定期探测(可能需要更长的时间来省电)主设备的存在并与之配对。配对后,它将开始发送数据。我对程序的理解是否正确? pairing/data 发送 2.1 和 4.0 有什么不同吗?

  5. 认证应该如何设计?我当然希望无限phones/laptops与设备配对,但前提是他们能证明他们是运营商。

有点乱。如果您已阅读上述问题,我将不胜感激。以下为总结,

  1. 使用 2.1 还是 4.0?
  2. 哪个更好?意思是适合应用程序,并且易于开发。
  3. 配对和数据发送应该如何省电?按钮是否有助于促进睡眠模式和主动配对和数据发送模式以节省电量?
  4. 如何认证?只允许使用运算符,但他可以使用任何 laptops/phones.

感谢阅读。

我们在不同的产品上使用这两种协议。

蓝牙 4.0 BLE 又名智能

  • 低电池消耗
  • 低数据速率(我每 40 毫秒达到 20 个字节。我记得苹果的最小间隔是 18 毫秒,其他手机制造商也采用了该间隔)
  • 你必须使用蓝牙的特性机制
  • 如果您的数据包较长,则必须实施链接
  • 远距离 20-100 米
  • 新技术有很多糟糕的过早实施。慢慢好起来。
  • 我们使用了 Bluegiga 的芯片,该芯片允许使用脚本语言进行编程。但是仍然存在许多限制和错误。
  • 与使用 2.1
  • 相比,我们实施 BLE 的学习曲线更大

蓝牙 2.1

  • 根据使用的波特率,适合高数据速率。这里的瓶颈是控制器中的缓冲器。
  • 弱距离 2-10 米
  • 传输数据更容易

没有注意到这两种技术在配对和连接方面存在很大的时间差异。

这里有两个明确要求 2.1 或 BLE 的设备示例。也许您的用例更接近这些示例之一:

  • 福雷斯特树木上的湿度传感器。护林员每周都会穿过福雷斯特并收集数据。
  • 无线立体声耳机

我的两分钱(我已经完成了大量的蓝牙工作,并且我已经设计了当前该领域的消费产品)......请注意我会掩盖很多设计决策以保留这个 'concise'.

2.1 or 4.0 to use?

查看您的估算,听起来您每周查看大约 2MB 的数据,可能每月 8MB。这里使用什么技术的问题归结为人们愿意等待多长时间来收集数据。

对于 BLE (BT 4.0) - 假设您的数据传输在 2-4kB/s 范围内。对于 2.1,假设它在 15-30kB 范围内。这取决于很多因素,但通常是我在 Android/iOS 和 BLE 设备之间的经验。

在 2MB 的情况下,其中任何一个都需要很长时间才能传输。是否可以更频繁地获取数据?或者也许在某个地方有一个经常收集数据的 wifi 连接基站? (我不确定应用)

Which one is the better choice? Meaning that suitable for the application, and easy to develop. ARM/avr32 + CC2540 (or the like) CC2540 only or the like (if possible) ARM/avr32 + some BT modules ( such as Bluegiga https://www.bluegiga.com/en-US/products/ ) Should Linux be used?

如果不了解系统的复杂性、传感器、数据存储容量、BOM 成本等,这是一个很难回答的问题...

根据我的经验,Linux OS 对于基于 GPIO/UART/I2C 的简单系统来说实在是太过分了(除非您对 Linux 非常满意)。可以 运行 Linux 并添加额外 RAM 的芯片通常很昂贵(例如,便宜的 ARM Cortex M0 体积不错,大约 50 美分,听起来就像您需要使用的所有东西)。

问题通常归结为 'external MCU or not' - 例如,您是否尝试获得一个一体式 BT 模块,其中包含应用程序 space 以供编程。使用它可以节省尺寸和成本,但与 braindead BT 模块 + 外部 MCU 相比,它增加了风险和未知数。

有一件事我想澄清的是,您多次提到 TI CC2540(实际上,CC2541 是较新的版本)。无论如何,该芯片是IC级组件。除非您想进行天线设计并通过 FCC 有意辐射器认证(证书通常在 1k-10k 之间 - 我假设您在美国时说 FCC)。

我认为您要找的是现成的、经过认证的模块。例如,Bluegiga 的 BLE113 是经过 FCC 认证的模块,其内部包含 CC2541(加上一些附加功能)。那一个还专门有一种称为 BGScript 的解释语言来加速开发。它非常适合非常简单的应用程序 - 并且在低功耗模式下运行良好。

因此,BLE113 是一个模块示例,可根据应用程序的复杂性使用 with/without 外部 MCU。

如果你愿意通过FCC故意散热器认证,那么TI CC2541是常见的,还有Nordic NRF51822(这个芯片有一个内置的ARM核心,你也可以在上面编程,所以你不需要外部 MCU)。

需要外部 MCU 的 BLE 模块的一个示例是来自 AckMe 的山猫 (AMS001)。他们在芯片上有一个 BLE 堆栈 运行ning,它使用 UART 与外部 MCU 通信。

与上面的评论一样,如果您需要 iOS 兼容性,使用蓝牙 2.1 (BT Classic) 是一个巨大的痛苦,因为 MFI 程序(我已经经历过 - 纯粹的痛苦)。所以,除非真的有必要,否则我会坚持使用 BT Classic 和 Android/PC.

一些示例 BT 经典芯片可能是 Roving Networks RN42、AmpedRF BT 33(或 43 或 53)。如果您有兴趣,我用蓝牙经典设备 ()

在 iOS 设备上进行了吞吐量测试

How the pairing and data sending should be like for power saving? Are buttons useful to facilitate the sleep mode and active pairing and data sending mode for power saving?

如果收音机仅在每周或每月操作员拉下数据时打开,除了将 BT 模块置于重置模式以确保不使用电源外,别无他法。 BT Classic 在传输过程中往往会使用更多的功率,但如果您不断地传输数据,那么如果您选择正确的模块,差异可能会很小(例如,BLE 上的吞吐量较低的时间较长,而 BT 2.1 上的吞吐量较高更少的时间 - 它在洗涤过程中自行解决。

我在这里要做的一件事是让一个按钮触发与 BT 模块配对的能力,因为这样它们就不会一直打开并播放广告,而只是处于睡眠或重置状态。

How the authentication should be done? Only operators are allowed but he can use any laptops/phones.

同样,不了解环境,这可能很棘手。如果它在一个安全的环境中,那应该就足够了(例如,在你需要在里面的锁着的门后面按下一个按钮来唤醒 BT 模块)。

否则,至少启用标准 BT 配对代码,而不是允许任何人配对。此外,您可以添加额外的身份验证和安全性(例如,如果没有密码或其他内容,您将无法下载数据)。

如果你真的想变得疯狂,你可以加密数据(虽然这可能涉及使用 Linux)并确保只有受信任的人有解密密钥。