有没有对接微信小程序的例程

有没有对接微信小程序的例程

像是大多数的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,




image.png




您好,关于您将serviceId和characteristicId写成固定的String类型后导致发送失败的问题。我们这边经过验证后发现,将serviceId和characteristicId写成固定并不是发送失败的根本原因所在,这是我们将serviceId和characteristicId写成固定后发送成功的案例:

1.png

导致您发送失败的原因可能有一下两点:

①在调用wx.writeBLECharacteristicValue()接口之前,需要先调用wx.getBLEDeviceServices()和wx.getBLEDeviceCharacterist(),获取到serviceId和characteristicId,否则有可能导致发送失败;

② 错误的使用了蓝牙特征的 UUID,将接收的UUID错误的使用成了发送的UUID,如CH9143发送的serviceId为:0000FFF0和characteristicId:0000FFF2。这边建议您在控制台打印第一次发送的结果,确认第一次发送结果是否真的发送成功,即errMsg: "writeBLECharacteristicValue:ok"。或者更换其他UUID再试。


2.png


icon_rar.gifconnect.zip

你好,我上传了你们给的小程序参考代码的connect.js, 我是确定在原来调用handleWrite函数里对同一个serviceID发送数据,当数据长度为2时调用原来的ServiceId,当长度为非2时,调用fix的string,打印出来uuid原始的和fix的内容是一样的。操作方式也是一样的,请帮忙看一下具体原因,谢谢!


icon_rar.gifconnect.org.zip

这是原始的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



image.png

发送2个字节走自动获取的id是成功的

image.png

发送3字节走fix的string是失败的

image.png


下图可以看出自动获取的和fix的内容一样,但是用include和==判断返回时false。代码里是if(len == 2)走自动获取id,else走fix stringid,其他代码一样,都已经调用过wx.getBLEDeviceServices()和wx.getBLEDeviceCharacterist(),获取到serviceId和characteristicId,

image.png


另外补充说明一下,我使用的是IOS


您好,我们这边仔细核对了一下两种发送方式时的serviceId和characteristicId,固定时的与自动获取的存在着差异:

image.png


只有登录才能回复,可以选择微信账号登录