linux蓝牙建立spp服务连接

目的:实现Linux开发板与蓝牙串口设备的通信。

环境准备:安装有蓝牙驱动的linux开发板,支持蓝牙串口的设备,安装BlueZ

1.查询当前蓝牙服务:# sdptool browse local

如果出现Failed to connect to SDP server on FF:FF:FF:00:00:00: No such file or directory,则需要执行一下# bluetoothd,再次查询当前蓝牙服务# sdptool browse local,出现蓝牙服务列表

Browsing FF:FF:FF:00:00:00 ...
Service Name: Headset Audio Gateway
Service RecHandle: 0x10000
Service Class ID List:
  "Headset Audio Gateway" (0x1112)
  "Generic Audio" (0x1203)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 12
Profile Descriptor List:
  "Headset" (0x1108)
    Version: 0x0102

Service Name: Hands-Free Audio Gateway
Service RecHandle: 0x10001
Service Class ID List:
  "Handsfree Audio Gateway" (0x111f)
  "Generic Audio" (0x1203)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 13
Profile Descriptor List:
  "Handsfree" (0x111e)
    Version: 0x0105

Service Name: AVRCP TG
Service RecHandle: 0x10002
Service Class ID List:
  "AV Remote Target" (0x110c)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 23
  "AVCTP" (0x0017)
    uint16: 0x103
Profile Descriptor List:
  "AV Remote" (0x110e)
    Version: 0x0104

Service Name: AVRCP CT
Service RecHandle: 0x10003
Service Class ID List:
  "AV Remote" (0x110e)
Protocol Descriptor List:
  "L2CAP" (0x0100)
    PSM: 23
  "AVCTP" (0x0017)
    uint16: 0x103
Profile Descriptor List:
  "AV Remote" (0x110e)
    Version: 0x0100

      可以看到在列表中,没有我们要的SSP服务,也就是串口服务,此时我们需要添加一个spp服务。

2.添加spp服务:执行# sdptool add SP,出现Serial Port service registered,表示已经添加成功,再次查询本地蓝牙服务,可以看到

Service Name: Serial Port
Service Description: COM Port
Service Provider: BlueZ
Service RecHandle: 0x10004
Service Class ID List:
  "Serial Port" (0x1101)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 1
Language Base Attr List:
  code_ISO639: 0x656e
  encoding:    0x6a
  base_offset: 0x100
Profile Descriptor List:
  "Serial Port" (0x1101)
    Version: 0x0100

3.设置蓝牙搜索可见:#hciconfig hci0 piscan

4.扫描蓝牙设备:#hcitool scan

5.新建端口:# mknod -m 666 /dev/rfcomm0 c 216 0

6.绑定设备:# rfcomm bind 0 要连接的蓝牙MAC地址 要绑定的设备通道号(一般为1,可输入# sdptool browse 蓝牙MAC地址 查询。

  # rfcomm bind 0 00:80:25:43:2D:A7 1

7.连接设备:# rfcomm connect 0 要连接的蓝牙MAC地址 要绑定的设备通道号(同上)

此时如果出现Can't create RFCOMM TTY: Address already in use,需要释放一下

# rfcomm release 0,再次执行连接,出现Connected /dev/rfcomm0 to 00:80:25:43:2D:A7 on channel 1 Press CTRL-C for hangup,表示连接成功。按CTRL + C退出。

8.读端口数据:# cat /dev/rfcomm0,此时可能会提示cat: can't open '/dev/rfcomm0': No such file or directory,再重新执行一下步骤5 、6,再次运行# cat /dev/rfcomm0,即可接收到蓝牙设备发送的数据。

当结束数据接收时,需要重新连接,即步骤7,显示Can't create RFCOMM TTY: Address already in use,不用管他,再次读端口数据即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值