webusb

WebUSB API在简介里说到:

WebUSB API提供了一种将USB设备服务安全地公开给Web的方法。

借此API,硬件制造商将能够为其设备构建跨平台JavaScript SDK。web平台成为调度硬件的一等公民。

硬件设备的困扰

我们从numworks说起,numworks是一个支持绘图的计算器,目标是使学习数学更容易。刷hacker news时偶然发现了这个项目,十分惊艳,numworks支持运行python,它甚至写了个自己的操作系统,这些都是开放的:epsilon

numworksWriting a device updater? Seriously consider WebUSB!中描述了它们为更新设备固件所遇到的麻烦,最终发现webusb是理想选择。

文章里写道numworks的目标是确保他们的设备固件可以轻松升级,为了达到目标,需要满足以下要求:

  • 尽可能跨更多的平台
  • 用户不必为了更新设备而安装特定软件。
  • 尽可能少编写代码。代码越少,错误越少。

webusb完美地满足这些要求.在跨平台方面,webusb适用于各种设备和操作系统(Android,Windows,macOS和Linux),而且是开箱即用的

文章里有不少有趣的部分,诸如作者提到,解决方案之一是使用配有USB-to-HTTP桥接器的Web应用程序(Scratch Link和scratch3-adapter都是这种程序),numworks也使用了一段时间这个选项,但我们最终决定放弃它,原因是

  1. 因为无法为localhost提供有效证书
  2. 分发仍然很痛苦,您仍然可能需要更新网桥

这两个问题其实都有很好的解决方案,问题1,我在已经给出了解决方案:本地https/wss服务与SSL安全证书,问题2的理想解决方案是fbs

numworks的案例很好地给出了选择WebUSB更新固件的理由,WebUSB的应用场景当然远不只是更新固件。下边写出一些WebUSB API中提到的使用场景

使用场景

教育设备

基于Web的软件交付模型适合于教育教育领域,因为它们可以快速加载到任何计算机上,而无需考虑平台兼容性。平台的兼容性在教育领域产生的影响可能远远超出你的预期,尤其是国内。

基于Web的硬件API,允许将设备的支持直接构建到现有的在线课程材料中,从而提供无缝的连接体验。而不会增加实施成本,诸如在每台电脑安装一个客户端软件。

学生可利用在线开发人员工具编写和上传他们的代码,老师可以随时查阅,管理和干预。因为数据都在线上,这就提供了AI介入的可能。

此外学生的作品可以在线分享,可以据此构建在线社区。

当设备可以被接入web,那么我们就可以将大量的web玩法引入到硬件教育中。诸如远程指导,协同编程等等

我相信web bluetooth和webusb是教育领域的未来。

网络驱动程序

Web的可组合性,可能发展出生态系统。

以3D打印机为例,想象一下托管3D模型的网站希望将打印直接集成到他们的页面中。目前,Web支持2D打印(普通打印机),但3D版本还没有API。如果使用WebUSB API将数据从网站发送到其打印机,则站点可以使用这些页面来集成对硬件的支持,就像将嵌入式地图等功能一样,可以添加到许多现有站点中。成为一种通用积木。

设备更新和诊断

虽然蓝牙等无线协议通常是消费级设备的更方便选择,但USB端口不断扩散,因为它们是电源传输的简单解决方案,并且可以在设备不工作时作为最后的连接方式。

设备制造商只要将用户引导到自己的网站上,就可以为用户提供在线诊断。

文档

Google的这篇文档很赞: Access USB Devices on the Web

文档里提到chrome内置的一些调试工具:

  • chrome://device-log
  • chrome://usb-internals

使用webusb与microbit通信

microbit是个为编程教育而生的硬件,对microbit不了解的小伙伴,可以参考我之前的文章:micro:bit使用笔记

microbit官方推荐的两个编程工具:Python Editormakecode近期都将支持webusb,这当然是个明智之举,将进一步降低学习者的门槛。

相关文档在: Beta testing - Web USB

在此,我做个操作纪录.

怎么做

为了让microbit能使用webusb,我们首先需要将它的固件更新到0250,我这里直接给出固件,大家烧录即可。

烧入方式为: 按住microbit背后的复位按钮,然后连上电脑,电脑将出现名为MAINTENANCE的设备,把如下固件:0250_kl26z_microbit_0x8000.hex拖入MAINTENANCE即可。

之后你就可以在线为microbit编程了.

有两点值得一提,其一是烧录的过程比较慢,得10s+。原因是每回都得烧录完整的固件(500K左右)

其二是,你可以在线使用REPL功能,它甚至支持自动补全,REPL的另一个好处是,它提供实时反馈!此外它的速度很快!因为每次只有代码文本在阐述,几个字节而已。

所以我目前在进行的工作是,将REPL的管道分离出来。供在线课程使用。我希望提供即时的反馈,关于理由我之前在两种硬件编程风格的比较论述过。

firialabs是一门microbit的课程,它使用webusb来建立网页与microbit的连接。

注意⚠️

WebUSB已被收录在Chrome 61中,在这之后的版本都可以使用,iOS设备不受支持,由于chrome对XP只支持到49,所以XP无法使用WebUSB。

参考