BLE设备通过HILINK接入华为智慧生活APP

本文介绍BLE芯片移植Hilink的要求及步骤,包括资源需求、产品认证、GATT服务构建、广播类型定义、动态内存分配算法移植等内容。

一. BLE芯片资源要求

移植Hilink至少需要额外的64K FALSH和32K RAM.
一般选用FLASH > 256K, RAM > 64K 的BLE SOC.

二. 产品认证要求
BQB认证,SRRC认证,RoHS认证是必须的,
还有其他的认证如:3C认证等

三. 移植步骤

  1. 建立GATT服务,实现write 和 indicate操作
    根据华为文档“设备集成开发指导”定义的UUID,添加GATT服务,实现write 和 indicate操作.
    使用nRF_Connect在手机上测试蓝牙连接与gatt数据收发正常即可.

  2. 构建广播
    根据华为文档“设备集成开发指导”的定义,构建以下四种广播:
    2.1 未注册常态广播
    BLE设备未注册到华为智慧生活APP, 通过APP可以扫描到蓝牙设备.
    2.2 已注册常态广播
    BLE设备已经注册到华为智慧生活APP, 通过APP扫描不到蓝牙设备.
    但是可以通过APP连接蓝牙设备。
    2.3 一碰广播
    BLE设备未注册,用于靠近发现FA和H5半模态拉起.
    2.4 二碰广播
    BLE设备已经注册,用于靠近发现FA和H5半模态拉起.

  3. 移植动态内存分配算法
    JSON库和mbedtls库都需要使用到动态内存分配. 一般BLE SOC提供的SDK都有malloc和free接口函数,或者可以借鉴free_rtos或者rt_thread源码里面的实现.

  4. 移植json库
    蓝牙设备和APP之间的数据通过JSON格式交互,需要将开源库cJSON撸过来,万能的百度.

  5. 移植mbedtls库
    开源库mbedtls撸过来,万能的百度.

  6. 广播与发现
    广播格式正确,即可在华为智慧生活APP扫描到蓝牙设备.

  7. 设备注册过程(参考“设备集成开发指导”文档)
    第一步:建立GATT连接
    第二步:查询设备版本信息
    第三步:获取设备信息
    第四步:发送认证信息
    第五步:保存注册信息

  8. 设备控制过程(参考“设备集成开发指导”文档)
    第一步:建立GATT连接
    第二步:查询设备版本信息
    第三步:创建会话
    第四步:发送控制报文

华为鸿蒙系统中无法搜索到BLE设备可能涉及多个方面的原因,包括硬件支持、软件配置、权限设置以及系统兼容性等。以下是可能导致问题的原因及对应的解决方法: ### 1. **检查BLE硬件支持** - 确保设备蓝牙模块支持BLE功能。部分老旧设备或低功耗蓝牙模块可能仅支持传统蓝牙(Bluetooth Classic),而不支持BLE。 - 在鸿蒙系统中,可以通过调用API来判断设备是否支持BLE功能。例如: ```java BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter != null && bluetoothAdapter.isBleSupported()) { // 设备支持BLE } else { // 设备不支持BLE } ``` ### 2. **检查蓝牙权限和定位权限** - 鸿蒙系统要求应用程序在访问蓝牙功能时必须申请相应的权限,包括`ohos.permission.USE_BLUETOOTH`和`ohos.permission.LOCATION`。如果缺少这些权限,可能会导致无法扫描到BLE设备[^1]。 - 在应用的`config.json`文件中添加以下权限声明: ```json { "module": { "reqPermissions": [ { "name": "ohos.permission.USE_BLUETOOTH" }, { "name": "ohos.permission.LOCATION" } ] } } ``` - 同时,在运行时需要动态请求位置权限,因为BLE扫描通常依赖位置服务来发现周边设备。 ### 3. **确保蓝牙已启用** - 如果蓝牙未启用,系统将无法进行BLE扫描。可以通过以下代码检查并提示用户开启蓝牙: ```java if (!bluetoothAdapter.isEnabled()) { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); // 提示用户开启蓝牙 } ``` ### 4. **检查扫描参数配置** - BLE扫描过程中,扫描参数的配置也可能影响设备发现能力。例如,扫描模式(Scan Mode)和扫描过滤器(Scan Filter)的设置不当可能导致某些设备被忽略。 - 使用`ScanOptions`类来配置扫描参数,例如: ```java ScanOptions scanOptions = new ScanOptions.Builder() .setScanMode(ScanOptions.SCAN_MODE_LOW_LATENCY) .build(); bluetoothLeScanner.startScan(scanOptions, scanCallback); ``` - 不同的扫描模式会影响扫描的速度和精度,建议根据实际需求选择合适的扫描模式。 ### 5. **排查系统兼容性问题** - 部分华为鸿蒙设备可能存在与特定BLE设备的兼容性问题,尤其是在不同版本的鸿蒙系统上。可以通过更新系统或设备固件来解决潜在的兼容性问题。 - 另外,某些厂商的BLE设备可能使用了非标准的服务UUID或广播数据格式,这可能导致鸿蒙系统无法正确识别这些设备。在这种情况下,可以尝试手动指定服务UUID过滤器来提高发现率: ```java ScanFilter scanFilter = new ScanFilter.Builder() .setServiceUuid(ParcelUuid.fromString("0000110A-0000-1000-8000-00805F9B34FB")) .build(); ``` ### 6. **检查设备距离和环境干扰** - BLE信号的传输距离较短,且容易受到障碍物和电磁干扰的影响。确保目标设备与鸿蒙设备之间的距离足够近,并尽量减少周围的干扰源。 - 此外,某些金属物体或电子设备可能会屏蔽或干扰BLE信号,导致设备无法被发现。 ### 7. **查看日志信息** - 使用鸿蒙系统的日志工具(如`HiLog`)可以帮助开发者获取更多关于BLE扫描失败的具体原因。通过分析日志中的错误码,可以更快地定位问题所在。 ```java HiLog.error(LABEL, "Failed to start BLE scan: %{public}d", errorCode); ``` ### 8. **尝试重启蓝牙服务** - 有时,蓝牙服务可能出现临时故障,导致BLE扫描异常。可以尝试关闭并重新启动蓝牙服务,以恢复正常的扫描功能。 ### 9. **联系设备厂商获取支持** - 如果以上方法都无法解决问题,可能是由于特定设备的驱动或固件存在问题。此时,建议联系设备厂商的技术支持团队,获取更详细的帮助和支持。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值