蓝牙设备配置 HCI

蓝牙设备配置 HCI

启动蓝牙设备

检查RFkill列表,蓝牙hci设备是否被Block

rfkill list
$     rfkill list
0: bt_default: Bluetooth
Soft blocked: no
Hard blocked: no
1: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
2: brcmfmac-wifi: Wireless LAN
Soft blocked: no
Hard blocked: no
3: hci0: Bluetooth
Soft blocked: yes
Hard blocked: no

若blocked yes则

rfkill unblock 3

若需要恢复关闭状态节约电源,使用block命令即可

蓝牙设备属性配置

sudo hciconfig hci0 piscan
sudo hciconfig hci0 iscan

若有需要可以进入bluetoothctl管理,使用discoverable onpairable on来开启蓝牙

蓝牙服务端配置

以L2CAP协议传输数据为例

import bluetooth

def l2cap_server():
server_sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
psm = 0x1001 # L2CAP PSM(Protocol/Service Multiplexer)
server_sock.bind(("", psm))
server_sock.listen(1)

print(f"Waiting for connection on L2CAP PSM {psm}")

client_sock, client_info = server_sock.accept()
print(f"Accepted connection from {client_info}")

try:
while True:
data = client_sock.recv(1024)
if not data:
break
print(f"Received: {data.decode('utf-8')}")
except IOError:
pass
finally:
client_sock.close()
server_sock.close()

if __name__ == "__main__":
l2cap_server()

客户端在配对后连接

import bluetooth

def l2cap_client():
server_address = "XX:XX:XX:XX:XX:XX" # 替换为服务器的蓝牙地址
psm = 0x1001 # L2CAP PSM(Protocol/Service Multiplexer)

sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
sock.connect((server_address, psm))

try:
while True:
data = input("Enter message to send: ")
sock.send(data.encode('utf-8'))
except KeyboardInterrupt:
pass
finally:
sock.close()

if __name__ == "__main__":
l2cap_client()

即可正常传输数据