树莓派怎么使用自带的蓝牙

树莓派怎么使用自带的蓝牙

这里讲到的是pi3b+的一个使用,环境在linux openwrt的操作平台上

搭建

我们知道pi自带的有蓝牙功能,但是不管是百度,还是谷歌,都是使用的外设蓝牙,自带的蓝牙弃用,当然也与一定的道理,自带的蓝牙就没有外设的好,相对而言

搭建好系统之后,有时候在系统没有任何的bluetooth操作,或者命令,那么可能就是没有搭建好相关的环境,这里用openwrt做测试,其他ubuntu等平台应该是一个概念

首先我们需要用到opkg这个管理工具(ubuntu是apt-get)

opkg update

更新完毕之后,我们会发现几个包
树莓派怎么使用自带的蓝牙_第1张图片

opkg install packname
#packname换成上面四个包名即可

安装完成之后,怎么验证是否完成安装,我们输入hcitool,hciconfig,这些工具看看有没有,没有的可以重启一下
当然还不可能就这么完了

我们需要启动一个蓝牙设备,在/dev目录下可以看到这个设备ttyAMA0,其他操作系统应该也有与之对应的

/usr/bin/hciattach /dev/ttyAMA0 bcm43xx 115200 noflow-

这个如果你是pi3b+那么可能是有问题的,bluez上面我们安装的环境暂时不支持当前的蓝牙芯片,运行代码仔细阅读是有提示的

所以如果不处理,那么蓝牙就是我之前文章说到的,地址是aa:aa:aa:aa:aa,当然扫描操作是可以的,但是其他操作就会报错,这个我在网上也有看到有人出现这样的错误,没有找到原因,这里需要一个补丁
这个补丁我暂时不放置上来,有需要的谷歌一下,百度找不到,但具体是哪个文件需要看报错的信息
这个补丁放到:/lib/firmware/brcm#
然后在执行命令即可,这个时候

hciconfig hci0 up

查看蓝牙地址就是正常的

使用

搭建完毕之后,我们可以使用了
这个时候里面有很多简单的工具,我只介绍一种,bluetoothctl,因为其他的工具太老,问题多,hcitool之类的

root#bluetoothctl
Agent registered
[bluetooth]#
#当前模式下,使用以下命令扫描
scan on
[CHG] Controller 43:45:C0:00:1F:AC Discovering: yes
[NEW] Device 9C:19:C2:0B:D9:32 Redmi AirDots 3
[CHG] Device E2:DD:0F:35:56:0F RSSI: -72
[NEW] Device 18:A7:F1:D4:70:3D U-RFR703C
[CHG] Device C1:64:6D:CF:DA:58 Connected: yes

scan off
#只有扫描出来的结果才能被使用进行连接操作

#随后我们找到我们需要连接的设备
[bluetooth]# connect FF:DE:FC:D9:16:58
Attempting to connect to FF:DE:FC:D9:16:58
#这里会提示成功的信息

连接上之后,如果是开发者,可能还需要收发信息

menu gatt

[已经连接的名字]# list-attributes
Primary Service
        /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000e
        6e400001-b5a3-f393-e0a9-e50e24dcca9e
        Nordic UART Service
Characteristic
        /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000e/char0011
        6e400003-b5a3-f393-e0a9-e50e24dcca9e
        Nordic UART RX
Descriptor
        /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000e/char0011/desc0013
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
Characteristic
        /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000e/char000f
        6e400002-b5a3-f393-e0a9-e50e24dcca9e
        Nordic UART TX
Primary Service
        /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000a
        00001801-0000-1000-8000-00805f9b34fb
        Generic Attribute Profile
Characteristic
        /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000a/char000b
        00002a05-0000-1000-8000-00805f9b34fb
        Service Changed
Descriptor
        /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000a/char000b/desc000d
        00002902-0000-1000-8000-00805f9b34fb
        Client Characteristic Configuration
#我们找到这个蓝牙设备的收发服务
#Characteristic
#        /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000e/char000f
#        6e400002-b5a3-f393-e0a9-e50e24dcca9e
#        Nordic UART TX
#       其中的tx就是发送
    [名字]# select-attribute /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000e/char000f
[名字:/service000e/char000f]#
[名字]# select-attribute /org/bluez/hci0/dev_C1_64_6D_CF_DA_58/service000e/char000f
[名字:/service000e/char000f]#
#这里注意一个地方,就是选择的时候我们支持select-attribute  两种,但是,最好使用attribute因为是用uuid会出现 Failed to write org.bluez.Error.Failed
#其他错误,bluez报错,当然这个也不是一定出错,但是这个错误非常的坑爹
#选择之后
write "100 100"
#这样就可以发送内容了
#读取内容同样的,找到rt的服务,选择,然后read就可以了

原创文章,切莫抄袭,切莫转发,各大网站到处盗用别人的文章,对作者不尊重,别人搜索出来一堆一个方案,真的是很恶心

你可能感兴趣的:(边缘路由,openwrt,shell,蓝牙,bluetooth)