更新记录

0.1.0(2024-04-01)

0.1.0 (2024-03-29)

  • 基于原生Android开发的 uni-app 插件,实现低功耗蓝牙(BLE)通信;
  • 扫描蓝牙设备,连接蓝牙设备,实时读取通知数据;
  • 向连接的蓝牙设备写入数据;
  • DFU(强制升降级模式);
  • OTA

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


dodo-uniplugin-ble

插件测试平台

  1. 测试手机:vivo、小米、摩托罗拉;

  2. 测试系统:Android 12;

  3. 设备不需要root;

功能简介

  1. 基于原生Android开发的 uni-app 插件,实现低功耗蓝牙(BLE)通信;

  2. 扫描蓝牙设备,连接蓝牙设备,实时读取通知数据;

  3. 向连接的蓝牙设备写入数据;

  4. DFU(强制升降级模式);

  5. OTA

特别说明

  1. 蓝牙OTA是针对SILICON芯片开发与测试;

  2. 文档中所有的UUID需要根据自己芯片的手册查询或让蓝牙硬件开发人员提供;

使用方法

引用

    // #ifdef APP-PLUS
        const ble = uni.requireNativePlugin('dodo-uniplugin-ble')
    // #endif

API

  1. 在调用方法前,首先必须进行初始化,设置扫描时间

       let scanTime = 1000 * 30 //设置扫描时间 30秒
           ble.initBle((res) => {
               console.log(res) 
       }, scanTime)
  2. 扫描蓝牙设备

                ble.searchBle((res) => {
                    console.log(res) //扫描结果
                }, res => {
                    console.log(res) //扫描时间结束后执行 
                })
  3. 连接蓝牙设备

let address= "B4:3A:31:10:98:78" //蓝牙设备的地址(MAC)
let notifyUuid="00002a05-0000-1000-8000-00805f9b34fb"//接收notify数据的uuid
let timeOut=1000 * 3 //连接超时时间,可根据实际情况进行设置
ble.bleConnect( address,  notifyUuid, timeOut,
                connectSuccess => {//连接成功
                    console.log("ConnectSuccess:" + JSON.stringify(connectSuccess))
                    },
                 connectFail => {//连接失败
                    console.log("ConnectFail:" + JSON.stringify(connectFail))
                    },
                 serviceList => { //获取蓝牙设备的服务列表
                        console.log(JSON.parse(serviceList))
                    },
                serviceDiscoveryFail => {//获取蓝牙设备的服务列表失败
                    console.log("ServiceDiscoveryFail:" + JSON.stringify(serviceDiscoveryFail))
                    },
                receiveMessage  => {//接收数据
                    console.log(this.ab2hex(receiveMessage).toUpperCase())
                    }, 
                pgss => {//上传OTA文件进度
                        console.log(pgss)
                    }, 
               readMessage => {//发送读取数据命令后,从此处接收蓝牙设备返回的数据
                        console.log(this.ab2hex(readMessage).toUpperCase())
                    })
  1. 读取数据
        //读取指定UUID的数据值
        let readUUid="00002a00-0000-1000-8000-00805f9b34fb"
        ble.readBLECharacteristicValue(readUUid, (res) => {
            console.log(res)
        })
  1. 写入数据
        //读取指定UUID的数据值
        let readUUid="00002a00-0000-1000-1111-00805f9b34fb"
        let hexStr="1122334455"
        ble.writeBLECharacteristicHex(readUUid, hexStr, (res) => {
            console.log(res) 
        })
  1. 断开连接
                ble.disConnectBle((res) => {
                    console.log(res) 
                })
  1. 获取当前连接状态
            ble.bleStatus((res) => {
                    console.log(res)
                })
  1. 进入OTA模式
        //蓝牙芯片不同,此命令也不同
        let otaControlUUID = "00002a00-0000-1000-2221-00805f9b34fb"
        let otaWriteUUID = "00002a00-0000-1000-3331-00805f9b34fb"
        ble.inOtaModel(otaControlUUID, otaWriteUUID, (res) => {
            console.log(res) 
            }
          })
  1. 上传升级文件
        //上传升级文件
        let path="/storage/emulated/0/Download/WeiXin/ota.gbl"
        ble.otaDfu(path, res => {
            console.log(res) 
        })

如果觉得可以就点个👍吧,您的关注就是我们的动力!

有使用问题或项目定制需求,联系微信

  • rick6655(请备注添加原因)

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问