• Lv0
    粉丝0

积分11 / 贡献0

提问1答案被采纳0文章1

作者动态

[经验分享] 蓝牙Socket应用开发案例

深开鸿_张梦寒 显示全部楼层 发表于 2024-10-15 16:34:01

蓝牙Socket应用开发和使用文档

本文档主要讲解蓝牙Socket应用的开发流程和使用方法。

应用开发

本文使用的DevEcoStudio版本是4.1.0.400,API版本为11。

  1. 通过DevEcoStudio创建项目“File->New->Create Project”创建一个工程。

image.png

  1. 工程创建完毕后,在entry\src\main\ets创建蓝牙socket相关目录,并且entry\build-profile.json5中配置worker。
ets
├─ workers
│  └─ Worker.ets
├─ pages
│  └─ Index.ets
└─ entryability
   └─ EntryAbility.ets
  1. 界面入口为Index.ets,此处也为蓝牙测试页面

蓝牙Socket相关接口可在@ohos.bluetooth.socket(蓝牙socket模块)(推荐) (openharmony.cn)中查找和学习

image.png

客户端传送次数和包长度可供选择,每次传输102个包,包中数组元素为0-101,如第一个包中元素皆为0,长度为应用界面规定长度,以此类推,客户端计算发包1~100的发包的发包个数和长度,共发送字节为收到的长度的累加。在以上数据发送完毕后,再发送一个首个元素为199的数组表示发送完毕。

服务端接收数据流程如下图所示。

image.png

$$ 每次收包个数 = 每次回调中内存包含1到100累计回调次数(单位:个) $$

$$ 每次收包长度 = 每次回调中内存包含1到100累计数据长度(单位: 字节) $$

$$ 每次收包用时 = 每次收完元素100的时间 - 每次收完第一个元素1的时间(单位: ms) $$

$$ 每次传输速度 = 每次收包长度 1000 / (每次收包用时 1024)(单位:KB/s) $$

$$ 平均速度 = 共收到字节 1000 / (总计时 1024)(单位:KB/s) $$

需要注意的是,因为客户端在主线程发送数据会存在appfreeze的问题,所以需要让客户端在与主线程并行的worker线程中发送数据,具体可参考@ohos.worker (启动一个Worker) (openharmony.cn)

应用使用

准备

  • 两块dayu200开发板
  • 在使用前确保两块开发板的蓝牙是开启状态,且两块开发板蓝牙配对成功
  • 安装应用程序:hdc install xxx.hap
  • 关于两块开发板所用镜像适配情况: (1) 5.0.0Release(OpenHarmony 5.0.0.71)版本安装应用无法出现授权弹框且会出现闪退状况,需自行在设置-隐私-权限管理-应用-Socket应用中允许使用蓝牙权限; (2) 4.1.1Release(OpenHarmony 4.1.7.8)版本服务端接收完毕后取消订阅spp读请求事件失败,但不影响使用; (3) 5.0 Beta1(OpenHarmony 5.0.0.25)版本使用无故障。

使用

  1. 在两块开发板上安装此应用;

  2. 点击运行Socket应用,允许蓝牙权限;

  3. 一台开发板选Socket客户端,一台选Socket服务端;

  4. 客户端选择已配对的服务端蓝牙名称,并选择测试次数和包长度;

  5. 先点击“测试Socket服务端”按钮,再点击“测试Socket客户端”按钮;

  6. 客户端页面显示每次发包次数及包长,并在底部显示共测试次数和共发送字节长度,服务端会显示每次收包个数、包长、用时及速度,并在底部显示共测试次数、共收到字节、总计时以及平均速度。(点击顶部文字”蓝牙Socket测试“可变换背景颜色,颜色为白色时,不打印日志,为粉色时打印日志)

  7. 测试结果:本测试结果为在三种镜像下测试次数为100情况下的平均速度,具体结果如下:

    4.1.1Release版本(OpenHarmony 4.1.7.8) 5.0 Beta版本(OpenHarmony 5.0.0.25) 5.0.0Release版本(OpenHarmony 5.0.0.71)
    包长为10字节时的平均速度(单位:KB/s) 13 17 24
    包长为1024字节时的平均速度(单位:KB/s) 153 155 184
    包长为4096字节时的平均速度(单位:KB/s) 160 160 189
    包长为10字节时的总收包个数(单位:个) 1497 1552 1651
    包长为1024字节时的总收包个数(单位:个) 11530 12366 12962
    包长为4096字节时的总收包个数(单位:个) 47407 51999 55193

    相比之下,包长为10字节时的传输速率较低,其原因可能是:每次回调中内存包含1到100的每次回调包含数据较少,而较小的数据包可能会导致更多的头部信息和开销,从而降低实际的传输速率。相反,较大的数据包可以减少这种开销,故传输速率较大。

常见问题及解决办法

  1. 问题描述:应用打开出现闪退情况 可能原因:该开发板蓝牙处于关闭状态 解决方法:在设置中打开蓝牙
  2. 问题描述:点击按钮,按钮变成红色,按钮中显示“蓝牙未打开,请再试一次“ 可能原因:开发板蓝牙处于关闭状态或按钮点击顺序有误 解决方法:检查两块开发板蓝牙状态,将处于关闭状态的蓝牙打开,如两端蓝牙皆处于开启状态,则为按钮点击顺序有误,应先点击“测试Socket服务端”按钮,再点击“测试Socket客户端”按钮

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论2

深开鸿_张梦寒

板凳 发表于 2024-10-16 14:01:22
相关代码文件

BluetoothSocketTest.zip

1.18 MB, 下载次数: 4

蓝牙Socket应用

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部