在Linux

时间:2017-02-09 11:18:49

标签: bluetooth bluez rfcomm

我想使用任何手机通过蓝牙Classic与串行端口协议(SPP)连接到物联网设备。物联网设备没有屏幕,没有键盘,只要连接电话知道一个秘密密码,它就应该自动接受连接(即,我不想被迫进入物联网设备)每次新手机尝试连接时设置配对。

这些是我目前在物联网设备上运行的命令:

# Make the device discoverable:
hciconfig hci0 piscan

# Register SPP:
sdptool add --channel=22 SP

# Start rfcomm:
rfcomm -r watch /dev/rfcomm0 22

不幸的是,我无法找到设置PIN的方法,当我尝试连接手机时配对失败。此外,该设备只能在短时间内被发现。

如何配置物联网设备的蓝牙堆栈(运行最近的Bluez)与任何知道给定PIN的手机自动配对,以及如何使发现期永恒?

2 个答案:

答案 0 :(得分:0)

您可以运行实现BlueZ DBus API的应用程序。我建议使用BlueZ> = 5.42。 使用代理界面并实现您自己的PIN码。 注册您的代理后,bluez会在请求配对时自动调用并使用您自己的代理。

此外,您可以使用org.bluez.Adapter1接口将DiscoverableTimeout设置为0到DBus。

“零值             意味着超时被禁用,它将保持不变             永远可发现/限制模式。“

https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/adapter-api.txt(dbus适配器对象doc) https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/agent-api.txt(dbus代理对象doc) https://kernel.googlesource.com/pub/scm/bluetooth/bluez/+/5.44/test/simple-agent(样本) http://www.bluez.org/bluez-5-api-introduction-and-porting-guide/(在底部阅读)

答案 1 :(得分:0)

如果有人遇到这个问题,要直接从 bash 使用(大部分)BlueZ“BT 管理套接字”C API,请尝试:

btmgmt --help

btmgmt add-devicebtmgmt findbtmgmt discov