1. 藍牙簡介
在藍牙協議棧中,有兩種協議用作藍牙數據傳輸,它們分別是:SPP(經典藍牙串口協議)和BLE(低功耗藍牙協議)。
單模藍牙模組:僅支持SPP或BLE的其中一種。
雙模藍牙模組:既支持SPP,同時又支持BLE。
而EASY-EAI-Nano-TB采用的藍牙模組為DB37,它是【僅支持BLE協議】的【單模】藍牙模組。
1.1 bluez
Bluez作為當前最成熟的開源藍牙協議棧,它是一個基于GNU General Public License (GPL)發布的開源項目,已成為linux官方的藍牙協議棧(從Linux2.4.6開始便成為Linux 內核的一部分),在Linux的各大發行版中已經得到了廣泛的應用。
可以這么理解:如何在Linux上使用藍牙?=如何使用bluez?
Bluez具體就是一套Linux官方支持的開源的藍牙協議棧處理工具集,具體包含了以下幾個工具:bccmd、bluemoon、bluetoothctl、bluetoothd、btattach、btmon、ciptool、hciattach、hciconfig、hcidump、hcitool、hex2hcd、l2ping、l2test、mpris-proxy、rctest、rfcomm、sdptool。
1.2 前期準備
首先安裝bluez。
apt-get install bluez
確認bluez已經成功安裝:
bluetoothctl -v
能夠如下輸出版本號,說明bluez已經成功安裝。

利用hciconfig工具可以確認藍牙設備已可以正常工作。
hciconfig -a

2. bluetooth工具
hci*系列的工具一般用于直接操作藍牙協議棧的HCI層,在新版的bluez工具集里逐漸不維護。而主流用于操作藍牙設備的是bluetooth工具:bluetoothd和bluetoothctl。
2.1 bluetoothd
是一個用于管理藍牙驅動的【應用層】服務,一般把它啟動起來就行。可以通過ps命令查看它是否已在后臺啟用:
sudo ps -ef | grep -i bluetoothd

在ubuntu系統中,不需要手動對此進程進行啟停。而是通過systemctl服務對bluetoothd進行管理,以下是關于bluetoothd服務啟/停和狀態查看的命令:
sudo systemctl status bluetooth.service ##查看bluetoothd服務狀態 sudo systemctl start bluetooth.service ##啟動bluetoothd服務,狀態重啟后不會保存 sudo systemctl stop bluetooth.service ##停止bluetoothd服務,狀態重啟后不會保存 sudo systemctl enable bluetooth.service ##使能服務,重啟設備后bluetoothd自動啟動 sudo systemctl disable bluetooth.service ##禁能服務,重啟設備后bluetoothd不會啟動
2.2 bluetoothctl
一個通過D-Bus與bluetoothd交互的工具,相當于bluetoothd服務的客戶端。bluetoothctl通過bluetoothd簡介去操作藍牙硬件。bluetoothctl內部集成了一個shell交互功能,直接在命令行運行bluetoothctl工具即可進入該工具的內部shell。

輸入help可以查看該工具支持的命令。

給藍牙芯片上電命令:
power on

進入advertise子菜單:給芯片改名,并讓芯片可以給其他藍牙主機掃描發現。
menu advertise name EASY-EAI-Nano-TB

然后back命令,返回上級菜單:
back
3. BLE協議通訊
BLE低功耗藍牙基于GATT。
3.1 開發板作為主機
首先把【手機】的藍牙調試助手【配置成從機】:開啟從機模式,開啟廣播。

然后再在開發板中(bluetoothctl這里)進行【開啟掃描】、【關閉掃描】、【連接設備】
開啟掃描:
scan on
發現目標設備后停止掃描:
scan off
列出掃描到的設備(找到MAC地址):
devices
與目標設備配對、信任、連接:
pair xx:xx:xx:xx:xx:xx trust xx:xx:xx:xx:xx:xx connect xx:xx:xx:xx:xx:xx
藍牙連接成功后,藍牙主機(開發板)進入gatt子菜單:
menu gatt
查看特征屬性:
list-attributes
(可以通過【BLE調試助手app】得知:fff1用于【從機發送】,fff2用于【從機接收】)
從機發送特征屬性為:
Characteristic (Handle 0x0000) /org/bluez/hci0/dev_78_C3_C4_C4_94_8D/service002f/char0030 0000fff1-0000-1000-8000-00805f9b34fb Unknown
從機接收特征屬性為:
Characteristic (Handle 0x0000) /org/bluez/hci0/dev_78_C3_C4_C4_94_8D/service002f/char0034 0000fff2-0000-1000-8000-00805f9b34fb Unknown
3.1.1 主機接收,從機發送
首先要選擇fff1
select-attribute /org/bluez/hci0/dev_78_C3_C4_C4_94_8D/service002f/char0030
然后打開通知
notify on

然后操作app,發送1Byte的hex數據過去開發板。

3.1.2 主機發送,從機接收
屬性要改選fff2
select-attribute /org/bluez/hci0/dev_78_C3_C4_C4_94_8D/service002f/char0034
然后執行write操作
write 0x67
最后app上就能收到了從開發板發過來的數據

3.2 開發板作為從機
先在開發板打開一個新的終端,編譯并運行gatt-server服務(一個用于與【主機】通信的應用程序):

再回到bluetoothctl執行以下命令,開啟藍牙廣播:
advertise on

采用【BLE調試助手app】,掃描并連接開發板藍牙。

3.2.1 主機接收,從機發送
【BLE調試助手app】向開發板讀取數據:

執行上訴操作以后,開發板上的gatt-server就會打印下方信息:

3.2.2 主機發送,從機接收
【BLE調試助手app】向開發板發送數據:

開發板上的gatt-server就會收到如下信息:
-
開發板
+關注
關注
26文章
6355瀏覽量
119535 -
瑞芯微
+關注
關注
27文章
811瀏覽量
54548 -
EASY-EAI靈眸科技
+關注
關注
4文章
73瀏覽量
3693 -
RV1126B
+關注
關注
0文章
63瀏覽量
213
發布評論請先 登錄
瑞芯微(EASY EAI)RV1126B 音頻輸入
瑞芯微(EASY EAI)RV1126B PWM使用
瑞芯微(EASY EAI)RV1126B 音頻輸出
【EASY EAI Nano-TB(RV1126B)開發板試用】+初識篇
【EASY EAI Nano-TB(RV1126B)開發板試用】命令行功能測試-shell腳本進行IO控制-燈閃
【EASY EAI Nano-TB(RV1126B)開發板試用】命令行功能測試-shell腳本進行IO控制-紅綠燈項目
【EASY EAI Nano-TB(RV1126B)開發板試用】命令行功能測試-shell腳本進行IO控制-紅綠燈按鈕項目
請問各位大佬,如何解決,瑞芯微 RV1126B 使用 mpp 自帶工具 調試時,內核直接報錯崩潰!
【EASY EAI Nano-TB(RV1126B)開發板試用】+1、開箱上電
【EASY EAI Nano-TB(RV1126B)開發板試用】介紹、系統安裝
RV1126系列選型指南:從RV1126到RV1126B,一文看懂升級差異
【免費試用】EASY EAI Nano-TB(RV1126B)開發套件評測
替代升級實錘!實測RV1126B,CPU性能吊打RV1126
瑞芯微(EASY EAI)RV1126B 人體關鍵點識別
瑞芯微(EASY EAI)RV1126B 藍牙使用
評論