我有一个 raspberry pi 3 (raspbian jessie),如果我扫描并在 pi 上启动配对,我目前可以将其与我的手机配对bluetoothctl
。我有两个主要问题:
- 该设备未显示在手机上的蓝牙设备列表中
- 目前配对需要人与 pi 交互
hcitool
第一个问题可能与我所宣传的内容有关,我过去一直在设置数据包并处理过 iOS 蓝牙规范。
第二个是我所坚持的。理想情况下,我会在手机上输入静态 PIN 码并进行连接。但是,我听说该方法已经过时,并且bluetooth-agent MY_PIN
不起作用(找不到命令)。我不想关闭配对身份验证,因为这意味着我周围的所有随机人都可以连接到它。
我可以使用更好的方法吗?如果没有,我正在寻找有关如何使 PIN 身份验证发挥作用的指导。
答案1
我遇到同样的问题已经有一段时间了(5个月),我偶然发现这一页昨天
前几条评论将向您展示如何在 Pi 上实现蓝牙的 PIN 码。安装后它对我有用这(我在更改一些文件以实现 PIN 码之前安装了这个。
基本上程序如下:
在/etc/apt/sources.list,取消注释以“deb-src”开头的行之后,执行 asudo apt-get update
和 acd /usr/src; sudo apt-get source bluez
在文件中/usr/src/bluez-5.23/test/simple-agent
更改此部分:
return ask("Enter PIN Code: ")
进入以下内容return "1234"
,其中 1234 是您要使用的 pin 码。
之后您在中创建以下脚本/usr/bin,我们称之为 btscript.sh :
#!/bin/sh
result=`ps aux | grep -i "simple-agent" | grep -v "grep" | wc -l`
if [ $result -ge 0 ]; then
sudo hciconfig hci0 piscan
sudo hciconfig hci0 sspmode 0
sudo /usr/bin/python /usr/src/bluez-5.23/test/simple-agent &
else
echo "BT Agent already started"
fi
通过在文件sudo chmod +x
之前添加此行使该脚本可执行:
exit 0
/etc/rc.local
/usr/bin/btscript.sh
之后,重新启动您的机器:sudo reboot
您应该能够使用 PIN 码连接到您的 Pi。
虽然,正如前面提到的这里,您将能够使用 iOS 设备看到您的 Pi,但只能看到一次,因此不要让您的设备忘记您的 Pi,否则您将无法再连接到它。
为了解决这个问题,请创建一个脚本,例如bt_iphone.sh,并将该代码放入其中:
#!/bin/sh
sudo hciconfig hci0 sspmode 1 # Activate SSP which is the current standard
# for bluetooth pairing, this will make the RPi discoverable again but
# with a passkey instead of a PIN code
echo -e 'power off\n quit ' | bluetoothctl # Make the RPi undiscoverable
sleep 5
echo -e 'power on\n quit ' | bluetoothctl # Make the RPi discoverable again
sleep 1
sudo hciconfig hci0 sspmode 0 # Deactivate SSP and activate PIN code authentication
exit 0
使其可执行sudo chmod +x bt_iphone.sh
并使用 crontab 每分钟执行此脚本:crontab -e
并在文件末尾:
* * * * * sudo bash /path/to/bt_iphone.sh
这并不优雅,但似乎可行。如果有人对最后一个问题有更好的解决方案,我愿意接受建议。
问题仍然存在(同样仅限于 iDevices),PIN 码存在超时,如果您在 PIN 码屏幕显示后 3 秒内未输入并确认 PIN 码,则无法连接。我还没有找到任何解决方法。