WebUSB与micro:bit
文章目录
webusb
WebUSB API在简介里说到:
WebUSB API提供了一种将USB设备服务安全地公开给Web的方法。
借此API,硬件制造商将能够为其设备构建跨平台JavaScript SDK。web平台成为调度硬件的一等公民。
硬件设备的困扰
我们从numworks说起,numworks是一个支持绘图的计算器,目标是使学习数学更容易。刷hacker news时偶然发现了这个项目,十分惊艳,numworks支持运行python,它甚至写了个自己的操作系统,这些都是开放的:epsilon
numworks 在Writing a device updater? Seriously consider WebUSB!中描述了它们为更新设备固件所遇到的麻烦,最终发现webusb是理想选择。
文章里写道numworks的目标是确保他们的设备固件可以轻松升级,为了达到目标,需要满足以下要求:
- 尽可能跨更多的平台
- 用户不必为了更新设备而安装特定软件。
- 尽可能少编写代码。代码越少,错误越少。
webusb完美地满足这些要求.在跨平台方面,webusb适用于各种设备和操作系统(Android,Windows,macOS和Linux),而且是开箱即用的
文章里有不少有趣的部分,诸如作者提到,解决方案之一是使用配有USB-to-HTTP桥接器的Web应用程序(Scratch Link和scratch3-adapter都是这种程序),numworks也使用了一段时间这个选项,但我们最终决定放弃它,原因是
- 因为无法为localhost提供有效证书
- 分发仍然很痛苦,您仍然可能需要更新网桥
这两个问题其实都有很好的解决方案,问题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 Editor和makecode近期都将支持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。
参考
- Access USB Devices on the Web
- Beta testing - Web USB
- How to upgrade the firmware on the micro:bit
- python.microbit.org/v/beta
- DAPLink v0250
- makecode webusb
- PythonEditor cn
- numworks
- vue-microbit-webusb
- microbit的webusb功能测试
- microbit webusb course
- WICG/webusb
- WebUSB API:让你的USB设备安全的接入网络
- WebUSB API
- PythonEditor webusb-beta
文章作者 种瓜
上次更新 2018-09-27