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,不用管他,再次读端口数据即可。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安卓系统中,实现蓝牙spp连接需要以下步骤: 1.获取蓝牙适配器 首先需要获取蓝牙适配器,在AndroidManifest.xml文件中加入以下权限: <uses-permission android:name="android.permission.BLUETOOTH" /> 然后在Activity中获取蓝牙适配器: BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 2.搜索蓝牙设备 接下来需要搜索设备,获取可以连接的设备列表。可以使用startDiscovery()方法进行搜索: bluetoothAdapter.startDiscovery(); 当搜索到设备时会触发监听器,在监听器的回调中可以获取设备列表: BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 3.建立连接 选择要连接的设备,然后使用BluetoothSocket建立连接: BluetoothSocket socket = device.createRfcommSocketToServiceRecord(MY_UUID); MY_UUID是自己定义的UUID,可以在设备之间进行传递,以保证两台设备的连接建立连接时需要注意确保设备配对成功。 4.传输数据 连接建立后就可以进行数据的传输了。使用InputStream和OutputStream进行读写操作。 如果需要实现蓝牙客户端,只需要搜索到设备并建立连接即可。如果需要实现蓝牙服务器,可以使用BluetoothServerSocket监听是否有设备连接进来,然后进行数据传输操作。 总的来说,安卓实现蓝牙spp连接需要获取蓝牙适配器、搜索蓝牙设备、建立连接和进行数据传输。以上是简单的介绍,具体实现需要根据项目需求进行细节调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值