linux下蓝牙BLE(rtl8821)开发

在Linux下使用蓝牙的资料很多,但大部分都是以前的蓝牙2.0,自己这个蓝牙也是搞了很长时间,中间听过一段时间,现在回过头来才搞定,接下来我将从以下几个方面介绍如何在linux下使用蓝牙BLE设备(arm-linux)

一、开发环境

AM335X RTL8821AU(此为一个WiFi蓝牙二合一设备) linux内核4.1 bluez5.25(这个后面讲)

二、驱动的移植

下载驱动:http://download.csdn.net/detail/lixiaojie123123/9888777

根据驱动中的readme可以直接在ubuntu上运行,我是在AM335X上面运行,此时需要移植,移植过程参考如下博文:http://blog.csdn.net/qqchangjianfei/article/details/51719108 蓝牙移植部分

三、蓝牙的使用

如果移植成功,则插上蓝牙设备后,系统能够识别,下面介绍常用的蓝牙命令:

hciconfig:与ifconfig类似,用来配置蓝牙状态,可以用hciconfig --help来查看它支持多少命令
            我们基本用到的:hciconfig hci0 up(down)等基本操作
hcitool: 这个的命令很多,主要有hcitool lescan等
gatttool: 这个命令是核心(BLE),一般用法 gatttool -b 设备地址 -I进入交互模式

你的驱动移植成功后,使用以上命令打来蓝牙设备,搜索,然后用gatttool去进入交互模式(针对BLE),看能不能进去,如果可以,恭喜你,你不用重新编译BLUEZ,如果不行那就尴尬了(看下一部分)
gatttool相关的操作网上都有,我这里提一点: 我再gatttool的过程中,想写数据时,按照网上普遍:

这里写图片描述

总是提示如下错误:Characteristic Write Request failed: Attribute value length is invalid
我也不知道为什么,我是用下面的命令实现的
char-write-cmd 0x0025 01

这样就讲01写入了,你可以用手机去读取看看是否成功写入(这里推荐一个BLE调试软件: http://download.csdn.net/detail/lixiaojie123123/9888832)

bluez5.25的移植

如果你的设备可以直接使用,就忽略此部分,如果你在gatttool时总是返回(111)connect: Connection refused (111),则这一部分你就好好看看
首先
很感谢这篇博客,帮助我成功的交叉编译了BLUEZ5.25,大家编译过程可以参考:
http://blog.csdn.net/wang_shuai_ww/article/details/41774477
我在这里提醒几点:
(1)在编译的时候提示找不到我们编译过的文件,则我们再./configure时进行指定路径:CFLAGS=-I/xx/xx/include LIBS=-L/xx/xx/lib即可
(2)安装ncurses时,如果你是ubuntu16.04有可能会报错,此时需要先

export CPPFLAGS=”-P”

然后再./configure
(3)在最后交叉编译BLUEZ是,需要在博文提供的./configure后再加上:–enable-experimental –enable-maintainer-mode
(4)在./configure后,生成了Makefile,需要在添加-lncurses时,同时在Makefile中找到–Werror,然后 将其去掉(这个是将警告变成错误)去掉之后,我们编译过程才会顺利进行

btmgmt

我再这里用一个部分来讲这个命令,就能表明这个命令的重要性了

编译完成之后,讲我们安装目录的lib文件夹下的文件拷贝到系统的/usr/lib文件夹下
将tools文件夹下的btmgmt拷贝到/usr/bin文件夹下,然后你看自己的需要,将一些新的命令拷贝进/usr/bin替换掉现在的命令

btmgmt
首先你按照下面的操作执行:

btmgmt power off
btmgmt le on
btmgmt bredr off
btmgmt power on
hcitool lescan
gatttool -b (搜索到的BLE地址) -I
connect

看是否成功连接?我的在这里成功连接了,下面就自己去百度btmgmt的用法了,我也第一次接触,不是特别懂,有懂得大神,大家留言交流一下

总结

因为LINUX上大家很少用蓝牙来完成一些事情,关于这方面的(特别是BLE)的操作很少,我也是在网上去找资料完成的,具体的我也不懂,还需好好研究啊

问题

此时 我们的蓝牙是作为主机去连接从机,那能不能让蓝牙作为从机,从而与我们的手机进行通信呢?该怎样操作?

linux下一个蓝牙主机能否同时连接多个从机?我试了在ubuntu下能够开两个窗口,连接两个,这个如何实现?

你可能感兴趣的:(linux-驱动)