You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python脚本确认树莓派的蓝牙配对请求?

树莓派蓝牙自动配对与Python控制解决方案

方案1:修改蓝牙配置,禁用手动配对确认

直接调整蓝牙服务配置,让树莓派自动接受配对请求,跳过弹窗确认:

  1. 编辑蓝牙主配置文件:
    sudo nano /etc/bluetooth/main.conf
    
  2. 找到或添加以下参数:
    AutoAcceptSolictations = yes
    SecureSimplePairing = yes
    
    • AutoAcceptSolictations:控制是否自动接受配对请求
    • SecureSimplePairing:启用简化配对流程,减少交互步骤
  3. 重启蓝牙服务生效:
    sudo systemctl restart bluetooth
    

修改后移动设备发起配对时,树莓派会自动完成配对,无需手动确认。

方案2:Python调用交互式bluetoothctl会话

单个pair命令执行失败,是因为该命令需要在bluetoothctl的交互式环境中运行。可以用Python的subprocess模块启动bluetoothctl进程,通过标准输入发送命令序列:

import subprocess
import time

def pair_bluetooth_device(mac_address):
    # 启动bluetoothctl交互式进程
    btctl = subprocess.Popen(
        ["bluetoothctl"],
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True
    )
    
    # 发送配对相关命令
    commands = [
        "discoverable on",
        f"pair {mac_address}",
        f"trust {mac_address}",
        f"connect {mac_address}"
    ]
    
    for cmd in commands:
        btctl.stdin.write(cmd + "\n")
        btctl.stdin.flush()
        time.sleep(1)  # 给蓝牙服务预留处理时间
    
    # 获取输出用于调试(可选)
    stdout, stderr = btctl.communicate()
    print(stdout)
    if stderr:
        print("错误信息:", stderr)

# 调用示例
target_mac = "XX:XX:XX:XX:XX:XX"  # 替换为目标设备MAC
pair_bluetooth_device(target_mac)

注意:运行脚本需要root权限,执行命令为sudo python3 your_script.py。

方案3:通过DBus直接控制蓝牙服务(更稳定灵活)

树莓派的蓝牙服务通过DBus暴露底层接口,Python可直接调用API完成配对流程,无需依赖命令行工具:

  1. 安装依赖库:
    sudo apt-get install python3-dbus
    
  2. 示例代码(自动发现并配对目标设备):
    import dbus
    import dbus.mainloop.glib
    from gi.repository import GLib
    
    def handle_device_found(path, properties):
         if "Address" in properties and properties["Address"] == target_mac:
             print(f"发现目标设备:{properties['Name']}")
             # 获取设备操作接口
             device = dbus.Interface(bus.get_object("org.bluez", path), "org.bluez.Device1")
             # 执行配对、信任、连接操作
             device.Pair()
             device.Trust()
             device.Connect()
             print("配对连接完成")
             mainloop.quit()
    
    def main():
        global bus, mainloop, target_mac
        target_mac = "XX:XX:XX:XX:XX:XX"  # 替换为目标设备MAC
        
        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
        bus = dbus.SystemBus()
        
        # 获取默认蓝牙适配器(hci0)
        adapter_path = "/org/bluez/hci0"
        adapter = dbus.Interface(bus.get_object("org.bluez", adapter_path), "org.bluez.Adapter1")
        
        # 开启设备发现
        adapter.SetDiscoveryFilter({"Transport": "bredr"})
        adapter.StartDiscovery()
        print("开始扫描蓝牙设备...")
        
        # 监听设备发现信号
        bus.add_signal_receiver(
            handle_device_found,
            signal_name="PropertiesChanged",
            dbus_interface="org.freedesktop.DBus.Properties",
            path_keyword="path"
        )
        
        mainloop = GLib.MainLoop()
        mainloop.run()
    
    if __name__ == "__main__":
        main()
    

该代码会自动发现目标设备并完成全流程配对连接,无任何手动交互。


内容的提问来源于stack exchange,提问作者GANESH AADHINENI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:47:14