帖子
帖子
用户
博客
课程
12下一页
返回列表 发新帖
显示全部楼层
20
帖子
0
勋章
116
Y币

[多端开发] ble.writeValueForDescriptor问题

[复制链接]
发表于 2024-6-10 20:12:31

ble.writeValueForDescriptor({
                peripheralUUID: 'DC:0D:30:64:58:E0',
                serviceUUID:'000018f0-0000-1000-8000-00805f9b34fb',
                characteristicUUID:'00002af0-0000-1000-8000-00805f9b34fb',
                value: commandData,
                descriptorUUID:'00002902-0000-1000-8000-00805f9b34fb'
            }, function(ret,err) {
                console.log(JSON.stringify(ret))
                console.log(JSON.stringify(err))
                if (ret) {
                    api.alert({ msg: JSON.stringify(ret) });
                }
            });

没进入回调,是因为参数不对吗?
控制太没有报错信息吗
20
帖子
0
勋章
116
Y币

回调直接没有进入,没有返回信息
zero魂 · 2024-6-11 09:07回调直接没有进入,没有返回信息

确认这个方法执行了吗,是没有执行,还是执行了没有任何输入
20
帖子
0
勋章
116
Y币
chyd④④⑤⑤②⑦⑧⑤② · 2024-6-11 10:35确认这个方法执行了吗,是没有执行,还是执行了没有任何输入

确认执行了,因为我修改了一个参数,它是有返回报错的,但是填写正确的以后没有回调信息
0
帖子
2
勋章
1606
Y币
你在调用「 console.log(JSON.stringify(ret)) 和 console.log(JSON.stringify(err))」前,先判断一下ret或者err是否存在,如果存在再打印对应的对象,比如这样修改

  1. ble.writeValueForDescriptor({
  2.     peripheralUUID: 'DC:0D:30:64:58:E0',
  3.     serviceUUID:'000018f0-0000-1000-8000-00805f9b34fb',
  4.     characteristicUUID:'00002af0-0000-1000-8000-00805f9b34fb',
  5.     value: commandData,
  6.     descriptorUUID:'00002902-0000-1000-8000-00805f9b34fb'
  7. }, function(ret,err) {
  8.     var msg = '写入回调执行了,但是没有返回值';
  9.     if (err) {
  10.         var msg = '写入失败:' + JSON.stringify(err)
  11.     }
  12.     else if (ret) {
  13.         var msg = '写入成功:' + JSON.stringify(ret)
  14.     }
  15.     console.log(msg)
  16.     api.alert({ title: '蓝牙写入回调:', msg: msg });
  17. });
复制代码


另外,你上面进行写入时,传入的参数都是你写死的,如果里面存在错误,写入的目前蓝牙设备不存在,那么不存在的设备是无法给予响应的,也会出现你上面反馈的没有任何反应的场景问题。这个参数对不对就要靠你自己判断负责了。最好能换成在实时运行中,通过变量去保存的动态值
20
帖子
0
勋章
116
Y币
至高吾·尚 · 2024-6-11 14:45你在调用「 console.log(JSON.stringify(ret)) 和 console.log(JSON.stringify(err))」前,先判断一下ret或者err是否存在,如果存在再打印对应的对象,比如这样修改




            ble.writeValueForDescriptor({
                peripheralUUID: connectBlue.uuid,
                serviceUUID:serviceUUID,
                characteristicUUID:characteristicUUID,
                value: commandData,
                descriptorUUID:descriptorUUID
            }, function(ret,err) {
                console.log('进入回调')
            });

现在是确定'进入回调'没有打印出来,参数是ble.discoverService,ble.discoverCharacteristics,ble.discoverDescriptorsForCharacteristic,拿的,这些参数对不对的话我这边就不太确定了,这个参数是怎么校验是否正确的呢?
0
帖子
2
勋章
1606
Y币
zero魂 · 2024-6-11 14:59ble.writeValueForDescriptor({
                peripheralUUID: connectBlue.uuid,
                serviceUUID:serviceUUID,

一般这些参数值都是通过之前的扫描请求去获取到的,那你自己填写的值,怎么来的你自己应该最清楚的,或者是别的开发者告诉你的这些值,你可以找那个开发者去咨询确认下。
20
帖子
0
勋章
116
Y币
至高吾·尚 · 2024-6-11 15:09一般这些参数值都是通过之前的扫描请求去获取到的,那你自己填写的值,怎么来的你自己应该最清楚的,或者是别的开发者告诉你的这些值,你可以找那个开发者去咨询确认下。 ...

ble.discoverDescriptorsForCharacteristic获取的descriptorUUID,如果用characteristicUUID的监听特性的数据能获取到一个,但是用写入特性的数据获取不到数据,但是到了ble.writeValueForDescriptor都报错说未找到指定描述符(descriptor),这个是如何获取到正确的descriptorUUID?
0
帖子
2
勋章
1606
Y币
本帖最后由 zero魂 于 2024-6-11 17:20 编辑

你得看你连接的蓝牙设备,这个蓝牙设备厂家是否提供了开发说明书,怎么进行蓝牙连接,通信设置等。不同厂家的蓝牙设备,可能有自己的一套独立连接通讯规则,这个我也不清楚。如果你无法准确判断,可能只有遍历获取到的列表值,一个一个的去测试,看看哪个值OK

另外,提供一些基础知识:
1. writeValueForCharacteristic 和 writeValueForDescriptor 都具备写入功能,你需要判断对采用哪个方法(不要问我,我也不清楚,最好看蓝牙设备的厂家说明或自己去测试判断)
2. 获取相关的uuid需要调用不同的方法,并且按照一定的顺序
2.1. peripheralUUID 需要调用 getPeripheral  或 getPeripheralRssi 按照系统类型和版本
2.2.  serviceUUID参数,需要调用discoverService获取
2.3.  characteristicUUID,需要调用 discoverCharacteristics
2.4.  descriptorUUID, 需要调用 discoverDescriptorsForCharacteristic

更详细的使用,可以查看ble的开发文档ble的开发文档

同时,如果厂家的蓝牙通信不是通用的,包含一些自定义的规则,那么公共的ble蓝牙模块可能就无法实现连接,那样你只能根据厂家的蓝牙通信开发说明书找其他第三方的插件开发者去自定义插件了





12下一页
您需要登录后才可以回帖 登录

本版积分规则