全部产品
云市场

接入蓝牙

更新时间:2019-09-17 14:14:48

基本流程

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

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

业务流程图

调用蓝牙接口业务流程图

调用示例

  1. //初始化
  2. my.openBluetoothAdapter({
  3. success: (res) => {
  4. console.log(res);
  5. }
  6. });
  7. //注册发现事件
  8. my.onBluetoothDeviceFound({
  9. success: (res) => {
  10. let device = res.devices[0];
  11. //连接发现的设备
  12. my.connectBLEDevice({
  13. deviceId: deviceId,
  14. success: (res) => {
  15. console.log(res)
  16. },
  17. fail:(res) => {
  18. },
  19. complete: (res)=>{
  20. }
  21. });
  22. //停止搜索
  23. my.stopBluetoothDevicesDiscovery({
  24. success: (res) => {
  25. console.log(res)
  26. },
  27. fail:(res) => {
  28. },
  29. complete: (res)=>{
  30. }
  31. });
  32. }
  33. });
  34. //注册连接事件
  35. my.onBLEConnectionStateChanged({
  36. success: (res) => {
  37. console.log(res);
  38. if (res.connected) {
  39. //开始读写notify等操作
  40. my.notifyBLECharacteristicValueChange({
  41. deviceId: deviceId,
  42. serviceId: serviceId,
  43. characteristicId: characteristicId,
  44. success: (res) => {
  45. console.log(res)
  46. },
  47. fail:(res) => {
  48. },
  49. complete: (res)=>{
  50. }
  51. });
  52. }
  53. }
  54. });
  55. //注册接收read或notify的数据
  56. my.onBLECharacteristicValueChange({
  57. success: (res) => {
  58. console.log(res);
  59. }
  60. });
  61. //开始搜索
  62. my.startBluetoothDevicesDiscovery({
  63. services: ['fff0'],
  64. success: (res) => {
  65. console.log(res)
  66. },
  67. fail:(res) => {
  68. },
  69. complete: (res)=>{
  70. }
  71. });
  72. //断开连接
  73. my.disconnectBLEDevice({
  74. deviceId: deviceId,
  75. success: (res) => {
  76. console.log(res)
  77. },
  78. fail:(res) => {
  79. },
  80. complete: (res)=>{
  81. }
  82. });
  83. //注销事件
  84. my.offBluetoothDeviceFound();
  85. my.offBLEConnectionStateChanged();
  86. my.offBLECharacteristicValueChange();
  87. //退出蓝牙模块
  88. my.closeBluetoothAdapter({
  89. success: (res) => {
  90. },
  91. fail:(res) => {
  92. },
  93. complete: (res)=>{
  94. }
  95. });

常见问题

  1. 支持 android4.3 及以上版本。
  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 方法,关闭之前的事件监听。