11.1. 为什么使用 Bluetooth

网络让摄像头接入 Wi-Fi 或以太网,从而能够与该网络可触及的任何设备通信。可以是走廊那头的笔记本电脑,可以是另一个大陆上的服务器,也可以是在蜂窝网络中漫游的手机。但这种触达能力是有前提的。网络必须存在。必须有接入点在覆盖范围内,必须能拿到某些凭据,必须有路由器愿意为摄像头分配地址。摄像头还必须让无线电(或以太网端口)保持足够的运行强度来维持链路。

Bluetooth 适用于相反的情形——近距离、无基础设施、低功耗。同一房间内的摄像头与手机通过直接的无线链路交换数据,中间没有任何中介。没有接入点、没有路由器,双方都无需接入任何网络。无线电在短暂的活动突发之间大部分时间处于关闭状态,因此一块在 Wi-Fi 下勉强撑过一天的电池,可以运行数月之久。

11.1.1. Bluetooth 何时是正确的工具

在摄像头上的常见情形:

  • 手机或平板与摄像头配对。 附近的用户在手机上打开应用,配置摄像头、读取其状态或下载结果——无需先把两台设备接入同一个 Wi-Fi 网络。大多数手机原生支持 Bluetooth Low Energy,因此用户体验是“打开应用,点击连接”,而不是“先加入这个网络”。

  • 可穿戴设备或传感器向摄像头汇报。 心率带、温度计、信标、接触开关——它们都是围绕 Bluetooth Low Energy 设计的电池供电设备。摄像头作为客户端连接它们,读取其数值,并将数据融入它正在做的其他工作中。

  • 摄像头发布一个小型状态信息流。 电池电量、最近检测到的物体、帧率——一些数值,向附近任何想读取它们的设备公开。配对是可选的;对于非敏感数据,摄像头可以直接广播这些数值,完全无需建立连接。

  • 两台摄像头(或一台摄像头和一个微控制器)在无网络的情况下共享数据。 两端彼此都认识;两端都在同一栋楼里;没有理由让这些字节上传到云端再下传回来,仅仅为了横跨一个房间。

11.1.2. 网络何时反而是正确的工具

在以下几种常见情形中,Bluetooth 的取舍是错误的:

  • 对端超出范围。 Bluetooth Low Energy 在实际使用中只有几米,在自由空间中最多也就几十米。任何跨越楼宇、跨越城镇或跨越互联网的通信都需要 Wi-Fi 或以太网。

  • 高带宽链路。 Bluetooth Low Energy 实际上只能提供每秒几十到几百千比特的速率。串流图像帧或任何有意义的视频都需要 Wi-Fi。

  • 基于共享基础设施的多对多群组通信。 一屋子设备全都与同一台服务器通信,或者一组摄像头组成网状结构共享结果——这种模式正是 IP 网络所擅长的。

11.1.3. Low Energy,而非经典模式

日常用语中的“Bluetooth”涵盖了两套截然不同的无线电协议栈。经典 Bluetooth(Classic Bluetooth)是用于无线耳机、车载音频和键鼠连接的那一套:一种语音与音频级别的无线电、相对复杂的协议栈,以及明显的功耗。Bluetooth Low Energy(BLE)是一种独立的、更新的协议,它与经典模式共享品牌名称和 2.4 GHz 频段,但其余几乎毫无共同之处。它围绕短暂、不频繁的无线电突发设计,以将平均功耗压到极低,并采用键值数据模型而非串流音频。

摄像头上的 MicroPython 仅支持 BLE。经典 Bluetooth 完全不在 API 范围之内。下文中的“Bluetooth”均指 BLE。

11.1.4. 相对于网络模型有何变化

BLE 拥有与网络相同的五层协议栈,但上层的行为有所不同:

  • 不存在“打开套接字并发送字节”这样的抽象。BLE 围绕一个小型的 键值数据库 构建,由一方托管,另一方读取、写入或订阅。摄像头发布带名称的数值(电池电量、温度、命令寄存器);对端读取或监视它们。

  • 不存在按名称寻址。设备通过 广播(advertising)一段描述自身身份的短广播来标识自己;对端 扫描(scan)这些广播并选择其一进行连接。

  • 无线电大部分时间处于空闲状态。两端在连接时约定唤醒并通信的频率。在两次通信之间,双方都重新进入休眠。

正是这三点差异,使得 BLE API 的其余部分偏离了套接字模型。