我想使用任何移动电话通过串行端口协议(SPP)通过Bluetooth Classic连接到物联网设备。物联网设备没有屏幕也没有键盘,只要连接的电话知道一个秘密PIN码就可以自动接受连接(也就是说,我不希望被强迫每次都进入物联网设备进行配对一部新的手机试图连接)。在Linux上设置蓝牙自动配对
这些是我的物联网设备上运行至今的命令:
# Make the device discoverable:
hciconfig hci0 piscan
# Register SPP:
sdptool add --channel=22 SP
# Start rfcomm:
rfcomm -r watch /dev/rfcomm0 22
不幸的是,我找不到任何方法来建立一个PIN,当我尝试连接配对失败用手机。此外,该设备只能在短时间内发现。
如何配置IoT设备的蓝牙堆栈(运行最近的Bluez)以便与任何知道给定PIN的手机进行自动配对,以及如何使发现时间永恒?
您可以使用 “bluetoothctl” 效用,其附带的bluez库。您需要启用代理进行身份验证。由于您的系统是无头的,因此可以使用“NoInputNoOutput”。这避免了用于验证的密码交互(bluetoothctl agen NoInputNoOutput)。但是如果你想接受所有的连接,使用Dbus接口“org.bluez.AgentManager1”以“org.bluez.Agent1”中实现的最小方法“RequestAuthorization”注册你自己的代理。 –
但是,如果我启动bluetoothctl并设置“代理NoInputNoOutput“,它仍然会问我是否接受连接。你是否告诉我,如果它被设置为批处理模式,它会有不同的行为?至于创建我自己的AgentManager1的实现,它似乎是对车轮的再造。 Bluez没有代理经理吗? –
是的,它仍然要求确认(是/否)。但您可以使用Agent1界面编写自己的简单代理程序来回答“是”。是的,BlueZ为代理经理提供了“DisplayOnly”,“DisplayYesNo”,“KeyboardOnly”,“NoInputNoOutput”和“KeyboardDisplay”这些功能。由于您需要特殊情况才能接受,而无需任何干预,您可以使用您自己的Agent1发送“是” –