WebUSB 串行支持

迄今为止,这仅在一个端口 (espressif) 和一块板 (espressif_kaluga_1) 上进行了测试。

它能做什么

如果您曾经在带有图形 LCD 显示器的平台上使用过 CircuitPython,您可能已经看到多个“控制台”在使用中(尽管 LCD 控制台是“仅输出”)。

新的编译时选项 CIRCUITPY_USB_VENDOR 启用了一个额外的“控制台”,可以与原始 (CDC) 串行控制台并行使用。

支持WebUSB标准的网页可以连接到“厂商”接口,随时激活这个WebUSB串口控制台。

您可以在任一控制台中键入,CircuitPython 输出将发送到所有活动控制台。

您可以在以下位置找到可用于测试此功能的网页示例:

https://adafruit.github.io/Adafruit_TinyUSB_Arduino/examples/webusb-serial/index.html

如何启用

更新您平台的 mpconfigboard.mk 文件以启用和禁用特定类型的 USB 接口。

CIRCUITPY_USB_HID = xxx CIRCUITPY_USB_MIDI = xxx CIRCUITPY_USB_VENDOR = xxx

至少在某些硬件平台上,USB 端点的最大数量是固定的。例如,在 ESP32S2 上,您必须仅选择上述 3 个接口之一才能启用。

原始 espressif_kaluga_1 mpconfigboard.mk 设置:

CIRCUITPY_USB_HID = 1 CIRCUITPY_USB_MIDI = 0 CIRCUITPY_USB_VENDOR = 0

改为启用 WebUSB 的设置:

CIRCUITPY_USB_HID = 0 CIRCUITPY_USB_MIDI = 0 CIRCUITPY_USB_VENDOR = 1

请注意,要在 ESP32-S2 上启用 VENDOR,我们必须放弃 HID。可能有些平台可以同时拥有这两者,甚至可以同时拥有这三者。

实施说明

CircuitPython 使用 tinyusb 库。

tinyusb 库已经支持 WebUSB 串口。tinyusb 示例已经包含一个“WebUSB 串行”示例。

Sidenote - The use of the term "vendor" instead of "WebUSB" was done to match tinyusb.

基本上,通过从 tinyusb 示例中提取代码片段并将它们放在最适合 CircuitPython 代码库的位置,将此功能移植到 CircuitPython 中。

TODO:这需要为动态 USB 描述符重新设计。