我想使用任何手机通过蓝牙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的手机自动配对,以及如何使发现期永恒?
答案 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-device
、btmgmt find
、btmgmt discov
等