OpenHarmony开发者论坛

标题: 蓝牙Socket应用开发案例 [打印本页]

作者: zhangmenghan    时间: 2024-10-15 16:34
标题: 蓝牙Socket应用开发案例
[md]# 蓝牙Socket应用开发和使用文档

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

## 应用开发

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

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

![image.png](https://forums-obs.openharmony.c ... u9du7ud5jzrzr9u.png "image.png")

2. 工程创建完毕后,在entry\src\main\ets创建蓝牙socket相关目录,并且entry\build-profile.json5中配置worker。

```
ets
├─ workers
│  └─ Worker.ets
├─ pages
│  └─ Index.ets
└─ entryability
   └─ EntryAbility.ets
```

3. 界面入口为Index.ets,此处也为蓝牙测试页面

*蓝牙Socket相关接口可在[@ohos.bluetooth.socket(蓝牙socket模块)(推荐) (openharmony.cn)](https://docs.openharmony.cn/page ... bluetooth-socket.md)中查找和学习*

![image.png](https://forums-obs.openharmony.c ... ff858f0385jj9ex.png "image.png")

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

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

![image.png](https://forums-obs.openharmony.c ... x5xvofx8vcqnzns.png "image.png")

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

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

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

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

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

**需要注意的是,*因为客户端在主线程发送数据会存在appfreeze的问题,所以需要让客户端在与主线程并行的worker线程中发送数据,具体可参考[@ohos.worker (启动一个Worker) (openharmony.cn)](https://docs.openharmony.cn/page ... s/js-apis-worker.md)*。**

## 应用使用

### 准备

* 两块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客户端”按钮
[/md]
作者: 深开鸿_王石    时间: 2024-10-16 13:58
对应的代码位置:https://gitee.com/openharmony/co ... BluetoothSocketTest
作者: 深开鸿_张梦寒    时间: 2024-10-16 14:01
相关代码文件




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5