最近需要在某个开发板上面通过蓝牙和手机蓝牙连接,并通过RFCOMM通信。还没有做过蓝牙RFCOMM相关工作,因此先在linux PC上面调试一下流程,并在此记录调试过程。
一、说明
RFCOMM协议基于L2CAP协议的串行(9针RS-232)仿真。
本文中实现了RFCOMM server和client通信。
二、设备
linux主机(Ubuntu-14.04)、linux虚拟机(Ubuntu-14.04)、Android手机一台、不知名蓝牙dongle_1(controller)、CSR 蓝牙dongle_2(controller)。
Linux主机+dongle_1作为server端; linux虚拟机+dongle_2作为client端;Android手机作为client端。
三、环境搭建
Server端:
1. 安装bluez协议栈
2. 查看bluetoothd进程是否启动:ps -ef|grep blue
root 1891 1 0 5月19 ? 00:00:00 /usr/sbin/bluetoothd
如果没有启动,执行:/usr/sbin/bluetoothd -C &
注:经过测试,该过程不是必须的。可能是因为server端程序是socket通信,不需要bluetoothd。
3. 查看bluetooth service是否存在:service --status-all | grep blue
如果不存在,执行:service bluetooth start
注:该步骤经过测试也可以不需要。执行service bluetooth stop,也可以正常通信。可能是因为server端程序是socket通信,不需要bluetooth service。
4. 将dongle_1插入linux主机端;并配置。
1> 执行:hciconfig,观察dongle状态是否为UP RUNNING,如果不为UP RUNNING,则执行:hciconfig hci0 UP
注:hci0是根据hciconfig打印的BD Address来确定的。如果有两个dongle,有可能是hci1。
2> 使蓝牙设备可见(可被其他蓝牙设备扫描到,如手机)
执行命令:hciconfig piscan
然后执行hciconfig,观察状态是否为UP RUNNING PSCAN ISCAN
3> 添加SPP服务
sdptool add SP
也可以执行添加所有服务:
sdptool add --channel=1 DID SP DUN LAN FAX OPUSH FTP HS HF SAP NAP GN PANU HID CIP CTP A2SRC A2SNK SYNCML NOKID PCSUITE SR1
4> 关闭pin码验证