前言

前几天, @yinxi 问我 MicroBlocks 团队何时推出 BLE radio 库。 他想要使用 BLE radio 构建手柄和受控小车项目。相比于 wifi radio, BLE radio 功耗更低(手柄和小车因此会有更长的续航时间)而且可以带到户外去玩。

BLE radio 基于这样一种想法: 它像 micro:bit radio, 在无需配对的情况下, 两个板子之间广播消息来达成通信的目的。 BLE radio 与 micro:bit radio 的不同之处在于, 它支持任何有蓝牙的板子之间的通信, 即使它们采用不同的芯片。

John Maloney 之前在邮件里与我讨论了关于 BLE radio 的构想:

在 CodeLab 群里, 有用户发现 OctoStudio 库不仅可支持手机(安装 OctoStudio 软件) 与板子的通信, 也可支持两个板子之间的通信, 就像一个弱化版本的 BLE radio 。

OctoStudio 目前只支持 5 种不同的消息信号, 这是 MIT 团队出于易用性考虑刻意做出的设计,而不是因为技术限制。 这对于映射手柄的按钮来说,信号类型太少了。

通过 hack OctoStudio 库, 我们可以将信号数量扩展到 10 个, 这对于映射手柄上的按钮通常是足够的。

在 MicroBlocks 中编程的乐趣之一就是, 你不仅可以在积木层面理解系统的工作方式,而且可以随意扩展它 !

Hack

只需 hack 两处即可, 其一是下拉菜单,其二是 _OctoInit :

从这里开始 OctoStudio-Demo-hack

预编译固件

目前官方最新的固件, 用于两个板子通信经常会丢失消息(但在板子与手机之间非常稳定)。下边这个固件提高了板子之间使用 OctoStudio 通信的稳定性:

这些改进会部署到下一个版本里。

在线刷入固件:

进一步

@yinxi 还提出"多个手柄遥控不同的车"的问题, micro:bit radio 通过不同的 “广播分组” 解决这个问题。John 规划中的 BLE radio 也支持广播分组。

OctoStudio 目前还支持广播分组, 如果我们愿意的话,我们可以进一步扩展 OctoStudio 库来支持广播分组。但需要修改 vm 中代码, 关键的代码是 shape_id = deviceName.back() - ‘0’;

我们可以将广播消息的倒数第二个数字用作"分组标识"(从 0 到 9 一共也是 10 组)

目前的 OctoStudio 广播机制有 8 个字符位置是可用的, 可扩展性很不错,即使仅使用数字(10)和大小写字母(26x2),它也允许我们传递 218340105584896 种不同的信号(10+26x2 的 8 次方).

但考虑到 MIT 团队没有公开 OctoStudio 广播消息的协议细节, 并且无法知道它在未来会如何变化, John 决定在 MicroBlocks 中, 我们实现自己的 BLE radio 协议。

Simple BLE Radio

在正式开始构建 BLE Radio 之前, 我打算先按照上边的思路构建一个简单的版本。

支持最多 99 个消息通道, 以及最多 6 个字符作为广播消息。

这是预编的固件:

- 见下文

这是示例项目


提醒 : 最新版本的 MicroBlocks(1.2.54) 已经支持 Simple BLE Radio (刷入标准固件即可)。 这是 MicroBlocks 的开发方式: 试验性的新功能会通过特定固件推出,供爱好者尝鲜。一旦稳定下来,就努力合并到默认固件里,以开箱可用的易用性提供给所有人.