混合APP低功耗藍牙項目解析數(shù)據(jù)可能用到的一些小方法---ble

藍牙的適用場景

可用于第三方藍牙設(shè)備交互劳闹,必須要支持藍牙 4.0。
iOS上:硬件至少是 iphone4s伤为,系統(tǒng)至少是 iOS6催首。
android上:系統(tǒng)版本至少是 android4.3。
藍牙 4.0 以低功耗著稱疫衩,一般也叫 BLE(BluetoothLowEnergy)硅蹦。目前應用比較多的案例:運動手壞、嵌入式設(shè)備闷煤、智能家居

藍牙通訊原理概述

在藍牙通訊中有兩個主要的部分,Central 和 Peripheral童芹,有一點類似Client Server。Peripheral 作為周邊設(shè)備是服務器鲤拿。Central 作為中心設(shè)備是客戶端假褪。所有可用的藍牙設(shè)備可以作為周邊(Peripheral)也可以作為中央(Central),但不可以同時既是周邊也是中央近顷。

一般手機是客戶端生音, 設(shè)備(比如手環(huán))是服務器,因為是手機去連接手環(huán)這個服務器窒升。周邊(Peripheral)是生成或者保存了數(shù)據(jù)的設(shè)備缀遍,中央(Central)是使用這些數(shù)據(jù)的設(shè)備。你可以認為周邊是一個廣播數(shù)據(jù)的設(shè)備饱须,他廣播到外部世界說他這兒有數(shù)據(jù)域醇,并且也說明了能提供的服務。另一邊蓉媳,中央開始掃描附近有沒有服務譬挚,如果中央發(fā)現(xiàn)了想要的服務,然后中央就會請求連接周邊酪呻,一旦連接建立成功减宣,兩個設(shè)備之間就開始交換傳輸數(shù)據(jù)了。

除了中央和周邊玩荠,我們還要考慮他倆交換的數(shù)據(jù)結(jié)構(gòu)漆腌。這些數(shù)據(jù)在服務中被結(jié)構(gòu)化,每個服務由不同的特征(Characteristics)組成阶冈,特征是包含一個單一邏輯值的屬性類型闷尿。

服務和特性

上文中提到了特征(Characteristics),這里簡單說明下什么是特征眼溶。

特征是與外界交互的最小單位悠砚。藍牙4.0設(shè)備通過服務(Service)、特征(Characteristics)和描述符(Descriptor)來形容自己堂飞,同一臺設(shè)備可能包含一個或多個服務灌旧,每個服務下面又包含若干個特征绑咱,每個特征下面有包含若干個描述符(Descriptor)。比如某臺藍牙4.0設(shè)備枢泰,用特征A來描述設(shè)備信息描融、用特征B和描述符b來收發(fā)數(shù)據(jù)等。而每個服務衡蚂、特征和描述符都是用 UUID 來區(qū)分和標識的窿克。

切割字符串

source ==> 字符串
count ==> 切割的位數(shù)

var func = (source, count) => {
    var arr = [];
    for (var i = 0, len = source.length / count; i < len; i++) {
        var subStr = source.substr(0, count);
        arr.push(subStr);
        source = source.replace(subStr, "");
    }
    return arr;
}
16進制轉(zhuǎn)10進制
function change_ten(sixteen) {
    var ten = '';
    ten = parseInt(sixteen, 16);
    return ten;
    //使用字符串轉(zhuǎn)換為整數(shù)的方法實現(xiàn)進制轉(zhuǎn)換
}
16進制轉(zhuǎn)字符串
function HexToAscll(str) {
    var hexA = '';
    var pos = 0;
    var len = str.length / 2;
    for (var i = 0; i < len; i++) {
        var s = str.substr(pos, 2);
        hexA += String.fromCharCode(`0x${s}`);
        pos += 2;
    }
    return hexA;
}
16進制轉(zhuǎn)bcd (js的移位運算也可以做到,沒有去專門學習毛甲,歡迎留言)
function changeBcd(num) {
    var num_one = [];
    var bcd_value = '';
    var num_one = func(num, 1);
        var corres_arrey = {
        '0': '0000',
        '1': '0001',
        '2': '0010',
        '3': '0011',
        '4': '0100',
        '5': '0101',
        '6': '0110',
        '7': '0111',
        '8': '1000',
        '9': '1001',
        'A': '1010',
        'B': '1011',
        'C': '1100',
        'D': '1101',
        'E': '1110',
        'F': '1111',
        'a': '1010',
        'b': '1011',
        'c': '1100',
        'd': '1101',
        'e': '1110',
        'f': '1111'
    }
    for (var i = 0; i < num_one.length; i++) {
        var bits = corres_arrey[num_one[0]] + corres_arrey[num_one[i]]
    }
    return bits
}
接收藍牙數(shù)據(jù)IOS與Android呈現(xiàn)方式不同年叮,安卓可以直接使用,IOS需進一步處理玻募,去掉頭尾和括號

轉(zhuǎn)換接收的ios數(shù)據(jù)

function byte_ios(value){
  var str1=value.substring(0,value.indexOf("0x"));
  var str2=value.substring(str1.length+2,value.length-1);
  return str2
}
校驗和 藍牙回傳的硬件數(shù)據(jù)去掉前三位 去掉最后一位求和 (根據(jù)硬件的需求來求和只损,不同的硬件開發(fā)規(guī)則不同)
function byte_Sum(arr) {
    var sum = 0;
    arr.splice(0, 3);
    arr.splice(-1, 1);
    arr.splice(-1, 1);
    for (let i = 0; i < arr.length; i++) {
        sum += Number('0x' + arr[i]);
    }
    if(((0xFF - (sum & 0xFF)) + 1).toString(16).length!=2){
      return '0'+(0xFF&((0xFF - (sum & 0xFF)) + 1)).toString(16)
    }else{
      return (0xFF&((0xFF - (sum & 0xFF)) + 1)).toString(16);
    }
}

小結(jié):此次低功耗藍牙ble開發(fā)使用APIcloud混合開發(fā),調(diào)用模塊方法時要按照一定順序

初始化藍牙4.0管理器 => initManager

搜索藍牙4.0設(shè)備七咧,模塊內(nèi)部會不斷的掃描更新附近的藍牙4.0設(shè)備信息 => scan

注: 參數(shù)(params):single 類型:布爾 true 為單例模式,false為非單例模式;默認為false; 描述:(可選項)則掃描附近的所有支持藍牙4.0的設(shè)備類型:parmas:布爾 true 為單例模式,false為非單例模式;默認為false; 非單例模式為僅在本頁面生效連接跃惫,單例模式為在連接成功后整個app全局生效

獲取當前掃描到的所有外圍設(shè)備信息 => getPeripheral

連接指定外圍設(shè)備。iOS端無超時判斷艾栋,android端默認有30秒超時判斷 => connect

根據(jù)指定的外圍設(shè)備 UUID 獲取該外圍設(shè)備的所有服務 => discoverService

根據(jù)指定的外圍設(shè)備 UUID 及其服務 UUID 獲取該外圍設(shè)備的所有特征(Characteristic)=> discoverCharacteristics

根據(jù)指定的外圍設(shè)備 UUID 及其服務 UUID 和特征 UUID 監(jiān)聽數(shù)據(jù)回發(fā) =>setNotify

根據(jù)指定的外圍設(shè)備 UUID 及其服務 UUID 和特征 UUID 寫數(shù)據(jù) => writeValueForCharacteristic

剩余方法根據(jù)需求酌情使用

此次開發(fā)需求 傳遞字節(jié)以及ASCII碼,apicloud中ble模塊僅僅滿足于傳遞字節(jié),并且初始低功耗藍牙僅僅滿足于傳遞20字節(jié)以下數(shù)據(jù),需設(shè)置MTU進行大數(shù)據(jù)傳輸,此次流控為藍牙的特征FF03監(jiān)聽來進行數(shù)據(jù)流控, 藍牙模塊使用百瑞互聯(lián),如需定制開發(fā)模塊或SDK可聯(lián)系爆存!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蝗砾,隨后出現(xiàn)的幾起案子先较,更是在濱河造成了極大的恐慌,老刑警劉巖遥诉,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拇泣,死亡現(xiàn)場離奇詭異噪叙,居然都是意外死亡矮锈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門睁蕾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苞笨,“玉大人,你說我怎么就攤上這事子眶∑倌” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵臭杰,是天一觀的道長粤咪。 經(jīng)常有香客問我,道長渴杆,這世上最難降的妖魔是什么寥枝? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任宪塔,我火速辦了婚禮,結(jié)果婚禮上囊拜,老公的妹妹穿的比我還像新娘某筐。我一直安慰自己,他們只是感情好冠跷,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布南誊。 她就那樣靜靜地躺著,像睡著了一般蜜托。 火紅的嫁衣襯著肌膚如雪抄囚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天橄务,我揣著相機與錄音怠苔,去河邊找鬼。 笑死仪糖,一個胖子當著我的面吹牛柑司,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锅劝,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼攒驰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了故爵?” 一聲冷哼從身側(cè)響起玻粪,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诬垂,沒想到半個月后劲室,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡结窘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年很洋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隧枫。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡喉磁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出官脓,到底是詐尸還是另有隱情协怒,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布卑笨,位于F島的核電站孕暇,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妖滔,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一派草、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铛楣,春花似錦近迁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岸浑,卻和暖如春搏存,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背矢洲。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工璧眠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人读虏。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓责静,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盖桥。 傳聞我的和親對象是個殘疾皇子灾螃,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345