BCSphere入門教程02:操作 Characteristic
特徵值(Characteristic)是GATT中的核心物件,Service/Descriptor其實都是為了對Characteristic進行操作而準備的。特徵值在BLE中支援很多型別的操作(比如:write/writeWithoutResponse/ read/notify/indicate等等),但為了簡化GATT Client的實現,bc.js將其劃分為了四種操作:write/read/ subscribe/unsubscribe。下面就通過一個例子來展示如何使用bc.js來操作特徵值。
硬體最小支援
Service : Custom Service
UUID: 0000fff0-0000-1000-8000-00805f9b34fb
Characteristic : Custom Characteristic
UUID: 0000fff1-0000-1000-8000-00805f9b34fb
Property: Write && Read
Function: 可以寫入資料,並且可以讀出上一次寫入的資料。初始值為0
Characteristic : Custom Characteristic
UUID: 0000fff4-0000-1000-8000-00805f9b34fb
Property: Notify || Indicate
Function: 每5秒鐘向訂閱端傳送一次notify或者indicate,資料為某一固定值即可
通過本章的學習,您可以:
- 學習到如何寫入/讀取/訂閱/取消訂閱一個特徵值
- 學習到如何使用DataValue物件來操作讀取和訂閱到的資料
- 通過一個使用HTML展現的頁面來對特徵值進行各種操作
Write
Write方法由手機端向裝置端寫入一個資料。介面需要指定兩個引數,分別是寫入型別和寫入的值,這個資料可以指定五種型別,分別是:'hex'/'ascii'/'unicode'/'raw'/'base64'。分別可以寫入由string表示的16進位制的值;由string表示的ASCII字串;由string表示的UNICODE字串;由Uint8Array(javascript用來操作二進位制資料的型別)表示的原始byte陣列;和由string表示的由base64編碼過後的字串。 獲取到需要操作的characteristic物件(獲取流程參見第一章)後,寫入一個值非常簡單:
function write(){
characteristic.write("Hex","01FFAD",function(){
alert("write success!");
},function(){
alert("write error!");
});
}
Read
和Write介面一樣,Read介面也需要獲取Characteristic物件之後進行操作:
function read(){
characteristic.read(function(data){
alert(JSON.stringify(data));
},function(){
alert("read error!");
});
}
Subscribe
當某個Characteristic的值發生變化,需要通知手機端的時候會觸發註冊在Characteristic物件上的函式,並將需要通知的值傳遞給手機端進行處理。通過呼叫Characteristic物件的subscribe函式來訂閱這個通知(這個資料通知使用notify和indicate傳送給手機端都可以觸發subscribe介面註冊的回撥函式)。
function subscribe(){
characteristic.subscribe(function(data){
alert(JSON.stringify(data));
});
}
Unsubscribe
如果希望取消訂閱一個特徵值,那麼呼叫unsubscribe函式即可:
function unsubscribe(){
characteristic.unsubscribe(function(){
alert("unsubscribe success");
},function(){
alert("unsubscribe error!");
});
},
DataValue物件
為了方便app開發者使用javascript對讀取或者訂閱到的資料進行操作,bc.js抽象出了DataValue物件來方便您對資料格式的轉換和操作。Read和Subscribe的回撥函式傳入的data是一個JSON物件,其中包括讀取裝置的ID(deviceAddress);讀取的Service在裝置中的下標索引(serviceIndex);讀取的Characteristic在Service中的下標索引(characteristicIndex);資料獲取到的時間戳(date);獲取到的值(value)。其中獲取到的值(value)是一個DataValue的物件。
比如在Read介面的回撥中:
function read(){
characteristic.read(function(data){
alert(data.value.getHexString()); //轉化為十六進位制的字串,並顯示
alert(data.value.getUnicodeString()); //轉化為Unicode的字串,並顯示
alert(data.value.getASCIIString()); //轉化為ASCII的字串,並顯示
alert(data.date); //資料獲取到的時間
},function(){
alert("read error!");
});
}
如果希望獲取DataValue封裝的原始值(ArrayBuffer),並使用javascript原生的二進位制操作方法處理ArrayBuffer的資料,使用data.value.value獲得即可。DataValue支援的介面和包含的具體欄位可以參考這裡。
至此,您已經可以使用bc.js的介面對特徵值進行各種操作,並使用DataValue來進行資料處理了!本章同樣提供了對應的原始碼。
下一章,我們將介紹bc.js中提供的掃描介面,並進一步詳細的介紹Device物件。
相關文章
- BCSphere入門教程目錄
- BCSphere入門教程01:Immediate Alert
- BCSphere入門教程06:使用Cordova標準模組
- BCSphere入門教程04:使用iBeacon介面
- BCSphere入門教程:導言和知識準備
- BCSphere入門教程03:掃描周圍裝置
- BCSphere入門教程05:標準Profile與自定義Profile
- Photoshop 2021中文入門教程|如何撤銷與還原操作
- MongoDB 入門教程系列之三:使用 Restful API 操作 MongoDBMongoDBRESTAPI
- Linux入門教程之sed 命令常用操作介紹Linux
- Docker 入門操作Docker
- git 入門操作Git
- 《MySQL 入門教程》第 02 篇 MySQL 安裝MySql
- Iptables入門教程
- vue入門教程Vue
- Redux入門教程Redux
- Electron入門教程
- Aseprite入門教程
- Twisted 入門 教程
- flask入門教程Flask
- Maven入門教程Maven
- awk 入門教程
- HBase入門教程
- Jmeter入門教程JMeter
- Elasticsearch入門教程Elasticsearch
- SnapKit入門教程APK
- Tmux入門教程UX
- Docker 入門教程Docker
- Thrift 入門教程
- Vuex入門教程Vue
- CMake入門教程
- RabbitMQ入門教程MQ
- mybatis入門教程MyBatis
- Git入門教程Git
- docker入門教程Docker
- tcpdump教程入門TCP
- Circos入門教程
- Vim入門教程