歡迎光臨~深圳市山星盛電子科技有限公司-稱重產(chǎn)品官方展示網(wǎng)站
    服務(wù)熱線 全國服務(wù)熱線:

    0755-2979 1990

    weixin小程序藍牙電子秤 微信無線落地秤【立桿秤】地面秤

    在WeChat微信小程序中連接藍牙電子計重秤(電子秤品牌:山星盛MOUNT STAR),直接通過藍牙獲取當(dāng)前稱重的重量數(shù)據(jù),然后顯示在weixin界面上

    。山星盛電子科技是一家衡器硬件設(shè)備提供商,我們專業(yè)提供ERP管理系統(tǒng)PC,APP,APK,POS,PDA,安卓The android和蘋果apple手機IOS及android操作系統(tǒng)
    ,電腦端微軟Microsoft安裝版及文本直接傳送的電子秤
    ,平臺秤
    ,物聯(lián)網(wǎng)電子稱
    ,藍牙無線電子秤
    ,WIFI電子秤,手機軟件直連手機等稱重設(shè)備
    ,買我們電子秤能提供騰訊微信小程序demo程序開發(fā)包
    ,還能提供安卓和蘋果手機APP軟件電子秤連接的demo指導(dǎo)文件及開發(fā)包供您開發(fā)自己的軟件。

    山星盛電子科技是一家衡器硬件設(shè)備提供商

    ,我們專業(yè)提供ERP管理系統(tǒng)PC,APP,APK,POS,PDA,安卓The android和蘋果apple手機IOS及android操作系統(tǒng),電腦端微軟Microsoft安裝版及文本直接傳送的電子秤
    ,平臺秤
    ,物聯(lián)網(wǎng)電子稱,藍牙無線電子秤
    ,WIFI電子秤
    ,手機軟件直連手機等稱重設(shè)備,買我們電子秤能提供騰訊微信小程序demo程序開發(fā)包
    ,還能提供安卓和蘋果手機APP軟件電子秤連接的demo指導(dǎo)文件及開發(fā)包供您開發(fā)自己的軟件

    騰訊微信小程序<a href=/2.html target='_blank'>電子稱</a>


    騰訊微信小程序電子稱

    前情:在微信小程序中連接藍牙電子計重桌秤,(電子秤品牌:山星盛MOUNT STAR)

    ,直接通過藍牙獲取當(dāng)前稱重的重量數(shù)據(jù)
    ,然后顯示在界面上。
    ps:記錄的時候
    ,還在開發(fā)階段
    ,得到了數(shù)據(jù),數(shù)據(jù)有會實時變化

    android軟件電子秤

    ??注意

    • 此次

      ,只涉及讀取數(shù)據(jù),沒有寫入數(shù)據(jù)
      ,具體 API 查看小程序官方文檔

    • 確保手機藍牙已經(jīng)打開

      ,并且可以搜索到該電子秤的藍牙設(shè)備,android 可以搜到
      ,ios 搜不到

    • 微信小程序中搜索到的藍牙設(shè)備很多

      ,deviceId 在 android 上顯示為藍牙設(shè)備主服務(wù)的 mac 地址,在 ios 上顯示為藍牙設(shè)備主服務(wù)的 uuid

    • 最終得到的結(jié)果是 ArrayBuffer 型數(shù)據(jù)

      ,需要先轉(zhuǎn)為16進制字符串
      ,再轉(zhuǎn)為10進制數(shù)據(jù)

    (1)初始化

    初始化藍牙模塊 --- wx.openBluetoothAdapter

    // 定義數(shù)據(jù)data: {
        devices: [],    // 搜索到的藍牙設(shè)備 deviceId 數(shù)組
        deviceId: '',    // 目標(biāo)藍牙設(shè)備 deviceId
        services: []    //  設(shè)備服務(wù)列表 serviceId 數(shù)組
        serviceId: '',
        characteristics: []   // 特征值列表
        characteristicId: ''  // 選擇某一個特征值 
        value: ''   // 16 進制數(shù)據(jù)值}// 藍牙 API 調(diào)用步驟openBluetoothAdapter() {
        wx.openBluetoothAdapter({   // (1)
            success: res => {            console.log('openBluetoothAdapter初始化藍牙模塊成功:', res)             this.startBluetoothDevicesDiscovery()  // (2) 開始搜索
            },
            fail: err => {            console.log('openBluetoothAdapter初始化藍牙模塊失敗:', err)            if (err.errCode === 10001) {  // 當(dāng)前藍牙適配器不可用
                    wx.onBluetoothAdapterStateChange( res => {                if (res.available) {                    this.startBluetoothDevicesDiscovery()
                    }
                  })
               }
            }
        })
    }


    (2)搜索藍牙設(shè)備

    搜尋附近的藍牙外圍設(shè)備 --- wx.startBluetoothDevicesDiscovery

    • 入?yún)?services 作用要搜索的藍牙設(shè)備主 service 的 uuid 列表

      ,某些藍牙設(shè)備會廣播自己的主 service 的 uuid
      ,如果設(shè)置此參數(shù)
      ,則只搜索廣播包括對應(yīng) uuid 的主服務(wù)的藍牙設(shè)備,可以通過該參數(shù)過濾掉周邊不需要處理的其他藍牙設(shè)備

    • 入?yún)?allowDuplicatesKey 作用是否允許重復(fù)上報同一設(shè)備

      ,如果允許重復(fù)上報
      ,則 wx.onBlueToothDeviceFound 方法會多次上報同一設(shè)備,但是 RSSI 值會有不同
      ,默認(rèn)為 false
      eg: services: ['FEE7'] 主服務(wù)的 UUID 是 FEE7
      ,傳入這個參數(shù),只搜索主服務(wù) UUID 為 FEE7 的設(shè)備
      ,該設(shè)備是微信硬件平臺的藍牙智能燈

    ?? 此操作比較耗費系統(tǒng)資源

    ,需要在搜索并連接到設(shè)備后調(diào)用 wx.stopBluetoothDevicesDiscovery 方法停止搜索

    startBluetoothDevicesDiscovery() {
        wx.startBluetoothDevicesDiscovery({
            success: res => {            console.log('startBluetoothDevicesDiscovery開始搜索外圍設(shè)備成功:', res)            this.getBluetoothDevices()  // (3) 獲取藍牙列表
             },
            fail: err => {            console.log('startBluetoothDevicesDiscovery搜索外圍設(shè)備失敗:', err)
            }
        })
    }


    (3)獲取藍牙設(shè)備

    獲取在藍牙模塊生效期間所有已發(fā)現(xiàn)的藍牙設(shè)備
    ,包括已經(jīng)連接成功的藍牙設(shè)備 --- wx.getBluetoothDevices

    getBluetoothDevices() {
        wx.getBluetoothDevices({
            success: res => {            console.log('getBluetoothDevices獲取藍牙設(shè)備成功:', res)            this.setData({
                    devices: res. devices  || []        // uuid 對應(yīng)的的已連接設(shè)備列表
                })            this.createBLEConnection();     // (4) 與目標(biāo)設(shè)備建立連接
            },
            fail: err => {            console.log('getBluetoothDevices獲取藍牙設(shè)備失?div   id="jpandex"   class="focus-wrap mb20 cf">。?#39;, err)
            }
        })
    }


    (4)建立連接

    與目標(biāo)藍牙設(shè)備建立連接,需要是低功耗藍牙設(shè)備 --- wx.createBLEConnection

    ?? 如果微信小程序此前搜索過某個藍牙設(shè)備

    ,并成功建立連接
    ,可直接傳入之前搜索獲取的 deviceId 直接嘗試連接該設(shè)備,不用重新搜索

    createBLEConnection() {    // 如果是第一次建立連接
    ,可以通過名稱匹配
    ,獲取相應(yīng)設(shè)備的 deviceId     let devices = this.data.devices;     devices.forEach(item => {        if(item.name == 'kunHong') {            this.setData({                 deviceId: item.deviceId             })         }     })    // 建立連接     wx.createBLEConnection({         deviceId: this.data.deviceId,         success: res => {            console.log('createBLEConnection與目標(biāo)藍牙連接成功:', res)            this.getBLEDeviceServices()    // (5)獲取服務(wù)         },         fail: err => {            console.log('createBLEConnection與目標(biāo)藍牙連接失敗:', err)         }     }) }


    (5)獲取藍牙設(shè)備服務(wù)

    獲取藍牙設(shè)備所有主服務(wù)的 uuid --- wx.getBLEDeviceServices

    • 入?yún)?deviceId 為 wx.getBluetoothDevices 中獲取的目標(biāo)藍牙設(shè)備的 deviceId

    ??開發(fā)過程中

    ,主服務(wù) serviceId 和 主服務(wù)的特征值 characteristics 都是選取的實際操作過程中
    ,得到的類似于該目標(biāo)藍牙設(shè)備的 id,但是小程序官方文檔的 demo
    ,遍歷了所有的列表(serviceId 和 characteristics)
    ,需要區(qū)分一下

    getBLEDeviceServices() {
        wx.getBLEDeviceServices({
            deviceId: this.data.deviceId,
            success: res => {            console.log('getBLEDeviceServices獲取藍牙設(shè)備服務(wù)', res)            // getBluetoothDevices 獲取的有 deviceId 和 advertisServiceUUIDs,可以在這里獲取的服務(wù)列表中選擇一個一樣的作為后續(xù) API 請求的服務(wù)id
    ,這個 id 需要滿足是否可讀             this.setData({                  services: res.services,                  serviceId: res.services[0].uuid    // 假設(shè)是第一個             })            this.getBLEDeviceCharacteristics()    // (6) 獲取特征值             // 官方 demo             for(var i = 0; i < res.services.length; i++) {                // 該服務(wù)是否為主服務(wù)                 if(res.services[i].isPrimary) {                    this.getBLEDeviceCharacteristics(res.services[i].uuid)                 }             }         },         fail: err => {            console.log('getBLEDeviceServices獲取藍牙設(shè)備服務(wù)失?div id="m50uktp" class="box-center"> 。?#39;, err)         }     }) }

    (6)獲取特征值

    獲取藍牙設(shè)備某個服務(wù)中所有特征值 --- wx.getBLEDeviceCharacteristics

    • 入?yún)?deviceId 為 wx.getBluetoothDevices 中獲取的目標(biāo)藍牙設(shè)備的 deviceId

    • 入?yún)?serviceId 為藍牙服務(wù) uuid ,通過 wx.getBLEDeviceServices 獲取

    getBLEDeviceCharacteristics(serviceId) {
        wx.getBLEDeviceCharacteristics({
            deviceId: this.data.deviceId,
            serviceId: this.data.serviceId,
            success: res => {
                console.log('getBLEDeviceCharacteristics獲取藍牙服務(wù)特征值成功:', res)            this.setData({
                    characteristics: res. characteristics,
                    characteristics: res. characteristics[0].uuid
                })            this.notifyBLECharacteristicValueChange();     //  (7)啟用 notify 功能
                
                // 官方 demo
                for(var i = 0; i < res.characteristics.length; i++) {                // 是否可讀
                    if(res.characteristics[i].read) {                    // 讀取數(shù)據(jù)
                        wx.readBLECharacteristicValue({
                            deviceId: this.data.deviceId,
                            serviceId: serviceid,
                            characteristicId: res.characteristicId[i].uuid
                        })
                    },                if(res.characteristics[i].properties.notify || res.characteristics[i].properties.indicate) {                    // 啟用功能
                        wx.notifyBLECharacteristicValueChange({
                            deviceId,
                            serviceId,
                            characteristicId: item.uuid,
                            state: true,
                        })
                    }
                }
            },
            fail: err => {
                console.log('getBLEDeviceCharacteristics獲取藍牙服務(wù)特征值失?div   id="m50uktp"   class="box-center">  。?#39;, err)
            }
        })    this.onBLECharacteristicValueChange()   // (8)監(jiān)聽特征值變化
        this.readBLECharacteristicValue();      // (9)讀取數(shù)據(jù)}


    (7)啟用 notify 功能

    啟用低功耗藍牙特征值變化時的 notify 功能
    ,訂閱特征值

    ??必須設(shè)備的特征值支持 notify 或者 indicate 才可以成功啟用

    notifyBLECharacteristicValueChange() {
        wx.notifyBLECharacteristicValueChange({
            deviceId: this.data.deviceId,
            serviceId: this.data.serviceId,
            characteristicId: this.data. characteristicId,
            state: true   // 是否啟用 notify (四個字段全部必填)
        })
    }


    (8)監(jiān)聽特征值變化

    監(jiān)聽低功耗藍牙設(shè)備特征值的變化事件 --- wx.onBLECharacteristicValueChange

    ??必須先啟用 notifyBLECharacteristicValueChange 接口才能接收到設(shè)備推送的 notification(通知)

    // 先監(jiān)聽一下,保證第一時間獲取數(shù)據(jù)onBLECharacteristicValueChange() {    wx.onBLECharacteristicValueChange( characteristic => {        console.log('onBLECharacteristicValueChange從目標(biāo)藍牙設(shè)備監(jiān)聽到的數(shù)據(jù)值:', characteristic)        this.setData({            value: this.ab2hex(abcharacteristic.value)   // (10) 轉(zhuǎn)為 16 進制
            })
        })
    }


    (9)讀取數(shù)據(jù)

    讀取低功耗藍牙設(shè)備的特征值的二進制數(shù)據(jù)值 --- wx.readBLECharacteristicValue

    ??必須目標(biāo)藍牙設(shè)備的特征值支持 read 才可以成功調(diào)用

    ,并且單獨使用 readBLECharacteristicValue 并不能獲取到真正的特征值
    ,只能返回獲取特征值的狀態(tài),即是否成功獲取到值
    ,真正的值需要使用 wx.onBLECharacteristicValueChange() 執(zhí)行回調(diào)才可以在 wx.onBLECharacteristicValueChange() 這個 API 中獲得讀取到的特征值

    readBLECharacteristicValue() {
        wx.readBLECharacteristicValue({
            deviceId: this.data.deviceId,
            serviceId: this.data.serviceId,
            characteristicId: this.data.charecteristicId,
            success: res => {
                console.log('readBLECharacteristicValue讀取特征值成功:', res)
            },
            fail: err => {
                console.log('readBLECharacteristicValue讀取特征值失?div   id="m50uktp"   class="box-center">  。?#39;, err)
            }
        })
    }


    (10)轉(zhuǎn)為 16 進制

    官方文檔中介紹了 ArrayBuffer 轉(zhuǎn)為 16 進制的方法

    <br>###(10)轉(zhuǎn)為 16 進制####官方文檔中介紹了 ArrayBuffer 轉(zhuǎn)為 16 進制的方法
    // ArrayBuffer轉(zhuǎn)16進制字符串示例
    ab2hex(buffer) {
    let hexArr = Array.prototype.map.call(
    new Uint8Array(buffer),
    function(bit) {
    return ('00' + bit.toString(16)).slice(-2)
    }
    )
    return hexArr.join('');
    }
    <br>###(11)值轉(zhuǎn)換####官方文檔介紹的方法似乎有點不適用哎,試下這個
    ab2Str(arrayBuffer){
    let unit8Arr = new Uint8Array(arrayBuffer);
    let encodedString = String.fromCharCode.apply(null, unit8Arr);
    return encodedString;
    }

    ACSII碼16進制轉(zhuǎn)換代碼

    如以上轉(zhuǎn)換都不能成功

    ,請試用以下轉(zhuǎn)換代碼

    ab2Weight(abValue) {

          let characteristicValue = this.ab2hex(abValue);

          let strValue = this.hexCharCodeToStr(characteristicValue)

          return strValue

          // let weightValue = 

        },

        ab2hex(buffer) {

          let hexArr = Array.prototype.map.call(

            new Uint8Array(buffer),

            function (bit) {

              return ('00' + bit.toString(16)).slice(-2)

            }

          )

          return hexArr.join('');

        },

        hexCharCodeToStr(hexCharCodeStr) {

          var trimedStr = hexCharCodeStr.trim();

          var rawStr =

            trimedStr.substr(0, 2).toLowerCase() === "0x" ?

            trimedStr.substr(2) :

            trimedStr;

          var len = rawStr.length;

          if (len % 2 !== 0) {

            alert("Illegal Format ASCII Code!");

            return "";

          }

          var curCharCode;

          var resultStr = [];

          for (var i = 0; i < len; i = i + 2) {

            curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value

            resultStr.push(String.fromCharCode(curCharCode));

          }

          return resultStr.join("");

        }

    1594356917780425.jpg1594356845299360.jpg

    來源:http://www.dxalxbgw.cn/new/WeChat-scale.html

    我們專業(yè)提供電子秤硬件稱重設(shè)備:服務(wù)電話:0755-23035550  直線:18923420600/15307550221


    在線詢價