C / C ++蓝牙程序与Nrf连接Android应用程序进行交互

时间:2018-02-09 23:05:25

标签: bluetooth bluetooth-lowenergy bluez

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

我尝试了很多搜索,但找不到任何有用的建议。

1 个答案:

答案 0 :(得分:3)

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

默认Linux BLE广告间隔为1.2秒。因此,一旦您使用其DBus API向Bluez注册广告,您的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机器正在进行Connectable广告。单击“连接”按钮时,Mobile App将执行GATT发现并检索Linux蓝牙应用程序实现的所有GATT服务。然后它会显示读取和写入选项,您可以使用它们进行数据传输。