uni-app 低功耗蓝牙问题

发布于 1周前 作者 eggper 来自 Uni-App

uni-app 低功耗蓝牙问题

信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC版本号 windows10
HBuilderX 正式
HBuilderX版本号 4.43
手机系统 Android
手机版本号 Android 14
手机厂商 vivo
手机机型 vivox 70
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

C2~RCD~{"101":{"c":"N","p":"A","v":"C1234567891"},"102":{"c":"N","p":"A","v":"C123"},"103":{"c":"Y","p":"A","v":"C"},"104":{"c":"N","p":"A","v":"C"},"105":{"c":"N","p":"A","v":"C"},"106":{"c":"N","p":"A","v":"C"},"107":{"c":"N","p":"A","v":"C"},"108":{"c":"N","p":"A","v":"Ch"},"p":"RS485-2","f":9600}

使用uni.writeBLECharacteristicValue传入上面的指令就会复现

预期结果:

正常会提示成功,蓝牙设备那一块能成功接收

实际结果:

正常会提示成功,蓝牙设备并没有受到数据

bug描述:

当输入传输给设备的指令长度过长时(超过300),uni.writeBLECharacteristicValue这个api会提示发送成功,但是实际上发送失败了,


1 回复

针对uni-app中的低功耗蓝牙问题,我们可以通过uni-app提供的蓝牙API来实现相关的功能。以下是一个简单的代码示例,展示了如何在uni-app中使用低功耗蓝牙API进行设备扫描、连接、服务和特征值的操作。

首先,确保在manifest.json文件中已经配置了蓝牙权限:

"mp-weixin": { // 以微信小程序为例
    "requiredPrivateInfos": ["getBluetoothAdapterState", "startBluetoothDevicesDiscovery", "createBLEConnection", "getBLEDeviceServices", "getBLEDeviceCharacteristics"]
}

然后,在页面的script部分编写蓝牙操作的代码:

export default {
    data() {
        return {
            devices: [], // 存储扫描到的设备
            connectedDeviceId: null, // 已连接设备的ID
            services: [], // 存储设备服务
            characteristics: [] // 存储设备特征值
        };
    },
    methods: {
        // 初始化蓝牙适配器
        initBluetoothAdapter() {
            uni.getBluetoothAdapterState({
                success: (res) => {
                    if (res.available) {
                        console.log('蓝牙适配器可用');
                        this.startScan();
                    } else {
                        console.error('蓝牙适配器不可用');
                    }
                }
            });
        },
        // 开始扫描设备
        startScan() {
            uni.startBluetoothDevicesDiscovery({
                allowDuplicatesKey: false,
                success: (res) => {
                    console.log('开始扫描');
                    uni.onBluetoothDeviceFound((device) => {
                        this.devices.push(device.devices[0]);
                        console.log('扫描到设备:', device.devices[0]);
                    });
                },
                complete: () => {
                    setTimeout(() => {
                        uni.stopBluetoothDevicesDiscovery({
                            success: (res) => {
                                console.log('停止扫描');
                            }
                        });
                    }, 10000); // 扫描10秒后停止
                }
            });
        },
        // 连接设备
        connectDevice(deviceId) {
            uni.createBLEConnection({
                deviceId: deviceId,
                success: (res) => {
                    this.connectedDeviceId = deviceId;
                    console.log('设备连接成功', res);
                    this.getServices();
                },
                fail: (err) => {
                    console.error('设备连接失败', err);
                }
            });
        },
        // 获取设备服务
        getServices() {
            if (!this.connectedDeviceId) return;
            uni.getBLEDeviceServices({
                deviceId: this.connectedDeviceId,
                success: (res) => {
                    this.services = res.services;
                    console.log('获取服务成功', res);
                    // 可以进一步获取特征值等
                }
            });
        },
        // ... 其他方法,如获取特征值、读写特征值等
    }
};

以上代码展示了如何在uni-app中初始化蓝牙适配器、开始扫描设备、连接设备以及获取设备服务的基本流程。根据具体需求,你可以进一步扩展代码,实现读写特征值、监听特征值变化等功能。请注意,实际应用中需要处理更多的错误情况和边界情况,以确保蓝牙操作的稳定性和可靠性。

回到顶部