支付宝小程序蓝牙 快速接入

2018-10-10 15:28 更新

基本流程

对于有蓝牙接入需求的开发者,需要通过以下步骤完成蓝牙接入:

  1. 初始化蓝牙接口(my.openBluetoothAdapter)
  2. 初始化事件监听
    • 蓝牙适配器状态监听(my.onBluetoothAdapterStateChange)
    • 蓝牙发现事件监听(my.onBluetoothDeviceFound)
    • 蓝牙连接状态事件监听(my.onBLEConnectionStateChanged)
  3. 搜索设备(my.startBluetoothDevicesDiscovery)
  4. 查找设备并连接(my.connectBLEDevice)
  5. 停止搜索设备(my.stopBluetoothDevicesDiscovery)
  6. 遍历蓝牙外设服务和特征
    • 获取服务(my.getBLEDeviceServices)
    • 获取特征(my.getBLEDeviceCharacteristics)
  7. 监听特征值变化事件通知(my.onBLECharacteristicValueChange)
  8. 设置读特征通知模式(my.notifyBLECharacteristicValueChange)
  9. 读写数据
    • 向设备的特征值写数据(my.writeBLECharacteristicValue)
    • 向设备的特征值读数据(my.readBLECharacteristicValue)
  10. 断开连接(my.disconnectBLEDevice)
  11. 关闭蓝牙适配器(my.closeBluetoothAdapter)

业务流程图

蓝牙调用流程图

调用示例

//初始化
my.openBluetoothAdapter({
  success: (res) => {
    console.log(res);
  }
});
//注册发现事件
my.onBluetoothDeviceFound({
  success: (res) => {
    let device = res.devices[0];
    //连接发现的设备
    my.connectBLEDevice({
      deviceId: deviceId,
      success: (res) => {
        console.log(res)
      },
      fail:(res) => {
      },
      complete: (res)=>{
      }
    });
    //停止搜索
    my.stopBluetoothDevicesDiscovery({
      success: (res) => {
        console.log(res)
      },
      fail:(res) => {
      },
      complete: (res)=>{
      }
    });
  }
}); 
//注册连接事件
my.onBLEConnectionStateChanged({
  success: (res) => {
    console.log(res);
    if (res.connected) {
        //开始读写notify等操作
        my.notifyBLECharacteristicValueChange({
          deviceId: deviceId,
          serviceId: serviceId,
          characteristicId: characteristicId,
          success: (res) => {
            console.log(res)
          },
          fail:(res) => {
          },
          complete: (res)=>{
          }
        });
    }
  }
});
//注册接收read或notify的数据
my.onBLECharacteristicValueChange({
  success: (res) => {
    console.log(res);
  }
});
//开始搜索
my.startBluetoothDevicesDiscovery({
  services: ['fff0'],
  success: (res) => {
    console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});


//断开连接
my.disconnectBLEDevice({
  deviceId: deviceId,
  success: (res) => {
    console.log(res)
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});


//注销事件
my.offBluetoothDeviceFound();
my.offBLEConnectionStateChanged();
my.offBLECharacteristicValueChange();


//退出蓝牙模块
my.closeBluetoothAdapter({
  success: (res) => {
  },
  fail:(res) => {
  },
  complete: (res)=>{
  }
});

常见问题

  1. 支持版本 android4.3以上支持ble
  2. ios6以上都支持
  3. deviceId,android取到的是蓝牙的mac地址(11:22:33:44:55:66),ios取到的是UUID(00000000-0000-0000-0000-000000000000这种格式)
  4. 调startBluetoothDevicesDiscovery接口搜索不到设备,请确保设备发出了广播。如果接口中有传入services,请确保设备的广播内容中包含了service的UUID
  5. 连接设备失败,请确认传入的deviceId是否正确,以及设备发出的信号是否足够强,在信号弱的时候可能会出现连接不上的情况
  6. 写数据失败,查看传入的deviceId、serviceId、characteristicId格式是否正确,deviceId是否已连接上(onBLEConnectionStateChanged这个事件中可以监听连接状态变化,getConnectedBluetoothDevices这个方法可以拿到),确保是在连接状态下调写入方法,查看characteristicId是否属于这个service,以及这个特征值是否支持写
  7. 读数据失败,同上,查看这个特征值是否支持读
  8. 收不到数据通知,请确认调了notifyBLECharacteristicValueChange这个方法以及传入的参数是否正确,传入的characteristicId特征值是否支持notify或indicate,以及确认硬件是否发出了通知。注意调用notifyBLECharacteristicValueChange方法的以及注册onBluetoothDeviceFound事件的顺序,最好是在连接之后就调用notifyBLECharacteristicValueChange方法。
  9. 事件回调多次调用,是由于多次匿名函数注册监听同一事件,因此建议每次调用on方法监听事件之前,先调用off方法,关闭之前的事件监听。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号