Не удается заставить веб-Bluetooth работать с микробитом, чтобы прочитать состояние кнопки - PullRequest
0 голосов
/ 17 марта 2019

Я пробовал различные настройки для подключения к своему микробиту через веб-Bluetooth, но это не сработало.

Прежде всего, я могу успешно выполнить сопряжение как на Mac / Chrome, так и на iOS / nRF.,Из того, что я понимаю, вы должны спариться с микробитом вначале (переведите микробит в режим сопряжения со сбросом + b +, затем отпустите сброс, удерживая + b).В этом режиме я могу подключиться как к Mac / Chrome, так и к iOS / nRF.

Однако в этом режиме ни одна из служб, которые я настроил в своем коде (я пробовал и блоки makecode, и mbedкод c ++) видны из iOS / nRF Connect.Мой javascript-код в chrome просто падает с тупым «DOMException» без какой-либо информации.

Итак, я понял, что вы должны настроить пару раз, затем сбросить микробит и восстановить соединение с кодом, который вына самом деле написал (не кусок кода, который работает в режиме сопряжения).

К сожалению, я не могу подключиться за пределами режима сопряжения.В iOS / nRF connect устройство серое, connect ждет вечно.В mac / chrome диалог выбора устройства долгое время остается пустым.После этого я могу внезапно выбрать микробит, но код не подключается.

Так как мне подключиться к устройству, если оно не находится в режиме сопряжения?Или должен ли режим сопряжения запускать мою программу после успешного сопряжения, чего не происходит?

Я использовал эту программу https://makecode.microbit.org/v0/51291-94272-66943-05638, с которой связана ссылка: https://support.microbit.org/support/solutions/articles/19000026073-how-to-re-instate-bluetooth-after-previously-using-micropython. Нони одна из моих собственных программ тоже не работает.

Код JavaScript, который я пытался запустить в mac / chrome, таков:

<html>
<head>
<script>
  const buttonService = 'E95D9882-251D-470A-A062-FA1922DFA9A8'.toLowerCase();
  const eventService = 'e95d93af-251d-470a-a062-fa1922dfa9a8';
  const buttonACharacteristic = 'E95DDA90-251D-470A-A062-FA1922DFA9A8'.toLowerCase();
function scanBluetooth() {
  navigator.bluetooth.requestDevice({
    // acceptAllDevices: true,
    filters: [{
      name: 'BBC micro:bit [zazet]'
    }],
    // optionalServices: ['battery_service']
    optionalServices: [buttonService]
    // optionalServices: [eventService]
  })
  .then(device => {
    console.log(device);
    return device.gatt.connect();
  })
  .then(server => {
    console.log("server");
    console.log(server);
    return server.getPrimaryService(buttonService);
    // return server.getPrimaryService(eventService);
    // return server.getPrimaryServices();
  })
  .then(service => {
    console.log("service");
    console.log(service);
    // return service.getCharacteristic('E95DDA90-251D-470A-A062-FA1922DFA9A8'.toLowerCase());
    return service.getCharacteristic(buttonACharacteristic);
  })
  .then(characteristic => {
    console.log('characteristic');
    setInterval(() => {
      characteristic.readValue()
        .then(value => console.log('value', value))
    }, 500);
  })
  .catch(error => { console.log(error); });
}
</script>
</head>
<body>

</body>
</html>

Редактировать: Обнаружен обходной путь

Хорошо, так как сопряжение не работает, я попытался полностью отключить сопряжение (настройки в интерфейсе makecode, также проверьте https://support.microbit.org/support/solutions/articles/19000080745-what-are-the-different-bluetooth-pairing-modes-).

Результат: мой веб-код Bluetooth просто работает.

Остается вопрос: как это должно работать с включенным сопряжением? Когда ваш код должен работать, если режим сопряжения не выходит?

О, и я полагаю, что я никогда не задавал здесь вопрос;пожалуйста, перейдите на support.microbit.org.

...