資料介紹
低功耗藍(lán)牙 (BLE) 是一種低功耗藍(lán)牙通信形式??纱┐髟O(shè)備,例如我在 Predictive Wear 幫助設(shè)計(jì)的智能服裝,必須盡可能限制功耗以延長(zhǎng)電池壽命,并經(jīng)常使用 BLE。Bluetooth Special Interest Group (SIG)定義了設(shè)備與藍(lán)牙設(shè)備交互時(shí)應(yīng)實(shí)施的幾種規(guī)范,他們將其稱為“配置文件”。大多數(shù)應(yīng)用配置文件利用通用屬性配置文件 (GATT) 通過(guò) BLE 鏈路發(fā)送數(shù)據(jù)。BLE 中包含三個(gè)基本概念:配置文件、服務(wù)和屬性。
Bluetooth SIG 對(duì)許多通用配置文件、服務(wù)和屬性進(jìn)行了標(biāo)準(zhǔn)化。但是,在創(chuàng)建自定義硬件時(shí),通常需要?jiǎng)?chuàng)建自定義服務(wù)和屬性,而且可用的教程并不多。使事情變得更加困難的是,Adafruit 沒(méi)有提供任何有關(guān)設(shè)計(jì)移動(dòng)應(yīng)用程序以與其 BLE 模塊配對(duì)的指導(dǎo),并且其應(yīng)用程序的源代碼很難進(jìn)行逆向工程。所以,我會(huì)為你做的。
本教程旨在解釋:
如何設(shè)計(jì)自定義 GATT 服務(wù)和特性
如何將 Adafruit Bluefruit LE SPI Friend 編程為這些自定義服務(wù)和特性的 GATT 服務(wù)器
如何編寫 Android 設(shè)備作為 GATT 客戶端從 GATT 服務(wù)器讀取數(shù)據(jù)
本教程無(wú)意轉(zhuǎn)化為生產(chǎn)就緒的應(yīng)用程序——這只是對(duì) BLE 的介紹。
背景閱讀:
Adafruit Bluefruit LE SPI Friend 文檔
如果您不熟悉 GATT 或 BLE
第 1 步:設(shè)計(jì)定制服務(wù)和特征
介紹
這篇文章很好地解釋了如何設(shè)計(jì)自定義服務(wù)和特性。我強(qiáng)烈建議通讀這篇文章。我在下面提供了一個(gè)非常簡(jiǎn)單的概述,忽略了有利于簡(jiǎn)單的微妙之處。
GATT 服務(wù)是特征的集合。
GATT 特征包含屬性、值和零個(gè)或多個(gè)描述符。
屬性:客戶端(Android App)應(yīng)如何處理數(shù)據(jù),例如讀取、寫入、無(wú)響應(yīng)寫入、通知和指示。
值:特性的實(shí)際值,例如 1089
描述符:這是有關(guān)值的信息,例如單位、毫秒
設(shè)計(jì)
好的,現(xiàn)在你知道什么是服務(wù)和特性了,我們需要弄清楚如何設(shè)計(jì)一些服務(wù)和特性來(lái)獲取我們的自定義數(shù)據(jù)并將其從我們的 GATT 服務(wù)器(Arduino)發(fā)送到客戶端(Android App)。讓我們考慮一個(gè)從加速度計(jì)-陀螺儀模塊 (AGM) 收集數(shù)據(jù)的 Arduino 設(shè)備。我們想要從三個(gè)空間軸收集陀螺儀和加速度測(cè)量值以及進(jìn)行這些測(cè)量的時(shí)間,并將這些數(shù)據(jù)傳輸?shù)轿覀兊囊苿?dòng)應(yīng)用程序。我們還想知道何時(shí)需要為設(shè)備充電,因此我們想讀取電池電量并將其傳輸?shù)轿覀兊囊苿?dòng)應(yīng)用程序。
1. 我們可以使用任何標(biāo)準(zhǔn)服務(wù)和特性嗎?
Bluetooth SIG 對(duì)許多通用服務(wù)和特性進(jìn)行了標(biāo)準(zhǔn)化。首先,檢查這些以查看您是否可以選擇任何標(biāo)準(zhǔn)化服務(wù)和特性。標(biāo)準(zhǔn)服務(wù)和特性可以使用更小的數(shù)據(jù)包,因?yàn)橥ㄓ梦ㄒ粯?biāo)識(shí)符 (UUID) 是 16 位,而自定義服務(wù)和特性必須使用 128 位作為它們的 UUID。稍后會(huì)詳細(xì)介紹 UUID。通過(guò)我們的搜索,我們找到了一個(gè)標(biāo)準(zhǔn)化的“電池服務(wù)”,其中包含一個(gè)特征“電池電量”。
2. 將您要通過(guò) BLE 發(fā)送的所有數(shù)據(jù)值分成特征和服務(wù)
我們可以將自定義數(shù)據(jù)點(diǎn)分解為一項(xiàng)自定義服務(wù)中的七個(gè)自定義特征。我們將此服務(wù)稱為“AGM 服務(wù)”。它將包含 7 個(gè)特性:x 加速度、y 加速度、z 加速度、x 陀螺儀、y 陀螺儀、z 陀螺儀和時(shí)間參考。
3. 確定每個(gè)特征所需的屬性
一個(gè)特征可能有幾個(gè)屬性。
讀取:客戶端(Android App)可以從 GATT 服務(wù)器(Arduino)讀取一個(gè)值
寫入:客戶端可以更改來(lái)自 GATT 服務(wù)器的值
指示:如果 GATT 服務(wù)器的值發(fā)生變化,客戶端將收到通知,并且客戶端應(yīng)向 GATT 服務(wù)器發(fā)送確認(rèn)
通知:如果 GATT 服務(wù)器的值發(fā)生變化,客戶端將收到通知,并且客戶端不會(huì)向 GATT 服務(wù)器發(fā)送確認(rèn)
對(duì)于本教程,我們將所有特性設(shè)置為讀取,但電池電量除外,它同時(shí)具有通知和讀取屬性。
4. 為自定義服務(wù)和特性生成 UUID 并找到標(biāo)準(zhǔn) UUID
正如我之前簡(jiǎn)要提到的,Bluetooth SIG 標(biāo)準(zhǔn)化服務(wù)和特性使用 16 位 UUID,而自定義服務(wù)和特性使用 128 位 UUID。例如,查看藍(lán)牙 SIG 上的電池服務(wù)分配編號(hào)。分配的數(shù)字0x180F代表128位UUID "0000 180F-0000-1000-8000-00805F9B34FB”。粗體的四位數(shù)字(16 位)對(duì)于特定的標(biāo)準(zhǔn)化服務(wù)或特征是唯一的,而其他字符在所有標(biāo)準(zhǔn)化服務(wù)和特征之間是保守的。因?yàn)榭蛻舳撕?GATT 服務(wù)器都知道標(biāo)準(zhǔn)化的服務(wù)和特性僅在粗體數(shù)字上有所不同,數(shù)據(jù)包的大小可以大大減少。但是,自定義服務(wù)和特性不能在相同的假設(shè)下運(yùn)行。
相反,自定義服務(wù)和特性必須使用未縮寫的 128 位 UUID。這是一個(gè)在線 UUID 生成器。自定義 UUID 可接受除標(biāo)準(zhǔn)化 UUID 之外的任何 UUID。但是,典型的命名約定是表示自定義服務(wù) 00000001-... 以及該自定義服務(wù)中的特征 00000002-...
這是我們將與他們的 UUID 一起實(shí)施的服務(wù)和特征的摘要電子表格。
第 2 步:Arduino 代碼
更新 BLUEFRUIT LE SPI 朋友
首先,按照他們?cè)谶B接指南中指定的方式連接 Adafruit Bluefruit LE SPI Friend并啟動(dòng) Arduino 設(shè)備。
確保在掃描藍(lán)牙設(shè)備時(shí)可以在您的 Android 設(shè)備上找到 Adafruit Bluefruit LE SPI Friend。下載Bluefruit Connect應(yīng)用程序,連接到 Adafruit Bluefruit LE SPI Friend 并允許它更新設(shè)備上的固件。這一步很重要。如果您不更新固件,您通過(guò) Arduino 向設(shè)備發(fā)出的命令可能會(huì)失敗,并且不會(huì)有明顯的錯(cuò)誤讓您發(fā)現(xiàn)問(wèn)題所在。
這是我這個(gè)項(xiàng)目的回購(gòu)協(xié)議。您可以在此處查看完整的 Arduino 代碼。
概述
需要注意的一些重要事項(xiàng):
在 setup() 方法中,所有自定義 UUID 必須在每?jī)蓚€(gè)字符之間包含“-”。例如,“AT+GATTADDCHAR=UUID128=00-00-00-05-62-7E-47-E5-A3-FC-DD-AB-D9-7A-A9-66”將起作用。“AT+GATTADDCHAR=UUID128=00000005-627E-47E5-A3fCDDABD97AA966”將不起作用。
請(qǐng)注意,在 setup() 方法中,“battery.begin(true);” 調(diào)用“ble.reset();” 自動(dòng)地。如果您不像我那樣使用電池服務(wù),則需要重置 ble 模塊(使用“ble.reset();”),我有命令“battery.begin(true);”。
在 setup() 方法中,如果要調(diào)試,請(qǐng)將“if ( !ble.begin(false) )” 更改為“if ( !ble.begin(true) )”。
這段代碼是不言自明的。我包括了每個(gè)自定義方法的描述。設(shè)置方法讓 BLE 模塊準(zhǔn)備好充當(dāng) GATT 服務(wù)器。循環(huán)方法通過(guò)加速度計(jì)陀螺儀模塊 (AGM) 的假掃描,并為這些值生成一個(gè)從 1 到 100 的隨機(jī)數(shù)。電池耗盡 1% 以模擬電池使用情況。您可以輕松地將此代碼替換為實(shí)際傳感器值。此代碼假定您將傳輸一組 AGM 數(shù)據(jù),長(zhǎng)度為 6 個(gè)測(cè)量值,而不是單個(gè)測(cè)量值,因?yàn)榉治?AGM 數(shù)據(jù)窗口可能比單個(gè)數(shù)據(jù)點(diǎn)更有用。如果您更改數(shù)組大小,請(qǐng)注意 android studio 代碼中需要進(jìn)行更改。要捕獲一組數(shù)據(jù),您必須傳遞一個(gè)計(jì)數(shù)器以及您打算發(fā)送的數(shù)據(jù)。這個(gè)計(jì)數(shù)器允許您從 android studio 應(yīng)用程序中找到您在窗口中的位置,這樣您就可以等待收聽窗口中丟失的數(shù)據(jù)點(diǎn)。如果沒(méi)有計(jì)數(shù)器或使用不同大小的數(shù)組,android studio 項(xiàng)目要么會(huì)丟失數(shù)據(jù)點(diǎn),要么會(huì)陷入循環(huán)等待它期望的剩余數(shù)據(jù)點(diǎn)。
第 3 步:Android Studio 代碼
這是我這個(gè)項(xiàng)目的回購(gòu)協(xié)議。您可以在此處查看完整的 Android Studio 代碼。
概述
我將繼續(xù)更新此內(nèi)容,更全面地概述 arduino 和 android 代碼的工作細(xì)節(jié)……該應(yīng)用程序功能齊全,因此您可以隨時(shí)自己查看代碼。
第 4 步:最終申請(qǐng)
恭喜!您的應(yīng)用程序已下載到您的手機(jī),您的可穿戴設(shè)備已充電并正在傳輸數(shù)據(jù)。
啟動(dòng)應(yīng)用程序
要開始使用,請(qǐng)單擊應(yīng)用程序的啟動(dòng)器圖標(biāo)。
授予權(quán)限
您需要批準(zhǔn)使用某些權(quán)限才能使應(yīng)用程序正常運(yùn)行。
掃描設(shè)備
接下來(lái),單擊應(yīng)用程序左上角的“掃描”按鈕。
選擇您的可穿戴設(shè)備
接下來(lái),從可用 BLE 設(shè)備列表中選擇您的可穿戴設(shè)備。它的名字是“BLE Arduino 硬件”。
獲取數(shù)據(jù)等待應(yīng)用程序獲取 AGM 數(shù)據(jù)并確定用戶靜止或移動(dòng)的位置。
查看您的結(jié)果在屏幕上查看結(jié)果!單擊同步按鈕可再次讀取數(shù)據(jù)。
?
- 使用Arduino和處理Android應(yīng)用程序DIY車速表
- Arduino/Android藍(lán)牙串行監(jiān)視器應(yīng)用程序
- 搶答器multutsim12程序源代碼下載 18次下載
- 0.96寸帶字庫(kù)的OLED顯示應(yīng)用程序源代碼下載 41次下載
- ezLINX?示例PC應(yīng)用程序源代碼
- Android Studio從入門到精通文件下載 12次下載
- matlab應(yīng)用程序及源代碼下載 35次下載
- 生產(chǎn)線計(jì)數(shù)器控制應(yīng)用程序源代碼下載 27次下載
- 鋼琴應(yīng)用程序web特效HTML5源代碼 4次下載
- 學(xué)生信息管理系統(tǒng)的應(yīng)用程序和源代碼與工程文件免費(fèi)下載 22次下載
- 使用Arduino實(shí)現(xiàn)1602顯示的測(cè)試源代碼免費(fèi)下載 7次下載
- Linux中應(yīng)用程序PING的源代碼免費(fèi)下載 13次下載
- 源代碼編輯器應(yīng)用程序軟件免費(fèi)下載 16次下載
- 代碼編譯器Studio2.2版本的如何應(yīng)用在應(yīng)用程序的詳細(xì)分析 0次下載
- Android源代碼編譯 5次下載
- hex可以轉(zhuǎn)成源代碼么 179次閱讀
- 嵌入式程序基于源代碼仿真調(diào)試 906次閱讀
- Python證件照制作小程序源代碼 3139次閱讀
- 聊聊PHP的web應(yīng)用程序開發(fā)框架存在的漏洞有哪些 1562次閱讀
- Android Studio Bumblebee 穩(wěn)定版亮點(diǎn)與新功能 3186次閱讀
- 深入了解Android Studio的最新功能 2521次閱讀
- 淺談RAM 執(zhí)行應(yīng)用程序 3061次閱讀
- 基于Arduino UNO和HC-05藍(lán)牙模塊控制伺服電機(jī) 4824次閱讀
- HarmonyOS應(yīng)用程序Ability的作用 2391次閱讀
- 基于LabVIEW和單片機(jī)實(shí)現(xiàn)DSP應(yīng)用程序代碼的自舉模塊設(shè)計(jì) 1964次閱讀
- 虛擬機(jī):Ubuntu配置Android Studio的步驟 2690次閱讀
- C語(yǔ)言的源代碼文件和目標(biāo)文件與可執(zhí)行文件的詳細(xì)介紹 8303次閱讀
- Linux操作的防火墻軟件應(yīng)用程序定義和配置設(shè)置及底層源代碼 4946次閱讀
- 使用android通過(guò)USB調(diào)試真機(jī)程序 1907次閱讀
- C51讀寫AT24C04源代碼及AT24C04測(cè)試程序 1.6w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多