Dbus & Bluez 编程语言
Dbus & Bluez programming language
对于我正在做的项目,我必须将我的 Linux PC 连接到蓝牙 LE 设备。我设计的应用程序完成后将部署在 ARM 嵌入式系统上。
在线搜索文档提示,此类应用程序的首选编程语言是 Python。所有 Bluez /test 示例都是用 Python 编写的,并且有很多关于在 Python 中创建 BLE 应用程序的信息来源。在 C 中没有那么多。
我的上司和我争论我应该使用 Python 还是 C。他的一个争论是使用 Python 建立蓝牙 LE 连接时存在不可接受的开销,并且蓝牙 LE 必须非常及时才能正常运行。我的论点是开销不会那么重要,因为蓝牙 LE 连接没有时间限制;该应用程序将查找设备、连接到特定设备并读取一些属性,并将其保存到文件中。
我的问题是;对于读取 GATT 服务及其特征的基本应用程序,有什么理由更喜欢低级 C 方法而不是使用高级 Python 实现?这对嵌入式设备有何影响?
这是一个悬而未决的问题,因为在做出此决定时需要考虑很多因素。所以最好的 "answer" 可能更愿意尝试缩小讨论范围:
根据这个问题,我假设您所针对的系统具有 D-Bus 和 Python 以及所有需要的依赖项。
我会首先决定使用什么 BlueZ API 来缩小讨论范围。如果您计划使用 D-Bus API 而不是 libbluetooth C 库 API,那么已经引入了一些开销,我不相信 Python 本身会成为主要因素。这当然应该是 measured/evaluated 才能确定,但是在仍然使用 D-Bus 的同时排除 Python 可能是过早的优化,在实践中没有太大影响。
如果要使用 C 库 API 以避免 D-Bus 开销,那么我认为您应该始终为客户端使用 C。
如果 "timely manner" 因素非常重要,我相信您最终还是需要有衡量性能的方法。那么也许两种设计选项的概念证明可能是真正决定的最佳方式。
如果时间限制在实践中被证明是一个没有实际意义的问题,其他方面应该更多地考虑,例如。易于开发(可用的文档和示例)、可测试性等。
更多需要考虑的事情:
最新的 BlueZ(例如 5.36+),BLE 应该可以正常工作并且对我来说非常稳定 - 记得在构建它时添加 "experimental" 和“-E”作为获取制造商数据(和其他实验性功能)的服务参数
使用 C API,我认为您的代码必须是 GPL(不是 100% 确定)。 DBus接口允许你制作封闭源代码(如果是公司的话)
对于我正在做的项目,我必须将我的 Linux PC 连接到蓝牙 LE 设备。我设计的应用程序完成后将部署在 ARM 嵌入式系统上。 在线搜索文档提示,此类应用程序的首选编程语言是 Python。所有 Bluez /test 示例都是用 Python 编写的,并且有很多关于在 Python 中创建 BLE 应用程序的信息来源。在 C 中没有那么多。
我的上司和我争论我应该使用 Python 还是 C。他的一个争论是使用 Python 建立蓝牙 LE 连接时存在不可接受的开销,并且蓝牙 LE 必须非常及时才能正常运行。我的论点是开销不会那么重要,因为蓝牙 LE 连接没有时间限制;该应用程序将查找设备、连接到特定设备并读取一些属性,并将其保存到文件中。
我的问题是;对于读取 GATT 服务及其特征的基本应用程序,有什么理由更喜欢低级 C 方法而不是使用高级 Python 实现?这对嵌入式设备有何影响?
这是一个悬而未决的问题,因为在做出此决定时需要考虑很多因素。所以最好的 "answer" 可能更愿意尝试缩小讨论范围:
根据这个问题,我假设您所针对的系统具有 D-Bus 和 Python 以及所有需要的依赖项。
我会首先决定使用什么 BlueZ API 来缩小讨论范围。如果您计划使用 D-Bus API 而不是 libbluetooth C 库 API,那么已经引入了一些开销,我不相信 Python 本身会成为主要因素。这当然应该是 measured/evaluated 才能确定,但是在仍然使用 D-Bus 的同时排除 Python 可能是过早的优化,在实践中没有太大影响。
如果要使用 C 库 API 以避免 D-Bus 开销,那么我认为您应该始终为客户端使用 C。
如果 "timely manner" 因素非常重要,我相信您最终还是需要有衡量性能的方法。那么也许两种设计选项的概念证明可能是真正决定的最佳方式。
如果时间限制在实践中被证明是一个没有实际意义的问题,其他方面应该更多地考虑,例如。易于开发(可用的文档和示例)、可测试性等。
更多需要考虑的事情:
最新的 BlueZ(例如 5.36+),BLE 应该可以正常工作并且对我来说非常稳定 - 记得在构建它时添加 "experimental" 和“-E”作为获取制造商数据(和其他实验性功能)的服务参数
使用 C API,我认为您的代码必须是 GPL(不是 100% 确定)。 DBus接口允许你制作封闭源代码(如果是公司的话)