4

MicroBlocks 编程案例: 扩展 OctoStudio 库

 8 months ago
source link: http://wwj718.github.io/post/%E7%BC%96%E7%A8%8B/microblocks-octostudio-bleradio/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

MicroBlocks 编程案例: 扩展 OctoStudio 库

2024-01-14

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

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

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

BLE-radio-draft.png

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

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

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

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

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

microblocks-OctoStudio-BLEradio-01.png

从这里开始 OctoStudio-Demo-hack

预编译固件

目前官方最新的固件, 用于两个板子通信经常会丢失消息(但在板子与手机之间非常稳定)。下边这个固件提高了板子之间使用 OctoStudio 通信的稳定性: esp32-fixocto-20240114, 未来会合并到官方版本里。 只需要在 Octo 消息发送端(手柄)刷这个固件,接收端可以使用官方固件。这个固件在发送 Octo 消息时会停止广播自身的信息(一旦在 MicroBlocks IDE 断开与板子的无线连接, 再次连接时会找不到板子,解决方案是将板子断电重启,或者使用有线连接)

在线刷入固件:

install-esp-firmware-from-url.png

@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 协议。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK