【问题标题】:C/C++ bluetooth program to interact with Nrf connect android appC/C++蓝牙程序与Nrf connect android app交互
【发布时间】:2018-02-09 23:05:24
【问题描述】:

我正在编写一个 C 程序来与我手机上的 nrf connect android 应用程序进行交互。我在我的 linux 机器上安装了 libbluetooth-dev 进行开发。要求是我需要在 nrf 连接应用程序上找到我的 Linux 机器上的蓝牙 USB 加密狗。然后我需要从移动应用程序连接到 Linux 机器,然后交换数据。为了实现这一点,我编写了这样的程序,它首先创建一个 RFComm 套接字,侦听它并在有人想要连接时接受连接,然后使用读/写调用来交换数据。问题是我不知道如何使 USB 加密狗可见,以便在 nrf 连接应用程序上可以发现它。

我尝试了很多谷歌搜索,但找不到任何可行的建议。

【问题讨论】:

  • RFComm 不是蓝牙低功耗协议。 nRFConnect 应用程序查找并显示低功耗蓝牙设备。要在 nRF Connect 应用程序中找到您的设备,您的 USB 加密狗应该是蓝牙 4.0,并且它应该做广告。你需要在你的 Linux 机器上创建 GATT 服务来交换数据。
  • 感谢您的回复。是的,我知道 RFComm 只是主机上使用的传输协议之一。是的,我的 USB 蓝牙适配器是 4.1。做广告与使可发现性相同吗?我不明白这两者之间的区别。所以在使用 RFComm 创建套接字之后,我应该只做广告并启动 GATT 服务,然后调用“accept”? NRf connect 可以看到我的 USB 加密狗吗?如果您有任何示例来源,请提供给我 Ravi 吗?

标签: bluetooth bluetooth-lowenergy bluez


【解决方案1】:

蓝牙低功耗广告不同于使设备可被发现。阅读此link 以获得高级解释。 Bluez 是 Linux 蓝牙堆栈的名称,它为所有蓝牙操作公开了 DBus API。如果你想让你的 Linux 设备开始做广告,你需要使用 Bluez DBus API。下载 Bluez 源代码并查看 doc/advertising-api.txt 文件以了解用于广告的 DBus API。有关 python 示例代码,请参阅 test/example-advertisement

默认 Linux BLE 广播间隔为 1.2 秒。因此,一旦您使用 Bluez 的 DBus API 注册广告,您的 Linux 机器就会每 1.2 秒发布一次广告,nRFConnect Mobile 应用程序会找到它并将其显示在其列表中。

但广告只能帮助找到设备。要读取和写入数据(读取和写入是 BLE 术语),您需要实现 GATT 服务。阅读此link 以了解更多信息,以防您不知道。为了在 Linux 中实现 GATT 服务,Bluez 具有 DBus API,请参阅 doc/gatt-api.txt。有关如何使用这些的 python 示例,请参阅 Bluez 源目录中的 test/example-gatt-server

因此,一旦您的 nRFConnect 移动应用程序找到您的广告 Linux 机器,它会显示一个连接按钮,如果您的 Linux 机器正在执行可连接广告。当您单击连接按钮时,移动应用程序会执行 GATT 发现并检索您的 Linux 蓝牙应用程序实现的所有 GATT 服务。然后它会显示读取和写入选项,您可以使用它们进行数据传输。

【讨论】:

  • 谢谢。我会在几天内尝试这个解决方案:)。
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多