[轉(zhuǎn)]微信小程序--Ble藍(lán)牙

在前面已經(jīng)寫了兩篇關(guān)于Android藍(lán)牙和iOS 藍(lán)牙開發(fā)的文章弯院,今天帶來的是微信小程序藍(lán)牙實(shí)現(xiàn)辱士。
Android藍(lán)牙
ios藍(lán)牙(Swift)

有一段時(shí)間沒有。沒有寫關(guān)于小程序的文章了听绳。3月28日颂碘,微信的api又一次新的更新。期待已久的藍(lán)牙api更新椅挣。就開始擼一番头岔。
源碼地址

1.簡述

藍(lán)牙適配器接口是基礎(chǔ)庫版本 1.1.0 開始支持。
iOS 微信客戶端 6.5.6 版本開始支持鼠证,Android 客戶端暫不支持
藍(lán)牙總共增加了18個(gè)api接口峡竣。

2.Api分類

搜索類
連接類
通信類

3.API的具體使用

詳細(xì)見官網(wǎng):
https://mp.weixin.qq.com/debug/wxadoc/dev/api/bluetooth.html#wxgetconnectedbluethoothdevicesobject

4. 案例實(shí)現(xiàn)

4.1 搜索藍(lán)牙設(shè)備

/**
 * 搜索設(shè)備界面
 */
Page({
  data: {
    logs: [],
    list:[],
  },
   onLoad: function () {
    console.log('onLoad')
var that = this;
// const SDKVersion = wx.getSystemInfoSync().SDKVersion || '1.0.0'
// const [MAJOR, MINOR, PATCH] = SDKVersion.split('.').map(Number)
// console.log(SDKVersion);
// console.log(MAJOR);
// console.log(MINOR);
// console.log(PATCH);

// const canIUse = apiName => {
//   if (apiName === 'showModal.cancel') {
//     return MAJOR >= 1 && MINOR >= 1
//   }
//   return true
// }

// wx.showModal({
//   success: function(res) {
//     if (canIUse('showModal.cancel')) {
//       console.log(res.cancel)
//     }
//   }
// })
      wx.openBluetoothAdapter({
      success: function(res){
        // success
        console.log("-----success----------");
         console.log(res);
       wx.startBluetoothDevicesDiscovery({
  services: [],
  success: function(res){
    // success
     console.log("-----startBluetoothDevicesDiscovery--success----------");
     console.log(res);
  },
  fail: function(res) {
    // fail
     console.log(res);
  },
  complete: function(res) {
    // complete
     console.log(res);
  }
})


      },
      fail: function(res) {
         console.log("-----fail----------");
        // fail
         console.log(res);
      },
      complete: function(res) {
        // complete
         console.log("-----complete----------");
         console.log(res);
      }
    })

     wx.getBluetoothDevices({
       success: function(res){
         // success
         //{devices: Array[11], errMsg: "getBluetoothDevices:ok"}
         console.log("getBluetoothDevices");
         console.log(res);
          that.setData({
          list:res.devices
          });
          console.log(that.data.list);
       },
       fail: function(res) {
         // fail
       },
       complete: function(res) {
         // complete
       }
     })

  },
  onShow:function(){
 

  },
   //點(diǎn)擊事件處理
  bindViewTap: function(e) {
     console.log(e.currentTarget.dataset.title);
     console.log(e.currentTarget.dataset.name);
     console.log(e.currentTarget.dataset.advertisData);
     
    var title =  e.currentTarget.dataset.title;
    var name = e.currentTarget.dataset.name;
     wx.redirectTo({
       url: '../conn/conn?deviceId='+title+'&name='+name,
       success: function(res){
         // success
       },
       fail: function(res) {
         // fail
       },
       complete: function(res) {
         // complete
       }
     })
  },

   

})

4.2連接 獲取數(shù)據(jù)

/**
 * 連接設(shè)備。獲取數(shù)據(jù)
 */
Page({
    data: {
        motto: 'Hello World',
        userInfo: {},
        deviceId: '',
        name: '',
        serviceId: '',
        services: [],
        cd20: '',
        cd01: '',
        cd02: '',
        cd03: '',
        cd04: '',
        characteristics20: null,
        characteristics01: null,
        characteristics02: null,
        characteristics03: null,
        characteristics04: null,
        result: result

    },
    onLoad: function onLoad(opt) {
        var that = this;
        console.log("onLoad");
        console.log('deviceId=' + opt.deviceId);
        console.log('name=' + opt.name);
        that.setData({ deviceId: opt.deviceId });
        /**
         * 監(jiān)聽設(shè)備的連接狀態(tài)
         */
        wx.onBLEConnectionStateChanged(function (res) {
            console.log('device ' + res.deviceId + ' state has changed, connected: ' + res.connected);
        });
        /**
         * 連接設(shè)備
         */
        wx.createBLEConnection({
            deviceId: that.data.deviceId,
            success: function success(res) {
                // success
                console.log(res);
                /**
                 * 連接成功量九,后開始獲取設(shè)備的服務(wù)列表
                 */
                wx.getBLEDeviceServices({
                    // 這里的 deviceId 需要在上面的 getBluetoothDevices中獲取
                    deviceId: that.data.deviceId,
                    success: function success(res) {
                        console.log('device services:', res.services);
                        that.setData({ services: res.services });
                        console.log('device services:', that.data.services[1].uuid);
                        that.setData({ serviceId: that.data.services[1].uuid });
                        console.log('--------------------------------------');
                        console.log('device設(shè)備的id:', that.data.deviceId);
                        console.log('device設(shè)備的服務(wù)id:', that.data.serviceId);
                        /**
                         * 延遲3秒适掰,根據(jù)服務(wù)獲取特征 
                         */
                        setTimeout(function () {
                            wx.getBLEDeviceCharacteristics({
                                // 這里的 deviceId 需要在上面的 getBluetoothDevices
                                deviceId: that.data.deviceId,
                                // 這里的 serviceId 需要在上面的 getBLEDeviceServices 接口中獲取
                                serviceId: that.data.serviceId,
                                success: function success(res) {
                                    console.log('000000000000' + that.data.serviceId);
                                    console.log('device getBLEDeviceCharacteristics:', res.characteristics);
                                    for (var i = 0; i < 5; i++) {
                                        if (res.characteristics[i].uuid.indexOf("ffe1") != -1) {
                                            that.setData({
                                                cd20: res.characteristics[i].uuid,
                                                characteristics20: res.characteristics[i]
                                            });
                                        }
                                        if (res.characteristics[i].uuid.indexOf("ffe2") != -1) {
                                            that.setData({
                                                cd01: res.characteristics[i].uuid,
                                                characteristics01: res.characteristics[i]
                                            });
                                        }
                                        if (res.characteristics[i].uuid.indexOf("fec8") != -1) {
                                            that.setData({
                                                cd02: res.characteristics[i].uuid,
                                                characteristics02: res.characteristics[i]
                                            });
                                        }if (res.characteristics[i].uuid.indexOf("fec7") != -1) {
                                            that.setData({
                                                cd03: res.characteristics[i].uuid,
                                                characteristics03: res.characteristics[i]
                                            });
                                        }
                                        if (res.characteristics[i].uuid.indexOf("fec9") != -1) {
                                            that.setData({
                                                cd04: res.characteristics[i].uuid,
                                                characteristics04: res.characteristics[i]
                                            });
                                        }
                                    }
                                    console.log('cd01= ' + that.data.cd01 + 'cd02= ' + that.data.cd02 + 'cd03= ' + that.data.cd03 + 'cd04= ' + that.data.cd04 + 'cd20= ' + that.data.cd20);
                                    /**
                                     * 回調(diào)獲取 設(shè)備發(fā)過來的數(shù)據(jù)
                                     */
                                    wx.onBLECharacteristicValueChange(function (characteristic) {
                                        console.log('characteristic value comed:', characteristic.value);
                                        //{value: ArrayBuffer, deviceId: "D8:00:D2:4F:24:17", serviceId: "ba11f08c-5f14-0b0d-1080-007cbe238851-0x600000460240", characteristicId: "0000cd04-0000-1000-8000-00805f9b34fb-0x60800069fb80"}
                                        /**
                                         * 監(jiān)聽cd04cd04中的結(jié)果
                                         */
                                        if (characteristic.characteristicId.indexOf("cd01") != -1) {
                                            var _result = characteristic.value;
                                            var hex = that.buf2hex(_result);
                                            console.log(hex);
                                        }
                                        if (characteristic.characteristicId.indexOf("cd04") != -1) {
                                            var _result2 = characteristic.value;
                                            var _hex = that.buf2hex(_result2);
                                            console.log(_hex);
                                            that.setData({ result: _hex });
                                        }
                                    });
                                    /**
                                     * 順序開發(fā)設(shè)備特征notifiy
                                     */
                                    wx.notifyBLECharacteristicValueChanged({
                                        deviceId: that.data.deviceId,
                                        serviceId: that.data.serviceId,
                                        characteristicId: that.data.cd01,
                                        state: true,
                                        success: function success(res) {
                                            // success
                                            console.log('notifyBLECharacteristicValueChanged success', res);
                                        },
                                        fail: function fail(res) {
                                            // fail
                                        },
                                        complete: function complete(res) {
                                            // complete
                                        }
                                    });
                                    wx.notifyBLECharacteristicValueChanged({
                                        deviceId: that.data.deviceId,
                                        serviceId: that.data.serviceId,
                                        characteristicId: that.data.cd02,
                                        state: true,
                                        success: function success(res) {
                                            // success
                                            console.log('notifyBLECharacteristicValueChanged success', res);
                                        },
                                        fail: function fail(res) {
                                            // fail
                                        },
                                        complete: function complete(res) {
                                            // complete
                                        }
                                    });
                                    wx.notifyBLECharacteristicValueChanged({
                                        deviceId: that.data.deviceId,
                                        serviceId: that.data.serviceId,
                                        characteristicId: that.data.cd03,
                                        state: true,
                                        success: function success(res) {
                                            // success
                                            console.log('notifyBLECharacteristicValueChanged success', res);
                                        },
                                        fail: function fail(res) {
                                            // fail
                                        },
                                        complete: function complete(res) {
                                            // complete
                                        }
                                    });

                                    wx.notifyBLECharacteristicValueChanged({
                                        // 啟用 notify 功能
                                        // 這里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中獲取
                                        deviceId: that.data.deviceId,
                                        serviceId: that.data.serviceId,
                                        characteristicId: that.data.cd04,
                                        state: true,
                                        success: function success(res) {
                                            console.log('notifyBLECharacteristicValueChanged success', res);
                                        }
                                    });
                                }, fail: function fail(res) {
                                    console.log(res);
                                }
                            });
                        }, 1500);
                    }
                });
            },
            fail: function fail(res) {
                // fail
            },
            complete: function complete(res) {
                // complete
            }
        });
    },

    /**
     * 發(fā)送 數(shù)據(jù)到設(shè)備中
     */
    bindViewTap: function bindViewTap() {
        var that = this;
        //var hex = 'AA5504B10000B5'
        // var hex = '7e7e12000e02000000010000000501090000009922aa'//close power off
        var hex = '7e7e12000e0200000001000000050009000000591faa'; //open power off
        var typedArray = new Uint8Array(hex.match(/[\da-f]{2}/gi).map(function (h) {
            return parseInt(h, 16);
        }));
        console.log(typedArray);
        console.log([0xAA, 0x55, 0x04, 0xB1, 0x00, 0x00, 0xB5]);
        var buffer1 = typedArray.buffer;
        console.log(buffer1);
        wx.writeBLECharacteristicValue({
            deviceId: that.data.deviceId,
            serviceId: that.data.serviceId,
            characteristicId: that.data.cd20,
            value: buffer1,
            success: function success(res) {
                // success
                console.log("success  指令發(fā)送成功");
                console.log(res);
            },
            fail: function fail(res) {
                // fail
                console.log(res);
            },
            complete: function complete(res) {
                // complete
            }
        });
    },
    buf2hex: function buf2hex(buffer) {
        // buffer is an ArrayBuffer
        return Array.prototype.map.call(new Uint8Array(buffer), function (x) {
            return ('00' + x.toString(16)).slice(-2);
        }).join('');
    }
});

5.效果展示

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荠列,隨后出現(xiàn)的幾起案子类浪,更是在濱河造成了極大的恐慌,老刑警劉巖肌似,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件费就,死亡現(xiàn)場離奇詭異,居然都是意外死亡川队,警方通過查閱死者的電腦和手機(jī)力细,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來固额,“玉大人眠蚂,你說我怎么就攤上這事《匝” “怎么了河狐?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵米绕,是天一觀的道長瑟捣。 經(jīng)常有香客問我馋艺,道長,這世上最難降的妖魔是什么迈套? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任捐祠,我火速辦了婚禮,結(jié)果婚禮上桑李,老公的妹妹穿的比我還像新娘踱蛀。我一直安慰自己,他們只是感情好贵白,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布率拒。 她就那樣靜靜地躺著,像睡著了一般禁荒。 火紅的嫁衣襯著肌膚如雪猬膨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天呛伴,我揣著相機(jī)與錄音勃痴,去河邊找鬼。 笑死热康,一個(gè)胖子當(dāng)著我的面吹牛沛申,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播姐军,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼铁材,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了奕锌?” 一聲冷哼從身側(cè)響起衫贬,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歇攻,沒想到半個(gè)月后固惯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缴守,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年葬毫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屡穗。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贴捡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出村砂,到底是詐尸還是另有隱情烂斋,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站汛骂,受9級特大地震影響罕模,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帘瞭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一淑掌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蝶念,春花似錦抛腕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至廷蓉,卻和暖如春柄错,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苦酱。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工售貌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫萤。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓颂跨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扯饶。 傳聞我的和親對象是個(gè)殘疾皇子恒削,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容