商务服务
uni-app 蓝牙连接、读写数据全过程(真实案例)
2025-01-03 05:10

点赞 + 关注 + 收藏 = 学会了

这是一次真实的 蓝牙收发数据 的全过程讲解。

本文使用 + 的方式进行开发,以手机app的方式运行(微信小程序同样可行)。

提供了 蓝牙低功耗蓝牙 的 ,和微信小程序提供的 是一样的,所以本文的讲解也适用于微信小程序

本文只实现 蓝牙收发数据 功能,至于样式,我懒得调~

蓝牙相关功能我会逐步讲解。如果你基础好,又急的话,可以直接跳到 『完整代码』的章节查看,那里没废话。

花了几块钱巨款买回来的蓝牙学习套装~

蓝牙收发数据的逻辑和我们常用的 进行的网络请求是有一丢丢不同的。

其中较大的区别是:蓝牙接收数据不是那么的稳定,相比起网络请求,蓝牙更容易出现丢包的情况。

在开发中, 发起的请求不管成功还是失败,浏览器基本都会给你一个答复。但 提供的 来看,蓝牙接收数据会显得更加“异步”

使用蓝牙进行数据传输的大概思路如下:

上面整理出使用蓝牙传输数据的5大动作,但每个动作其实都是由 提供的一个或者多个 组合而成。

使用蓝牙之前,需要初始化蓝牙模块,这是最最最开始就要做的!

使用 这个 就可以初始化蓝牙模块。其他蓝牙相关 API 必须在 调用之后使用。否则 API 会返回错误( )。

错误代码可以查阅

代码示例

如果你手机开启了蓝牙,点击页面上的按钮后,控制台就会输出如下内容

如果手机没开启蓝牙,就会返回如下内容

根据提示,10001代表当前蓝牙适配器不可用

如果你的控制台能打印出 证明第一步已经成功了。

接下来可以开始搜索附近蓝牙设备。

这一步需要2个 配合完成。所以可以分解成以下2步:

开发蓝牙相关功能时,操作逻辑更像是推送,所以“开启搜索”和“监听新设备”是分开操作的。

可以让设备开始搜索附近蓝牙设备,但这个方法比较耗费系统资源,建议在连接到设备之后就使用 停止继续搜索。

方法里可以传入一个对象,该对象接收几个参数,但初学的话我们只关注 和 。如果你的项目中硬件佬有提供 给你的话,你也可以在 里传入。其他参数可以查看的介绍。

在使用 (开始搜索)后,可以使用 进行监听,这个方法里面接收一个回调函数。

代码示例

上面代码的逻辑是,如果开启 “寻找附近设备” 功能成功,接着就开启 “监听寻找到新设备的事件”

搜索到的设备会返回以下数据:

每监听到一个新的设备,我都会将其添加到 蓝牙设备列表(blueDeviceList) 里,最后讲这个列表的数据渲染到页面上。

连接目标设备只需要1个 就能完成。但根据文档提示,我们连接后还需要关闭 “搜索附近设备” 的功能,这个很好理解,既然找到了,再继续找就是浪费资源。

流程如下:

我给每条搜索到的蓝牙结果添加一个 事件,会向目标设备发送连接请求。

我的设备名称是 ,所以我点击了这条。

代码示例

连接成功后在控制台会输出

在连接成功后就立刻调用 方法停止继续搜索附近其他设备,停止成功后会输出

连接成功后,设备也亮起了绿灯。

在连接完设备后,就要先开启监听数据的功能。这样才能接收到发送读写指令后设备给你回调的信息。

要开启监听,首先需要知道蓝牙设备提供了那些服务,然后通过服务获取特征值,特征值会告诉你哪个可读,哪个可写。最后根据特征值进行消息监听

步骤如下:

正常情况下,硬件佬会提前把蓝牙设备的指定服务还有特征值告诉你。

比如我这个设备的蓝牙服务是:

特征值是:

第一步,获取蓝牙服务

此时点击按钮,将会获取到已连接设备的所有服务。

我的设备有以下几个服务。你在工作中拿到的 和我的是不一样的,数量也不一定相同。

可以发现,我拿到的结果里有 这条服务。

第二步,获取指定服务的特征值

获取特征值,需要传 设备ID服务ID

在上两步我拿到了 设备ID 为 ,服务ID 为 。

最后成功输出

字段里保存了该服务的所有特征值,我的设备这个服务只有1个特征值,并且读、写、消息推送都为 。

你的设备可能不止一条特征值,需要监听那条特征值这需要你和硬件佬协商的(通常也是硬件佬直接和你说要监听哪条)。

第三、四步,开启消息监听 并 接收消息监听传来的数据

根据已经拿到的 设备ID服务ID特征值,就可以开启对应的监听功能。

使用 开启消息监听;

并在 方法触发监听到的消息。

方法是用来接收设备传过来的消息。

上面的例子中, 的结果是

设备传过来的内容就放在 字段里,但因为该字段的类型是 ,所以无法在控制台用肉眼直接观察。于是就通过 方法将该值转成 16进制 ,最后再用 方法将 16进制 转成 ASCII码

我从设备里发送一段字符串过来:

App端收到的数据转成 16进制 后的结果:

再从 16进制 转成 ASCII码 后的结果:

终于到最后一步了。

从 和 提供的蓝牙 来看,发送指令只要有2个方法:

这里需要理清一个概念,本节的内容为 “发送指令”,也就是说,从你的app或小程序向其他蓝牙设备发送指令,而这个指令分2种情况,一种是你要发送一些数据给蓝牙设备,另一种情况是你叫蓝牙设备给你发点信息。

uni.writeBLECharacteristicValue

这两种情况我们需要分开讨论,先讲讲 。

从文档可以看出,这个 是可以发送一些数据给蓝牙设备,但发送的值要转成 。

代码示例

此时,如果 走 ,证明你已经把数据向外成功发送了,但不代表设备一定就收到了。

通常设备收到你发送过去的信息,会返回一条消息给你,而这个回调消息会在 触发,也就是 第【9】步 那里。但这是蓝牙设备那边控制的,你作为前端佬,人家“已读不回”你也拿人家没办法。

uni.readBLECharacteristicValue

“监听” 部分,我们使用了 获取设备的特征值,我的设备提供的特征值支持 ,所以可以使用 向蓝牙设备发送一条 “读取” 指令。然后在 里可以接收设备发送过来的数据。

代码示例

使用 “读取” 的方式向设备发送指令,是不需要另外传值的。

此时我的设备返回

这个数据是硬件那边设置的。

在日常工作中, 的作用主要是读取数据,但使用场景不算很多。

我在工作中遇到的场景是:蓝牙设备提供了几个接口,而且传过来的数据比较大,比如传图片给app这边。我就会先用 告诉设备我现在需要取什么接口的数据,然后用 发送读取数据的请求,如果数据量比较大,就要重复使用 进行读取。比如上面的例子,我读第一次的时候返回 ,读第二次就返回 ……

最后再提醒一下, 只负责发送读取的请求,并且里面的 和 只是返回你本次发送请求的动作是否成功,至于对面的蓝牙设备有没有收到这个指令你是不清楚的。

最后需要通过 监听设备传过来的数据。

    以上就是本篇文章【uni-app 蓝牙连接、读写数据全过程(真实案例)】的全部内容了,欢迎阅览 ! 文章地址:https://sicmodule.kub2b.com/news/15048.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 https://sicmodule.kub2b.com/mobile/ , 查看更多   
最新文章
过年无忧 | 一键get这些春节话术!
一键Get这些春节话术~过年无忧新年快乐春节将至,年味渐浓在这温馨又热闹的节日氛围里我们既能品尝各式各样的美味佳肴沉浸于味
2025在新加坡生活的我们将迎来“至暗时刻”:房租飙涨、每个月入不敷出…
聚焦新加坡真是开年暴击!2025年刚开始,还没过新年呢,万事通就出了一身冷汗:今年又是一个物价涨涨涨的年份。在网上一搜“新加
太抽象!太抽象!2024年游戏行业简直太抽象!
年末,DataEye研究院今天整点活,轻松一波。——用数据、新闻盘点2024年国内游戏业有多抽象。回首2024年有产品研发8年烧了数亿,
TikTok会如何收场
TikTok的命运再次悬而不决。在美国下架12小时又恢复运营之后,1月20日,美国总统特朗普签署行政命令,要求TikTok「不卖就禁」法
今天上午10:00,成绩发布!
早安,东台!‍今天是2025年1月22日‍星期三(农历腊月廿三)大美东台,活力满满进取创新、奋斗拼搏最近有哪些新动态?和小东一
农村土地托管服务的理论基础
中国产品流通经纪人协会供销合作行业标准《农产品食品供应商信用评价规范》参编单位征集函中国农产品流通经纪人协会供销合作行业
头上三尺有神明,每个人头顶都有一颗星,当星光消失人也就消失!
每当夜晚降临后,我们抬头看天空,会看到满天的星星,自古以来,人们从没有停止过对星象的观测和研究。古人观测星象,一则是为了
运营师抖音代运营
运营师抖音代运营:掌握流行短视频潮流的神奇职业短视频平台已经成为人们娱乐、学习和社交的重要方式。在众多的短视频平台中,抖
微短剧,2024年“最大赢家”? | 年终盘点
2024,短剧行业大变样。作者 | 张语格编辑 | 趣解商业文娱组“互联网大厂争相入局。”“98%的短剧制作方都在亏钱。”“用户被免
同类第一!20%弹性的人工智能 ETF 科创(588760)今日上市,一键布局科创板优质AI龙头
  最新公告内容显示,广发上证科创板交易型开放式指数投资基金(基金代码:588760;扩位简称: ETF 科创)已于 2025 年 1 月 1