uniapp中微信小程序——蓝牙连接并通信

蓝牙连接并与设备进行通信

已下是我在实现蓝牙功能中使用到的所有Api,当然微信小程序中还有很多我没有用到的Api,如果下面没有满足你需求的Api可以去官方文档查看。

初始化蓝牙模块
openBluetoothAdapter

开始搜寻附近的蓝牙外围设备。
startBluetoothDevicesDiscovery

监听蓝牙适配器状态变化事件
onBluetoothAdapterStateChange

监听搜索到新设备的事件
onBluetoothDeviceFound

移除蓝牙适配器状态变化事件的全部监听函数
offBluetoothAdapterStateChange

监听蓝牙低功耗连接状态改变事件。包括开发者主动连接或断开连接,设备丢失,连接异常断开等等
onBLEConnectionStateChange

停止搜寻附近的蓝牙外围设备。若已经找到需要的蓝牙设备并不需要继续搜索时,建议调用该接口停止蓝牙搜索。
stopBluetoothDevicesDiscovery

获取蓝牙低功耗设备所有服务 (service)。
getBLEDeviceServices

获取蓝牙低功耗设备某个服务中所有特征 (characteristic)。
getBLEDeviceCharacteristics

启用蓝牙低功耗设备特征值变化时的 notify 功能,订阅特征。注意:必须设备的特征支持 notify 或者 indicate 才可以成功调用。
另外,必须先启用 wx.notifyBLECharacteristicValueChange 才能监听到设备 characteristicValueChange 事件

notifyBLECharacteristicValueChange

监听蓝牙低功耗设备的特征值变化事件。必须先调用 wx.notifyBLECharacteristicValueChange 接口才能接收到设备推送的 notification。
onBLECharacteristicValueChange

断开与蓝牙低功耗设备的连接。
closeBLEConnection

大概描述一下以上所有Api的衔接关系:

  1. 调用onBluetoothAdapterStateChange,用来监听蓝牙适配器状态变化,因为要监听用户蓝牙开启还是关闭,如果中途关闭了则需要断开连接,再次打开蓝牙要开始继续搜索蓝牙设备。
  2. 调用openBluetoothAdapter,初始化蓝牙适配器,失败是用户蓝牙没开启。**
  3. 调用startBluetoothDevicesDiscovery,开始搜索附近的蓝牙设备,这里有个需要注意的点,就是allowDuplicatesKey接口参数,默认是为false,如果你是要显示每个蓝牙的信号值,那这里就必须要传true,这样它就会重复一直上报同一设备,才可以实现蓝牙信息强度实时显示。**
  4. 调用onBluetoothDeviceFound,监听搜索到的蓝牙设备,这里可以对监听到的蓝牙进行过滤,这里将拿到每个蓝牙设备的deviceId,后续调用createBLEConnection时需要用到。**
  5. 调用createBLEConnection,传入已经拿到的deviceId。**
  6. 调用offBluetoothAdapterStateChange,因为已经连接成功,这个时候不需要再监听蓝牙适配器状态了。
  7. 调用stopBluetoothDevicesDiscovery,因为已经连接成功,不需要再继续搜索蓝牙设备,并且一直处于搜索比较耗费系统资源。**
  8. 调用onBLEConnectionStateChange,用来监听蓝牙连接是否断开。
  9. 调用getBLEDeviceServices,获取当前蓝牙设备的所有服务,这里需要注意的是每个蓝牙设备的服务不同,需要拿到你需要的服务,这个就需要跟蓝牙模块的技术联系,看他们是哪个服务。**
  10. 调用getBLEDeviceCharacteristics,根据服务拿到它里面的特征,因为我是对蓝牙设备进行通信,需要发送数据所以这里我需要根据这个接口拿到对应写入的服务Id。**
  11. 调用notifyBLECharacteristicValueChange,这个Api用来开启蓝牙特征值变化时的回调,在上一个接口中拿到的服务,当服务属性notify或indicate为true时,我们才需要真正调用这个Api。**
  12. 调用onBLECharacteristicValueChange,我这里是向蓝牙发送数据后再调用,蓝牙设备如果回复了会进行回调,你就可以在里面处理你拿到的数据,这里需要注意的是,它会有很多次回调,但是你要拿到你需要的服务的值,我是根据characteristicId进行判断的。**
  13. 调用offBLECharacteristicValueChange,
  14. 调用closeBLEConnection,与当前蓝牙设备断开连接。**

以上就是我所使用到的所有蓝牙Api,我后面有标识**都是必须要使用的APi,其它的Api就根据每个功能需求进行取舍。

相关推荐
橘子海全栈攻城狮几秒前
【源码+文档+调试讲解】电影交流平台小程序
java·开发语言·servlet·微信小程序·小程序
陶然同学18 分钟前
【小程序】wxss与rpx单位以及全局样式和局部样式
java·微信小程序·小程序
丁总学Java21 分钟前
要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量
数据库·mysql·微信小程序
艾小逗1 小时前
uniapp下载&打开实现方案,支持安卓ios和h5,下载文件到指定目录,安卓文件管理内可查看到
android·ios·uni-app·uniapp文件下载
罗_三金1 小时前
微信小程序打印生产环境日志
javascript·微信小程序·小程序·bug
杨天天.1 小时前
微信小程序原生,tdesign时间选择器,t-date-time-picker封装成组件,开始时间结束时间
微信小程序·小程序·tdesign
hahaqi95272 小时前
uniapp生成h5后发布到服务器碰到的问题解决
运维·服务器·uni-app
dream21st3 小时前
从零开始采用命令行创建uniapp vue3 ts springboot项目
spring boot·后端·uni-app
会功夫的李白6 小时前
UniApp 打开文件工具,获取文件类型,判断文件类型
uni-app·file·util·tool
小跳不会Coding16 小时前
uniapp通过v-if进行判断时,会出现闪屏?【已解决】
uni-app