# BluetoothLowEnergy
**Repository Path**: harmonyos_samples/BluetoothLowEnergy
## Basic Information
- **Project Name**: BluetoothLowEnergy
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 9
- **Forks**: 15
- **Created**: 2024-12-13
- **Last Updated**: 2025-12-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 基于低功耗蓝牙实现设备间连接通信的能力
## 项目介绍
低功耗蓝牙(简称BLE)它是一种能够在低功耗情况下进行通信的蓝牙技术,与传统蓝牙相比,BLE的功耗更低,适用于需要长时间运行的低功耗设备,如智能手表、健康监测设备、智能家具等。
本示例主要介绍了设备之间通过蓝牙进行连接和通信的能力,BLE服务端开启广播后可传递数据、BLE客户端搜索可连接设备并在连接后接收广播数据。
## 效果图预览
| 客户端搜索设备 | 客户端心率检测 | 服务端心率广播 |
| :-------------------------------------------: | :-------------------------------------------: | :-------------------------------------------: |
|
|
|
|
## 使用说明
需要两台设备,一台作为BLE服务端,一台作为BLE客户端。
* BLE服务端
点击开启心率广播按钮后,进行数据传送。
* BLE客户端
搜索可连接蓝牙设备,连接成功后,接收数据,并通过折线图展示。
## 工程目录
```
├──entry/src/main/ets
│ ├──contants
│ │ └──CommonConstants.ets // 常量
│ ├──entryability
│ │ └──EntryAbility.ets // 程序入口类
│ ├──entrybackupability
│ │ └──EntryBackupAbility.ets // 备份恢复类
│ ├──model
│ │ └──BluetoothDevice.ets // 蓝牙设备
│ ├──pages
│ │ ├──client
│ │ │ ├──model
│ │ │ │ └──BluetoothClientModel.ets // 蓝牙客户端model层(业务逻辑层)
│ │ │ ├──view
│ │ │ │ ├──BluetoothClientView.ets // Bluetooth客户端页面
│ │ │ │ └──HeartRateView.ets // 心率折线图页面
│ │ │ └──BluetoothClientViewModel.ets // 蓝牙客户端ViewModel层(UI驱动层)
│ │ ├──server
│ │ │ ├──model
│ │ │ │ └──BluetoothServerModel.ets // 蓝牙服务端model层(业务逻辑层)
│ │ │ ├──view
│ │ │ │ └──BluetoothServerView.ets // Bluetooth服务端页面
│ │ │ └──BluetoothServerViewModel.ets // 蓝牙客户端ViewModel层(UI驱动层)
│ │ └──Index.ets // 首页
│ ├──uicomponents
│ │ ├──HeartRateGraph.ets // 折线图UI组件
│ │ └──NavigationBar.ets // 导航组件
│ └──utils
│ ├──CommonUtils.ets // 通用工具类
│ └──Logger.ets // 日志打印工具类
└──entry/src/main/resources // 应用资源目录
```
## 具体实现
> * BLE服务端
>
> 调用startAdvertising接口开始广播。
>
> 断开连接时,调用stopAdvertising接口停止广播。
> * BLE客户端
>
> 调用startBLEScan接口搜索开启了蓝牙功能的设备。
>
> 调用connect接口连接蓝牙。
>
> 调用on(type: 'BLECharacteristicChange')订阅特征值变化
>
### 客户端ViewModel层主要接口
| 方法/属性 | 类型定义 | 说明 |
| --------------------------- | -------------------------------------------------- | ------------------------------------------------------------ |
| getInstance | static getInstance(): BluetoothClientViewModel | 获取客户端ViewModel的单例对象。 |
| tryAutoReconnect | async tryAutoReconnect(): Promise\ | 尝试基于系统持久化地址自动重连。 |
| startBLEScan | startBLEScan(): boolean | 开启 BLE 扫描。如果蓝牙未开启会提示开启。 |
| stopBLEScan | stopBLEScan(): void | 停止BLE扫描。 |
| connect | connect(bluetoothDevice: BluetoothDevice): boolean | 连接指定的蓝牙设备。参数为 `BluetoothDevice` 对象。 |
| disconnect | disconnect(): void | 断开连接 |
| close | close(): void | 关闭 GATT(释放资源) |
| changeConnectState | changeConnectState(): void | 将连接状态复位为已断开(超时等场景) |
| deleteDeviceById | deleteDeviceById(deviceId?: string): void | 从列表和持久化存储中删除指定 ID 的设备记录。 |
| resetHeartRateStatistics | resetHeartRateStatistics(): void | 重置心率统计数据 (最大值/最小值/平均值)。 |
| resetHeartRateValue | resetHeartRateValue(): void | 将当前心率置零 |
| availableDevices | Array | 当前扫描到的可用 BLE 设备列表,UI 监听此属性更新列表视图。(@Trace) |
| connectBluetoothDevice | BluetoothDevice | 当前连接设备(@Trace) |
| heartRate | number | 当前心率(@Trace) |
| heartRateTop/Bottom/Average | number | 心率统计(@Trace) |
| persistentDeviceIds | string[] | 系统持久化随机地址清单(@Trace) |
| lastConnectedDevice | BluetoothDevice | 最近连接设备(@Trace) |
| bluetoothEnable | boolean | 适配器开关状态(@Trace) |
### 服务端ViewModel层主要接口
| 方法/属性 | 类型定义 | 说明 |
| -------------------- | ---------------------------------------------- | ------------------------------------------------------------ |
| getInstance | static getInstance(): BluetoothServerViewModel | 获取服务端ViewModel的单例对象。 |
| toggleAdvertiser | toggleAdvertiser(): void | 切换广播状态。若开启,则启动广播并开始模拟发送心率数据;若关闭,则停止广播和数据发送。 |
| stopAdvertiser | stopAdvertiser(): void | 停止广播并释放 GATT Server |
| deviceId | string | 当前已连接设备的随机MAC地址(@Trace) |
| bluetoothEnable | boolean | 蓝牙开关状态(@Trace) |
| startAdvertiserState | boolean | 当前是否正在进行 BLE 广播(@Trace) |
| localName | string | 本机蓝牙名(@Trace) |
| heartRate | number | 当前模拟生成的实时心率值,用于在服务端 UI展示。(@Trace) |
## 相关权限
1. ohos.permission.ACCESS_BLUETOOTH 允许应用接入蓝牙并使用蓝牙能力,例如配对、连接外围设备等。
2. ohos.permission.PERSISTENT_BLUETOOTH_PEERS_MAC 允许应用固化对端蓝牙设备MAC对应的虚拟地址,以实现BLE蓝牙快速回连。
## 约束与限制
* 本示例仅支持标准系统上运行,支持设备:华为手机。
* HarmonyOS系统:HarmonyOS 6.0.0 Release及以上。
* DevEco Studio版本:DevEco Studio 6.0.0 Release及以上。
* HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上。