위챗 애플릿 블루투스 연결 읽기와 쓰기 데이터 실전

53705 단어 위챗 애플릿

위챗 애플릿 블루투스 연결 기록


1. 블루투스 초기화
    searchDevice: function() {
     var that = this
    // 
    wx.openBluetoothAdapter({
      success: function(res) {
        that.getBluetoothState();// 
      },
      fail: function(res) {
        if (res.errCode != 0) {
        // 
          initTypes(res.errCode, res.errMsg)
        }
      }
    })
  },

2. 기본 Bluetooth 어댑터 상태 가져오기
getBluetoothState: function() {
    var that = this
    wx.getBluetoothAdapterState({
      success: function(res) {
        console.log(" ")
        that.findBleDevices();
      },
      fail: function(e) {
        console.log(" ")
        console.log(e.errMsg)
        if (e.errCode != 0) {
          initTypes(e.errCode);
        }
      }
    })
  },

3. 블루투스 검색
findBleDevices: function() {
    // 
    wx.showLoading({
      title: ' '
    });
    var that = this
    wx.startBluetoothDevicesDiscovery({
      success: function(res) {
        that.onBluetoothDeviceFound()
      },
      fail: function(res) {
        console.log(res.errMsg)
        if (res.errCode != 0) {
          initTypes(res.errCode)
        }
      }
    })
  },

4. 주변 장치 발견
  onBluetoothDeviceFound: function() {
    var that = this
    wx.onBluetoothDeviceFound(function(res) {
      console.log(' ');
      that.getBluetoothDevices()
    })
  },

5. Bluetooth 모듈이 작동하는 동안 발견된 모든 Bluetooth 장치를 가져옵니다.이 컴퓨터와 이미 연결된 장치를 포함합니다.
getBluetoothDevices: function() {
    var that = this
    wx.getBluetoothDevices({
      success: function(res) {
        console.log(' :' + res.errMsg);
        console.log(res.devices);
        that.clearOtherDevices(res);
      },
      fail: function(res) {
        console.log(' , :' + res.errMsg);
        if (res.errCode != 0) {
          initTypes(res.errCode);
        }
      }
    })
  },

6. 블루투스 연결 제가 연결하기 전에 블루투스 장치의 이름을 선별하는 작업을 하고 모듈을 훑어보고 모듈을 클릭하여 이 방법에 들어갑니다.
createBLEConnection: function(e) {
    // 
    let deviceId = e.currentTarget.id;
    app.globalData.deviceId = deviceId;//app.js     const app = getApp()
    var bluename = e.target.dataset.bluename;
    app.globalData.bleName = bluename;
    var that = this;
    wx.showToast({
      title: ' ...',
      icon: 'loading',
      duration: 99999
    });
    // 
    wx.createBLEConnection({
      deviceId: deviceId,
      success: function(res) {
        console.log(' :' + res.errMsg);
        // 
        that.stopBluetoothDevicesDiscovery();
        wx.hideToast();
        wx.showToast({
          title: ' ',
          icon: 'success',
          duration: 2000
        });
        that.getBLEDeviceServices();    // 
      },
      fail: function(res) {
        console.log(' , :' + e.errMsg);
        if (res.errCode != 0) {
          initTypes(res.errCode);
        }
        wx.hideLoading()
      }
    })
  },

7. 검색 중지
  stopBluetoothDevicesDiscovery: function() {
    wx.stopBluetoothDevicesDiscovery({
      success: function(res) {
        console.log(' :' + res.errMsg);
      },
      fail: function(res) {
        console.log(' , :' + res.errMsg);
        if (res.errCode != 0) {
          initTypes(res.errCode);
        }
      }
    })
  },

8. 서비스 받기
getBLEDeviceServices: function() {
    let services = [];
    let serviceId = null;
    var that = this;
    wx.getBLEDeviceServices({
      deviceId: app.globalData.deviceId,
      success: function(res) {
        console.log(' :' + res.errMsg);
        console.log(res.services)
        services = res.services;
        if (services.length <= 0) {
          toast(' , !');
          return
        }
        // serviceId
        for (var x in services) { //x = index
          if (services[x].uuid.indexOf("6E400001") >= 0) {
            // UUID  
            app.globalData.serviceId = services[x].uuid;
            that.getBLEDeviceCharacteristics();
            break;
          }
        }
      },
      fail: function(res) {
        console.log(' , :' + res.errMsg);
        if (res.errCode != 0) {
          initTypes(res.errCode);
        }
      }
    })
  },

9. 특정 서비스에서 모든 특징 값 가져오기
getBLEDeviceCharacteristics: function() {
    var charactArray = [];
    var that = this;
    wx.getBLEDeviceCharacteristics({
      deviceId: app.globalData.deviceId,
      serviceId: app.globalData.serviceId,  // UUID
      success: function(res) {
        console.log(' :' + res.errMsg);
        console.log(res);
        charactArray = res.characteristics;
        if (charactArray.length <= 0) {
          toast(' , !');
          return;
        }
        //charactArray     res.characteristics      
        for (var x in charactArray) {
          //    
          if (charactArray[x].properties.write) {
            app.globalData.characteristicWriteId = charactArray[x].uuid
          }
          // 
          if (charactArray[x].properties.notify) {
            app.globalData.characteristicNotifyId = charactArray[x].uuid
          }
        }
        //      
        that.setData({
          blueornot: true,
          list: null,
          bluename: app.globalData.bleName
        })
        // 
        that.notifyBLECharacteristicValueChange();
      },
      fail: function(res) {
        console.log(' , :' + res.errCode);
        if (res.errCode != 0) {
          initTypes(res.errCode);
        }
      }
    })
  },

10. 데이터 읽기 구독 작업이 성공하면 장치가 특징값의value를 주동적으로 업데이트해야 wx를 터치할 수 있습니다.onBLECHaracteristicValueChange 콜백
  notifyBLECharacteristicValueChange: function() { 
    var that = this
    wx.notifyBLECharacteristicValueChange({
      deviceId: app.globalData.deviceId,
      serviceId: app.globalData.serviceId,
      characteristicId: app.globalData.characteristicNotifyId, 
      // characteristicId 9 uuid
      state: true,
      success: function(res) {
        console.log('notifyBLECharacteristicValueChange success:' + res.errMsg);
        console.log(JSON.stringify(res));
        that.onBLECharacteristicValueChange();
      },
    })
  },

11. 블루투스 특징값 변화 감청 저소모 블루투스 장치의 특징값 변화 사건.장치가 푸시하는 notification을 수신하려면 notifyBLECharacteristicValueChange 인터페이스를 먼저 사용해야 합니다.
  onBLECharacteristicValueChange: function() {
    var that = this;
    wx.onBLECharacteristicValueChange(function(res) {
      console.log(' ');
      console.log(ab2hex(res.value));
      that.onBleDataAnalysic(ab2hex(res.value));
    })
  },

12. 블루투스 쓰기 데이터가 블루투스 명령에 전달됨
  writeBLECharacteristicValue: function(buffer) {
    wx.writeBLECharacteristicValue({
      deviceId: app.globalData.deviceId,
      serviceId: app.globalData.serviceId,
      characteristicId: app.globalData.characteristicWriteId,
      //characteristicId:9 UUID
      value: buffer,
      //value :   
      success: function(res) {
        console.log(" ")
      },
      fail: function(res) {
        console.log(" " + res.errMsg)
      }
    })
  },

13. 데이터 처리 방법 (1) 16진수 10진수 변환 가능
function hex2dex(str) {
  return parseInt(str, 16).toString(10)
}

(2) 16진수 ASCII 코드 전환
function 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(" !");
    return "";
  }
  var curCharCode;
  var resultStr = [];
  for (var i = 0; i < len; i = i + 2) {
    curCharCode = parseInt(rawStr.substr(i, 2), 16);
    resultStr.push(String.fromCharCode(curCharCode));
  }
  return resultStr.join("");
}

(3) ArrayBuffer 16 진행 문자열 예제
function ab2hex(buffer) {
  const hexArr = Array.prototype.map.call(
    new Uint8Array(buffer),
    function(bit) {
      return ('00' + bit.toString(16)).slice(-2)
    }
  )
  return hexArr.join('')
}

(4) 문자열이 ArrayBuffer 객체 매개변수로 문자열로 변환
function str2ab(str) {
  var buf = new ArrayBuffer(str.length / 2);
  var bufView = new Uint8Array(buf);
  for (var i = 0, strLen = str.length; i < strLen; i++) {
    bufView[i] = parseInt(str.slice(i * 2, i * 2 + 2),16);
  }
  return buf;
}

(5)버퍼(이것은 내가 블루투스에 마지막으로 전달한 값, 즉 데이터 쓰는 방법의value)
function systemCommand(){
  let buffer = new ArrayBuffer(5);
  //5   
  let dataView = new DataView(buffer);
  dataView.setUint8(0, 0x05);
  //      0x05
  dataView.setUint8(1, 0x02);
  //      0x02     new ArrayBuffer(5);    dataView.setUint8( , )
  return buffer;
}

좋은 웹페이지 즐겨찾기