Что такое WebUSB API?

WebUSB API — это стандарт браузера, который позволяет веб-страницам взаимодействовать напрямую с USB-устройствами без установки собственных драйверов или настольных приложений. Он был представлен в Chrome 61 и предоставляет веб-сайтам контролируемый доступ с разрешением к оборудованию, такому как микроконтроллеры, платы разработки, MIDI-интерфейсы и другие USB-периферийные устройства.

В отличие от традиционного доступа к USB (который требует драйверов уровня ядра), WebUSB работает полностью в изолированной среде браузера. Пользователи должны явно предоставить разрешение для каждого устройства через встроенный в браузер выбор устройств, что гарантирует, что ни один веб-сайт не сможет скрытно читать или писать на ваше оборудование.

Описание инструмента

Этот инструмент позволяет перечислить USB-устройства, которым был предоставлен доступ к браузеру через WebUSB API. При загрузке он автоматически отображает все ранее разрешённые устройства. Вы также можете открыть встроенный в браузер выбор USB-устройств, чтобы предоставить доступ к новому подключённому устройству, или обновить список в любой момент.

Для каждого устройства инструмент отображает название продукта, производителя, ID поставщика, ID продукта, серийный номер и версию USB-протокола.

Возможности

  • Автоматически загружает ранее разрешённые USB-устройства при открытии страницы
  • Открывает встроенный в браузер выбор USB-устройств для предоставления доступа к новым устройствам
  • Отображает ID поставщика и ID продукта в стандартной шестнадцатеричной нотации (например 0x1A2B)
  • Показывает версию USB-протокола (например 2.0, 3.1) рядом с полями идентификации устройства
  • Таблица результатов с сортировкой и экспортом в CSV и JSON

Как это работает

Когда вы нажимаете Добавить устройство, браузер вызывает navigator.usb.requestDevice() и отображает системный выбор со списком подключённых USB-устройств. Если вы выберете одно, браузер сохранит разрешение для этого источника. При последующих посещениях (или после нажатия Обновить), navigator.usb.getDevices() возвращает все ранее разрешённые устройства без повторного запроса.

ID поставщика и ID продукта отображаются в 4-значном прописном шестнадцатеричном формате (например 0x04D8) — стандартном формате, используемом в реестрах USB и техническом описании.

Варианты использования

  • Разработчики встроенного ПО могут быстро подтвердить, что подключённый микроконтроллер или плата разработки (Arduino, STM32, RP2040 и т. д.) правильно определяется браузером перед написанием инструмента прошивки на основе WebUSB.
  • Разработчики веб-приложений могут убедиться, что их приложение с поддержкой WebUSB будет видеть ожидаемые поля идентификации устройства на ранних этапах прототипирования.

Ограничения

  • WebUSB поддерживается только в браузерах на основе Chromium (Chrome, Edge, Opera). Firefox и Safari не реализуют этот API.
  • Страница должна быть доставлена по HTTPS (или localhost) — WebUSB блокируется на обычных HTTP-источниках.
  • Некоторые комбинации операционной системы и браузера ограничивают доступ к определённым классам устройств (например HID, массовое хранилище) даже при наличии разрешений.
  • Этот инструмент читает только метаданные устройства; он не открывает USB-интерфейс и не передаёт данные на устройство или с устройства.