如何在bash脚本中自动向bluetoothctl传递PIN码配对HC-05
自动配对HC-05蓝牙模块(无需手动输入PIN码)
一、修复bluetoothctl自动配对的方法
1. 使用expect脚本处理交互式输入
bluetoothctl的配对提示并非读取标准输入,管道方式无法触发正确的输入时机,因此可以用expect工具模拟交互式操作:
先安装expect:
sudo apt install expect
创建配对脚本pair_hc05.sh:
#!/usr/bin/expect -f set MAC [lindex $argv 0] set PIN [lindex $argv 1] spawn bluetoothctl expect "Agent registered" send "pair $MAC\r" expect "Enter PIN code:" send "$PIN\r" expect "Pairing successful" send "quit\r" expect eof
赋予执行权限并运行:
chmod +x pair_hc05.sh sudo ./pair_hc05.sh XX:XX:XX:XX:XX:XX 1234
2. 提前配置蓝牙设备的PIN码
通过修改系统蓝牙配置文件,让系统自动调用指定PIN完成配对:
- 创建设备配置目录(若不存在):
sudo mkdir -p /var/lib/bluetooth/[你的蓝牙适配器MAC]/
注:可用bluetoothctl show查看适配器MAC,比如Controller AA:BB:CC:DD:EE:FF中的AA:BB:CC:DD:EE:FF即为适配器MAC
- 创建设备配置文件
/var/lib/bluetooth/[适配器MAC]/[HC-05的MAC]/info,写入以下内容:
[General] Name=HC-05 Class=0x000000 SupportedTechnologies=BR/EDR; Trusted=true Blocked=false Services=00001101-0000-1000-8000-00805f9b34fb; [LinkKey] Key=你的PIN码对应的16进制值(比如1234对应00000000000000000000000031323334) Type=4 PINLength=4 [DeviceID] Source=2 Vendor=0x0000 Product=0x0000 Version=0x0000
注:PIN码转16进制可执行echo -n "1234" | xxd -p获取
- 重启蓝牙服务:
sudo systemctl restart bluetooth
之后执行bluetoothctl pair XX:XX:XX:XX:XX:XX即可自动完成配对。
二、树莓派OS上的替代工具
可以使用bluez-tools包中的bt-device命令,支持直接指定PIN码配对:
- 安装bluez-tools:
sudo apt install bluez-tools
- 执行配对命令:
sudo bt-device --pair XX:XX:XX:XX:XX:XX --pin 1234
若需自动连接,可追加命令:
sudo bt-device --connect XX:XX:XX:XX:XX:XX
内容的提问来源于stack exchange,提问作者T0maas
相关产品推荐
相关产品推荐

