0530-3433334

网站建设 APP开发 小程序

知识

分享你我感悟

您当前位置>首页 >> 知识 >> 小程序

微信小程序中的开发框架和遇到的那些事儿

发表时间:2023-11-14 15:50:16

文章来源:炫佑科技

浏览次数:136

菏泽炫佑科技 菏泽炫佑小程序开发 菏泽炫佑app制作 炫佑科技

微信小程序中的开发框架和遇到的那些事儿

实际项目的效果很简单。 有两个页面,一页建立连接,一页显示数据,大致如下图所示。

图片.png

老板说这个简易版只有2页,售价1000元。

想了想,这似乎也没什么问题。 可能不需要一天的时间就能完成。 我心里暗自高兴。

但实际情况远远超出了预算的开发时间。 现在项目已经发布上​​线了,回头算了一下,断断续续的开发时间花了差不多2天的时间。 这个算计确实不痛快,不过是为了加深体验而已。 下面记录实际遇到的问题,开发框架:,蓝牙调用和微信小程序中基本一样。

建立连接

建立连接基本上是以下步骤:

具体实施过程

初始化蓝牙,这里有一点需要注意。 建立连接后可能需要重新连接,因此初始化前需要断开现有连接。 您可以调用蓝牙模块关闭来断开连接,否则无法搜索到您要连接的设备。

// 关闭蓝牙模块
uni.closeBluetoothAdapter({
  success(res) {
    // 初始化蓝牙
    uni.openBluetoothAdapter({
      success(res) {
        console.log('初始化蓝牙成功')
      },
      fail(err) {
        console.log('初始化蓝牙失败')
      }
    })
  }
})

开始搜索附近设备,在搜索附近设备的回调中找到需要连接的设备。 搜索回调将包含蓝牙的名称和设备 ID。 您可以通过名称识别要连接的蓝牙。 设备 ID 用于连接蓝牙。 这种方法比较消耗系统资源。 如果连接成功,需要主动调用关闭蓝牙搜索。

// 开始搜寻附近设备
uni.startBluetoothDevicesDiscovery({
  success() {
    // 开启监听回调
    uni.onBluetoothDeviceFound(found)
  }
})
function found(res) {
  if (res.devices[0] && res.devices[0].name.includes('XXX')) {
    // 连接设备
    uni.createBLEConnection({
      deviceId: res.devices[0].deviceId,
      success(res) {
        // 停止搜索
        uni.stopBluetoothDevicesDiscovery()
      }
    })
  }
}

收听消息

以上连接已成功建立。 由于本次连接是低功耗蓝牙,因此我们需要监控数据返回和数据写入。 *后,我们需要调用使蓝牙低功耗设备特征值发生变化的函数。 此方法还需要两个步骤。 参数,蓝牙功能的UUID()以及蓝牙功能对应的服务的UUID()。

微信蓝牙开发_微信小程序支持蓝牙_微信小程序蓝牙开发

获取蓝牙功能对应服务的UUID():

uni.getBLEDeviceServices({
  deviceId,
  success(res) {
    // serviceId
  },
})

根据获取到的信息继续获取。 这里需要注意的是微信小程序中的开发框架和遇到的那些事儿,返回的信息是一个数组,里面包含了对应的读写函数的描述。 以后根据实际读写情况使用不同的值。 如果不确定,请联系硬件开发确认。 。

uni.getBLEDeviceCharacteristics({
  deviceId,
  serviceId,
  success(res) {
    // characteristicId
  }
})

*后一步是开启消息监听,当蓝牙低功耗设备的特征值发生变化时启用该功能,并订阅该特征。 此外,必须在侦听设备更改事件之前启用它。

uni.notifyBLECharacteristicValueChange({
  state: true,
  deviceId, // 设备id
  serviceId, // 监听指定的服务
  characteristicId, // 监听对应的特征值
  success(res) {
    // 监听消息变化
  }
})

监控消息变化,返回的res.value就是需要使用的值,但是这个值的格式是需要进一步转换才能使用。

微信蓝牙开发_微信小程序蓝牙开发_微信小程序支持蓝牙

uni.onBLECharacteristicValueChange(res => {
  ab2hex(res.value)
})
// ArrayBuffer转16进制字符串
ab2hex(buffer) {
  const hexArr = Array.prototype.map.call(
    new Uint8Array(buffer),
    function(bit) {
      return ('00' + bit.toString(16)).slice(-2)
    }
  )
  return hexArr.join('')
}

数据写入

此时我们可以取回数据,但是正常操作中仍然有数据的写入。 通过编写不同的指令,我们可以执行相关的功能操作或者获取不同的数据。 这里同样要注意的是微信小程序蓝牙开发,写入的数据也需要格式化,写入前要注意转换。

const typedArray = new Uint8Array(hexStr.match(/[\da-f]{2}/gi).map(function(h) {
  return parseInt(h, 16)
}))
const buf = typedArray.buffer
uni.writeBLECharacteristicValue({
  deviceId,
  serviceId,
  characteristicId,
  value: buf,
  success() {
    console.log('writeBLECharacteristicValue success')
  }
})

另外,需要注意的是,写入数据时的返回数据不会在当前方法的回调中返回,或者在上述特征值改变事件中,会通过具体的返回字符来区分当前的操作行为。

后记

下面是一些陷阱的记录。 如果没有那么多陷阱,就不会浪费那么多时间。 如果您是**次从事此类项目,希望对您有所帮助。

数据格式

前端与蓝牙协议的通信方式不再像平时与后端的接口调用。 和硬件同事沟通的时候一定要沟通清楚。 首先传输的不是数据还是json,而是传输对应的字符内容。 这次通信的格式是十六进制,长度是16位,但是在JS中,实际发送的是一个长度为32的字符串并进行转换来使用。 例如,实例--发送接口文档命令0x04。 如果您对这种情况不确定,应该积极与硬件同事沟通。

0530-.jpg

数据转换

文档中涉及的一些数据使用的变换如下:

数据1 = 数据[9] * 256 + 数据[10]

我一开始不明白,以为有什么特殊的逻辑。 后来我发现它是将十六进制转换为十进制。 但有一个更简单的方法可以在 JS 中进行转换。 注:此处所取下标对应两个字符。

示例:十六进制字符

根据上面的转换,('12', 16) * 256 + ('34', 16)等于4660。JS直接使用转换('')或('1234', 16),以0x开头的字符,默认以十六进制分析,*终结果为4660。

这还涉及到高低位转换的问题。 我这里遇到的是高位在前,低位在后。 暂时不需要额外处理。 实际开发中是否需要转换需要双方沟通。

数据使用

这次需要用到的数据就是上面数据转换中引用的格式。 事实上,一个完整的数据是由两个下标值组成的,然后转换成十六进制字符,就变成了一个4位字符。 因此,每次转换需要4个字符为一组,因为涉及到多个数据值,并且前后都有无效数据需要排除。 *终代码如下所示:

const oData = ab2hex(res.value).slice(2).replace(/(.{4})/g, '$1,').split(',')
for(var i = 3; i < oData.length; i++) {
  if(oData[i] != '0000' && oData[i]) {
    // 有效数据使用
  }
}

终于

本文到此结束。 我记录了微信小程序的蓝牙开发过程以及遇到的问题。 希望对您有所帮助。 如果您觉得这篇文章有用,请点赞并保存,以便有一天可以使用~

炫佑科技专注互联网开发小程序开发-app开发-软件开发-网站制作等

相关案例查看更多