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就根据每个功能需求进行取舍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/784831.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm如何安装requirements.txt中的依赖包

问题:下载别人的源码,如何安装代码中requirement.txt中的依赖包。 解决方案: (1)打开PyCharm下面的Terminal,先为代码创建单独的虚拟环境并进入到虚拟环境中(每个项目单独的环境,这…

HINet: Half Instance Normalization Network for Image Restoration

论文:HINet: Half Instance Normalization Network for Image Restoration Abstract: 在本文中,我们探讨了实例归一化在低级视觉任务中的作用。 具体来说,我们提出了一个新颖的块:半实例归一化块(HIN 块&…

Oracle 19c 统一审计表清理

zabbix 收到SYSAUX表空间告警超过90%告警,最后面给出的清理方法只适合ORACLE 统一审计表的清理,传统审计表的清理SYS.AUD$不适合,请注意。 SQL> Col tablespace_name for a30 Col used_pct for a10 Set line 120 pages 120 select total.…

Linux系统下的用户管理模式

Linux系统下的用户管理模式 本文以属于Linux系统基本概念,如果以查找教程教程,解决问题为主,只需要查看本文后半部分。 如需要系统性学习请查看本文前半部分。 文章目录 Linux系统下的用户管理模式1. Linux下用户的概念2. 创建不同类型的用户…

C++继承(一文说懂)

目录 一: 🔥继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 二:🔥基类和派生类对象赋值转换三:🔥继承中的作用域四:&a…

SpringSecurity中文文档(Servlet Authorization Architecture )

Authorization 在确定了用户将如何进行身份验证之后,还需要配置应用程序的授权规则。 Spring Security 中的高级授权功能是其受欢迎的最有说服力的原因之一。无论您选择如何进行身份验证(无论是使用 Spring Security 提供的机制和提供者,还是与容器或其…

基于单片机的空调控制器的设计

摘 要 : 以单片机为核心的空调控制器因其体积小 、 成本低 、 功能强 、 简便易行而得到广泛应用 。 本设计通过 AT89S52 控制DS18&a…

基于YOLOv9的脑肿瘤区域检测

数据集 脑肿瘤区域检测,我们直接采用kaggle公开数据集,Br35H 数据中已对医学图像中脑肿瘤位置进行标注 数据集我已经按照YOLO格式配置好,数据内容如下 数据集中共包含700张图像,其中训练集500张,验证集200张 模型训…

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法-模拟串口传感器和主机

全网最适合入门的面向对象编程教程:11 类和对象的 Python 实现-子类调用父类方法-模拟串口传感器和主机 摘要: 本节课,我们主要讲解了在 Python 类的继承中子类如何进行初始化、调用父类的属性和方法,同时讲解了模拟串口传感器和…

【问题记录】Nodeclub运行make install报错npm ERR! code ELIFECYCLE

问题展示 按照官网给出的教程进行到make install这一步卡住了,显示了如下报错。 解决方法 将node.js版本变更为能够识别代码的版本,我将版本修改成了16.14.0以后成功运行。 nvm install 16.14.0

Java设计模式---(创建型模式)工厂、单例、建造者、原型

目录 前言一、工厂模式(Factory)1.1 工厂方法模式(Factory Method)1.1.1 普通工厂方法模式1.1.2 多个工厂方法模式1.1.3 静态工厂方法模式 1.2 抽象工厂模式(Abstract Factory) 二、单例模式(Si…

从零开始做题:好怪哦

题目 给出一个压缩文件 解题 方法1 01Edit打开,发现是个反着的压缩包(末尾倒着的PK头) import os# 目标目录路径 # target_directory /home/ai001/alpaca-lora# 切换到目标目录 # os.chdir(target_directory)# 打印当前工作目录以确认…

前端开发过程中经常遇到的问题以及对应解决方法 (持续更新)

我的朋友已经工作了 3 年,他过去一直担任前端工程师。 不幸的是,他被老板批评了,因为他在工作中犯了一个错误,这是一个非常简单但容易忽视的问题,我想也是很多朋友容易忽视的一个问题。 今天我把它分享出来&#xff…

前端面试题27(在实际项目中,如何有效地利用Vue3的响应式系统提高性能?)

在实际项目中,有效利用Vue3的响应式系统提高性能主要涉及以下几个关键点: 1. 合理使用reactive和ref reactive:用于将复杂的数据结构(如对象或数组)转换成响应式版本。确保只将需要实时更新的数据结构声明为响应式&am…

elasticSearch的索引库文档的增删改查

我们都知道,elasticsearch在进行搜索引擎的工作时,是会先把数据库中的信息存储一份到elasticsearch中,再去分词查询等之后的工作的。 elasticsearch中的文档数据会被序列化为json格式后存储在elasticsearch中。elasticsearch会对存储的数据进…

4.Python4:requests

1.requests爬虫原理 (1)requests是一个python的第三方库,主要用于发送http请求 2.正则表达式 #正则表达式 import re,requests str1aceace #A(.*?)B,匹配A和B之间的值 print(re.findall(a(.*?)e,str1))import re,requests str2hello com…

Redis-Jedis连接池\RedisTemplate\StringRedisTemplate

Redis-Jedis连接池\RedisTemplate\StringRedisTemplate 1. Jedis连接池1.1 通过工具类1.1.1 连接池:JedisConnectionFactory:1.1.2 test:(代码其实只有连接池那里改变了) 2. SpringDataRedis(lettuce&#…

滑动窗口(同向的双指针)

通过 双指针的 同向移动 算法应用的场景: 满足xxx条件(计算结果,出现次数,同时包含) 最长/最短 子串 /子数组/子序列 例如:长度最小的子数组 滑动窗口 使用思路 (寻找最长) –核心…

刷题(day01)

1、leetcode485.最大连续1的个数 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.…

基于CentOS Stream 9平台搭建FRP内网穿透

内网穿透方法很多,本文以github上很火的frp为例 1.frp官方 文档:https://gofrp.org/zh-cn/docs/overview/ 1.1 下载 https://github.com/fatedier/frp/releases 选中合适的版本 2. 服务端(服务器)搭建frps 需要公网IP服务器 选…