小程序蓝牙API能力探索 2——小程序选择了哪种蓝牙协议,为什么?

结论:小程序蓝牙通信底层协议------低功耗蓝牙 (BLE)

微信和支付宝小程序用于与外部设备通信的底层蓝牙协议是蓝牙4.0及以上版本所包含的"低功耗蓝牙"(Bluetooth Low Energy, 简称BLE)

这不是一个由小程序平台自定义的私有协议,而是直接利用了由蓝牙技术联盟(SIG)定义的标准化BLE协议。小程序平台(微信/支付宝)起到了一个"桥梁"和"封装者"的作用,它们通过提供一套统一的JavaScript API(JSAPI),让开发者可以便捷、跨平台地调用手机操作系统(iOS和Android)原生的BLE能力,从而实现小程序与成千上万种BLE外设的通信。

why BLE?

小程序生态选择BLE作为其物联网通信的首选协议,是基于多方面技术和商业考量的战略性决策,其核心优势在于完美契合了移动互联网时代下"轻量级"和"场景化"的应用需求。

1. 功耗低

BLE协议设计的初衷就是为了实现极低的功耗。对于通常由纽扣电池或小型电池供电的物联网外设(如智能手环、传感器、电子秤、门锁等)而言,续航能力是决定产品成败的关键。

  • 工作模式:BLE设备采用"快速连接 -> 数据交换 -> 快速断开 -> 深度休眠"的工作模式。大部分时间里,设备都处于功耗极低的休眠状态,仅在需要时才被唤醒,一次通信的峰值电流也远低于经典蓝牙。
  • 长久续航:这种设计使得一粒纽扣电池足以支撑一个BLE设备运行数月甚至数年,极大地降低了用户的维护成本,提升了产品体验。这是经典蓝牙、Wi-Fi等高功耗协议无法比拟的。

2. iOS/安卓基本都支持

BLE的成功离不开两大主流移动操作系统------iOS和Android的鼎力支持。

  • iOS :自iOS 6和iPhone 4S起,苹果便通过其CoreBluetooth.framework框架提供了强大且稳定的BLE原生支持。
  • Android:从Android 4.3(API 18)开始,谷歌也在系统中内置了完整的BLE API。

这意味着,微信和支付宝这两个"超级App"无需自行开发复杂的蓝牙驱动或协议栈,可以直接调用操作系统提供的、经过充分验证的底层能力。这不仅大大降低了开发和维护的复杂度,也确保了在数亿台不同型号的手机上都能有一致和可靠的蓝牙通信体验。

BLE为小程序提供了什么?

小程序通过其JSAPI,将BLE协议的核心功能开放给了开发者,主要包括以下几个方面,这些能力均基于BLE的GATT(通用属性配置文件)模型。

1.设备发现与扫描 (Advertising & Scanning)

小程序可以调用wx.startBluetoothDevicesDiscoverymy.startBluetoothDevicesDiscovery等API,命令手机开始扫描周边的BLE设备。手机会监听由BLE外设发出的"广播包"(Advertising Packet),这些广播包中通常包含了设备名称、可提供的服务UUID等关键信息,从而实现设备的发现。

2. 连接建立与管理 (Connection Management)

当用户在小程序界面上选择一个设备后,小程序可以通过wx.createBLEConnectionmy.connectBLEDevice等API,向该设备发起连接请求。一旦连接建立,小程序与设备之间就形成了一个点对点的双向通信链路,可以进行更复杂的数据交换。小程序还可以监听连接状态的变化,如意外断开并进行重连。

3. 数据读、写与订阅 (GATT Client)

这是小程序与BLE设备交互的核心。在GATT模型中,设备的数据被组织成一系列的"服务(Service)"和"特征(Characteristic)"。

  • 服务(Service) :代表设备的一项功能,如"心率监测服务"。
  • 特征(Characteristic) :代表一项具体的数据点,如"心率测量值"。

小程序连接设备后,可以:

  • 读取(Read) :主动从设备获取某个特征的当前值(如获取当前体重)。
  • 写入(Write) :向设备发送指令或数据(如向智能灯写入开关指令)。
  • 订阅/通知(Notify/Indicate) :这是BLE非常重要的一个特性。小程序可以"订阅"某个特征的变化。当设备端的这个特征值发生改变时(如心率值更新),设备会主动向小程序发送一个"通知",小程序通过wx.onBLECharacteristicValueChange等事件监听器接收数据。这种机制避免了小程序需要不断轮询设备状态,进一步降低了功耗。

为什么不是其他无线协议?

理解为什么选择BLE,最好的方式是将其与其它常见的无线协议进行对比。

对比经典蓝牙 (Classic Bluetooth)

  • 功耗 与定位:经典蓝牙为持续的数据流传输(如音频)而设计,功耗远高于BLE。它更适合蓝牙耳机、音箱这类场景,而非需要长期待机的物联网设备。

  • 连接模型:经典蓝牙的配对和连接过程相对复杂和耗时,而BLE的设计目标就是快速、轻量级的连接。

  • 应用场景不符:小程序连接的绝大多数是数据量小、非实时、对功耗极其敏感的设备,这正是BLE的"甜点区"。

对比Wi-Fi / Wi-Fi Direct

  • 功耗 与复杂度:Wi-Fi的功耗是所有协议中最高的,完全不适用于电池供电的小型设备。此外,Wi-Fi的配网过程(如SSID和密码输入)对于很多没有屏幕的物联网设备来说过于复杂,用户体验差。
  • 网络依赖:Wi-Fi主要用于将设备接入互联网,通常需要一个AP(路由器)作为中介。而小程序蓝牙通信是手机与设备间的直接通信,无需外部网络设施,更加灵活。
  • 成本:Wi-Fi模块的硬件成本和开发复杂度通常也高于BLE模块。

对比NFC ( 近场 通信)

  • 通信距离:NFC的通信距离极短(通常小于10厘米),必须"触碰"才能交互。这限制了其应用场景,主要用于支付、门禁、快速配对引导等"接触式"操作。而BLE的通信距离可达数十米,提供了更大的灵活性。
  • 数据吞吐与连接模式:NFC的数据传输速率较低,且通常是一次性的数据交换。BLE则可以建立持续的连接,进行连续的数据监控和双向控制。
  • 场景互补而非替代:NFC和BLE并非完全的竞争关系。在某些场景下它们可以互补,例如,使用NFC"碰一碰"来触发BLE的配对和连接过程,简化用户的首次操作。

那么这就是本篇文章的全部内容啦,下一篇文章将带来小程序如何使用蓝牙 API...

相关推荐
我不吃饼干32 分钟前
在 React 中实现倒计时功能会有什么坑
前端·react.js
小小小小宇1 小时前
前端PerformanceObserver
前端
王者鳜錸1 小时前
PYTHON从入门到实践-18Django从零开始构建Web应用
前端·python·sqlite
拾光拾趣录1 小时前
ES6到HTTPS全链路连环拷问,99%人第3题就翻车?
前端·面试
haaaaaaarry2 小时前
Element Plus常见基础组件(二)
开发语言·前端·javascript
xyphf_和派孔明2 小时前
关于echarts的性能优化考虑
前端·性能优化·echarts
PyHaVolask2 小时前
HTML 表单进阶:用户体验优化与实战应用
前端·javascript·html·用户体验
A了LONE3 小时前
cv弹窗,退款确认弹窗
java·服务器·前端
AntBlack3 小时前
闲谈 :AI 生成视频哪家强 ,掘友们有没有推荐的工具?
前端·后端·aigc
花菜会噎住4 小时前
Vue3核心语法进阶(computed与监听)
前端·javascript·vue.js