有没有对接微信小程序的例程
像是大多数的ble的app开发一样,小程序通常也是针对特定的约定去做的,
比如firmware的开发者与小程序的开发者需要提前约定其连接时候的依据:mac地址(ios可能不适用),名称,广播中的uuid,以及位于广播中自定义的数据;
然后是一些通信时候的必要约定,service uuid,以及characteristic 的uuid;
然后是 数据收发的行为:
主机->从机的write,wirte no respone,
从机->主机的 notify 还是indicate方式。
对于notify/indicate 在使用前,可能需要必要的是能notify 的操作(使能cccd)
对于小程序的开发者,很明显,网上有大量的实例可以参考,并且从以往的客户对接来看,对接是基本毫无困难的(可以以CH573 evt 里面的BLE_UART 为基础工程).
你好,发送接口,如果使用serviceId1 和characteristicId1 这种固定写死为string类型的方法发送就不成功,用自动获取的就可以,我们比对了一下实际内容是一样的。请帮忙看一下,谢谢!
var serviceId = this.data.write_serviceId
var characteristicId = this.data.write_characteristicId
var serviceId1 = "0000FFE0-0000-1000-8000-00805F9B34FB"
var characteristicId1 = "0000FFE1-0000-1000-8000-00805F9B34FB"
console.log(serviceId.includes('0000FFE0-0000-1000-8000-00805F9B34FB'));
console.log(serviceId == serviceId1);
console.log(typeof(serviceId));
console.log(serviceId.length);
console.log(typeof(serviceId1));
console.log(serviceId1.length);
console.log('deviceId x0x is:', deviceId);?
console.log('serviceId is:', serviceId);
console.log('serviceId is:', serviceId1);
console.log('characteristicId is:', characteristicId);
console.log('characteristicId is:', characteristicId1);?
wx.writeBLECharacteristicValue({
deviceId: deviceId,
serviceId: serviceId,
characteristicId: characteristicId,
//serviceId: '0000FFE0-0000-1000-8000-00805F9B34FB',
//characteristicId: '0000FFE1-0000-1000-8000-00805F9B34FB',
value: buffer,
wx.writeBLECharacteristicValue({
deviceId: deviceId,
serviceId: serviceId1,
characteristicId: characteristicId1,
//serviceId: '0000FFE0-0000-1000-8000-00805F9B34FB',
//characteristicId: '0000FFE1-0000-1000-8000-00805F9B34FB',
value: buffer,
您好,关于您将serviceId和characteristicId写成固定的String类型后导致发送失败的问题。我们这边经过验证后发现,将serviceId和characteristicId写成固定并不是发送失败的根本原因所在,这是我们将serviceId和characteristicId写成固定后发送成功的案例:
导致您发送失败的原因可能有一下两点:
①在调用wx.writeBLECharacteristicValue()接口之前,需要先调用wx.getBLEDeviceServices()和wx.getBLEDeviceCharacterist(),获取到serviceId和characteristicId,否则有可能导致发送失败;
② 错误的使用了蓝牙特征的 UUID,将接收的UUID错误的使用成了发送的UUID,如CH9143发送的serviceId为:0000FFF0和characteristicId:0000FFF2。这边建议您在控制台打印第一次发送的结果,确认第一次发送结果是否真的发送成功,即errMsg: "writeBLECharacteristicValue:ok"。或者更换其他UUID再试。
你好,我上传了你们给的小程序参考代码的connect.js, 我是确定在原来调用handleWrite函数里对同一个serviceID发送数据,当数据长度为2时调用原来的ServiceId,当长度为非2时,调用fix的string,打印出来uuid原始的和fix的内容是一样的。操作方式也是一样的,请帮忙看一下具体原因,谢谢!
这是原始的connect.js。 上面图片里已经打印出了每次的serviceid和serviceid1等,我人眼比对了是一样的,但是调用console.log(serviceId.includes('0000FFE0-0000-1000-8000-00805F9B34FB'));和 console.log(serviceId == serviceId1); 图片里返回都是false,调用
console.log('serviceId is:', serviceId);
console.log('serviceId is:', serviceId1);
打印出来内容是一样的。可以输入3个字节时走fix的string,就是发送失败,输入2个字节时走自动获取的就是发送成功。
现在我们使用的是CH579上OTA的通道。
// OTA Profile?¨??Index?¨??
#define OTAPROFILE_CHAR 0
// OTA ·?????UUID?¨??
#define OTAPROFILE_SERV_UUID 0xFEE0
// OTA ?¨???¨??UUID?¨??
#define OTAPROFILE_CHAR_UUID 0xFEE1
发送2个字节走自动获取的id是成功的
发送3字节走fix的string是失败的
下图可以看出自动获取的和fix的内容一样,但是用include和==判断返回时false。代码里是if(len == 2)走自动获取id,else走fix stringid,其他代码一样,都已经调用过wx.getBLEDeviceServices()和wx.getBLEDeviceCharacterist(),获取到serviceId和characteristicId,
另外补充说明一下,我使用的是IOS
您好,我们这边仔细核对了一下两种发送方式时的serviceId和characteristicId,固定时的与自动获取的存在着差异: