【问题标题】:Dbus & Bluez programming languageDbus & Bluez 编程语言
【发布时间】:2015-12-25 19:22:22
【问题描述】:

对于我正在进行的项目,我必须将我的 Linux PC 连接到蓝牙 LE 设备。我设计的应用程序将在完成后部署在 ARM 嵌入式系统上。 在线搜索文档提示此类应用程序的首选编程语言是 Python。所有 Bluez /test 示例都是用 Python 编写的,并且有很多关于在 Python 中创建 BLE 应用程序的信息来源。在 C 中没有那么多。

我的上司和我争论我应该使用 Python 还是 C。他的一个论点是,使用 Python 建立蓝牙 LE 连接时存在不可接受的开销,并且蓝牙 LE 必须非常及时才能功能正常。我的论点是开销不会那么重要,因为蓝牙 LE 连接没有时间限制;该应用程序将查找设备,连接到特定设备并读取一些属性,并将其保存到文件中。

我的问题是;对于读取 GATT 服务及其特征的基本应用程序,是否有任何理由更喜欢使用低级 C 方法而不是使用高级 Python 实现?这对嵌入式设备有什么影响?

【问题讨论】:

  • 可能的答案太多,或者对于这种格式来说,好的答案太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。
  • 问题是:有什么理由让基本应用程序更喜欢低级 C 方法而不是高级 Python 方法,同时牢记时间约束参数。请详细说明我可以做些什么来进一步隔离问题。

标签: python c bluetooth-lowenergy dbus bluez


【解决方案1】:

这是一个非常开放的问题,因为在做出此决定时需要考虑很多事情。所以最好的“答案”可能是试图缩小讨论范围:

基于这个问题,我假设您所针对的系统具有可用的 D-Bus 和 Python 以及所有需要的依赖项。

我会先决定使用什么 BlueZ API 来缩小讨论范围。如果您打算使用 D-Bus API 而不是 libbluetooth C 库 API,那么已经引入了一些开销,我不相信 Python 本身会是主要因素。这当然应该被测量/评估以确定,但是在仍然使用 D-Bus 的同时排除 Python 可能是一个过早的优化,在实践中没有太大影响。

如果要使用 C 库 API 来避免 D-Bus 开销,那么我认为您应该始终使用 C 作为客户端。

如果“及时”因素非常重要,我相信您最终还是需要有方法来衡量性能。那么也许对这两种设计方案的概念验证可能是真正做出决定的最佳方式。

如果时间限制在实践中被证明是一个没有实际意义的问题,那么其他方面应该更加重要,例如易于开发(提供文档和示例)、可测试性等。

【讨论】:

  • 好点。尽管还应该指出 libbluetooth 是一个内部库,并且不受官方支持。如果您想使用官方 API,那么 DBUS 是唯一的选择。上次我检查时,libbluetooth 不支持 gatt。虽然 bluez 树之外有非官方的 libgatts 已经提取了 bluez gatt 组件。
  • 感谢您的回答,我也在考虑过早优化,确实,这两种实现的概念证明将是一个非常合适的解决方案。然而我们没有那么多时间。我坚持使用 C GDBus API,而不是低级 HCI。经过一些研究,我发现它在设置总线和所有这些方面与 Python DBus API 非常相似。这就是我最复杂的地方。上 dbus 并发送/接收消息等等,但现在我实际上已经做了足够的研究,C GDbus API 似乎是一个不错的选择!
  • 我和我的上级决定最好先构建 DBus 实现,当一切顺利时,开始使用低级 API 进行开发。这样,无论哪种方式都会有可交付成果。再次感谢!
  • 很高兴能提供帮助。不过,请记住 Alan Au 的评论。如果 libbluetooth 的低级 C API 不是推荐/支持/官方的方式,那么您可能会采用这种方式进行潜在的脆弱和维护繁重的设计。
  • 我也担心这个。他们甚至在他们的网站上说,如果你使用的是低级 API,那么“你会很痛苦”。
【解决方案2】:

需要考虑的更多事项:

  1. 最新的 BlueZ(例如 5.36+),BLE 应该可以正常工作并且对我来说非常稳定 - 请记住在构建它时添加“实验性”和“-E”作为获取制造商数据的服务参数(以及其他实验性功能)

  2. 使用 C API,我认为您的代码必须是 GPL(不是 100% 肯定)。 DBus 接口允许您制作封闭源代码(如果是用于公司)

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 1970-01-01
    • 2015-10-01
    • 2016-01-24
    • 2015-06-28
    • 2012-09-02
    • 2014-02-04
    • 2013-04-12
    相关资源
    最近更新 更多