#javascript #angular #progressive-web-apps #web-bluetooth
Вопрос:
Прямо сейчас я разрабатываю веб-сайт, в котором есть возможность подключения термопринтера. Я использую angular framework и успешно подключаю термопринтер к USB с помощью библиотеки ng-thermal-printer
. Но я хочу, чтобы мой Интернет также мог подключать термопринтер через веб-Bluetooth, который является BLE (Bluetooth с низким энергопотреблением). Насколько я знаю, BLE имеет спецификацию в терминах ГАТТ и содержит в себе услуги и характеристики.
Прогресс, которого я достиг до сих пор, я могу подключить и отправить значение на устройство термопринтера в Сервисе и Характеристике, скажем, Сервис с UUID AS и характеристиками с UUID AC, используя свой телефон Android с помощью приложения под названием nRF Connect. Целевое обслуживание КАК и отправка шестнадцатеричного значения в charateristic AC заставляют меня успешно печатать что-то на термобумаге.
Но есть одна проблема. После того, как вы узнаете правильную услугу и характеристику. Я реализовал это в своем проекте. Но моя консоль браузера chrome показала ошибку:
- Origin не имеет права доступа к каким-либо сервисам… и он сказал мне добавить дополнительные службы, когда requestiDevice()
- После того, как я добавил службу, как в свойствах optionalServices, консоль показала исключение DOMException: Сбой подключения по неизвестной причине. Ошибки проявлялись как в chrome PC, так и в chrome Android.
nb:
- Я включил экспериментальные функции веб-платформы в chrome
- Я включил Использование новой серверной части разрешений для веб-Bluetooth в Chrome
- Я включил Разрешить недопустимые сертификаты для ресурсов, загруженных с локального хоста. на хроме
- Я включил Включить новый сервер USB в chrome
- Я использовал https.
Дополнительный вопрос. отличается ли соединение Bluetooth, используемое приложением nRF Connect, от BLE? если да, то почему он отображает услуги и характеристики?
Ответ №1:
Я бы рекомендовал вам попробовать отправить эти шестнадцатеричные значения непосредственно со about:bluetooth-internals
страницы и посмотреть, сможете ли вы воспроизвести ошибку подключения и оттуда. Видишь https://web.dev/bluetooth/#tips
Если это так, проверьте https://www.chromium.org/developers/how-tos/file-web-bluetooth-bugs чтобы узнать, как правильно подать сообщение об ошибке chromium, чтобы команда могла устранить основную проблему.
Если нет, не могли бы вы поделиться своим кодом JS, чтобы мы могли помочь вам диагностировать, что может быть не так в вашем коде?
Комментарии:
1. это было исправлено. спасибо, что нашли время ответить на мой вопрос.
Ответ №2:
Я исправил эту проблему.
Есть 2 устройства, которые я использую, мой компьютер и мой телефон Android. На самом деле, Bluetooth моего компьютера не поддерживает BLE. Вот почему я продолжаю бороться за отладку, так как мой chrome для рабочего стола продолжает не отвечать после попытки подключить мой термопринтер.
В принципе, ошибка номер 2 появляется из-за того, что я отправил кодированное строковое значение, а не значение Uint8Array.
В конце концов, я использую 2 веб-API. веб-API Bluetooth для подключения моего PWA к термопринтеру с мобильного и веб-последовательный API для подключения моего PWA к термопринтеру с рабочего стола. Библиотека, ng-thermal-printer
, хороша для моего проекта. Мне просто нужно продлить драйвер.
Комментарии:
1. интересно, как тебе это удалось
2. @Markus Я использую только эту библиотеку. Последовательный для устройства, не являющегося ble, и ble для устройства ble. потому что в моем случае, если я использую ble для устройств, отличных от ble, edge и chrome зависают