无法使网络蓝牙与微比特配合使用以读取按钮状态

时间:2019-03-17 17:34:47

标签: bluetooth-lowenergy web-bluetooth bbc-microbit

我一直在尝试各种设置以通过Web蓝牙连接到我的微比特,但没有成功。

首先,我可以在mac / chrome和iOS / nRF连接上成功配对。据我了解,您应该首先与微比特配对(将微比特与a + b + reset置于配对模式,然后在按住a + b的同时释放复位)。在这种模式下,我可以同时连接mac / chrome和iOS / nRF。

但是,在这种模式下,我在代码中设置的所有服务(我已经尝试了makecode块和mbed c ++代码)都无法从iOS / nRF Connect中看到。我在chrome浏览器中的javascript代码崩溃了,但是没有任何信息。

因此,据此,我认为您应该设置一次配对,然后重置微比特,然后重新连接您实际编写的代码(而不是在配对模式下运行的代码)。

遗憾的是,我无法在配对模式之外进行连接。在iOS / nRF中,连接设备为灰色,连接永远等待。在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。但是我自己的程序都不起作用。

我一直试图在mac / chrome中运行的javascript代码是这样的:

<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-)。

结果:我的网络蓝牙代码正常工作。

问题仍然存在:启用配对后应该如何工作?如果配对模式没有退出,您的代码应该何时运行?

哦,我想我永远都不应该在这里问这个问题。请改为访问support.microbit.org。

0 个答案:

没有答案