【问题标题】:How do I use Meteor and a Cordova BLE plugin to connect to a BLE device如何使用 Meteor 和 Cordova BLE 插件连接到 BLE 设备
【发布时间】:2015-06-08 11:01:21
【问题描述】:

我正在尝试使用 Meteor 和这个 Cordova 插件 -https://github.com/don/cordova-plugin-ble-central - 使用 meteor add cordova 添加到我的项目中,以便连接到蓝牙 LE 设备 (TI Sensortag)。我首先要做的就是在单击链接时连接到设备并显示一条消息。

我的模板 javascript 的 events 部分中有以下代码。

Template.measure.events({'click [data-action=scan-connect-stream]':
  function(event, template) {
    event.preventDefault();
    if (Meteor.isCordova) {
      Meteor.startup(function () {
          ble.connect('24:09:00:DE:00:42', 
                function(){
                    alert('Connect success');
                    return;
                }, 
                function(){
                    alert('Connect failed');
                    return;
                });
            });
        }
    }
});

我的问题是,有时代码可以正常工作并且我收到“连接成功”警报,但通常它无法连接并显示“连接失败”警报。在我在成功和失败回调中添加return 语句之前,它根本不起作用。

我正在 Android 设备 (meteor run android-device --verbose) 上对此进行调试,并且可以通过 adb logcat 看到 Cordova 插件中的 BLE Con​​nect 事件正在触发,但随后未连接。我在两部不同的手机上调试时遇到了同样的问题,并且在使用不是 TI Sensortag 的 BLE 设备时,所以我猜这是插件与 Meteor 交互方式的问题(也许 Meteor 等待的时间不够长成功回调?)。

有没有人在 Meteor 上成功使用过这个插件,或者任何人都可以提供任何线索来说明我做错了什么?我应该尝试将它包装在 Meteor 包中,还是有什么方法可以让插件在成功或失败回调触发之前有更多时间响应?任何帮助将不胜感激!

【问题讨论】:

    标签: meteor bluetooth-lowenergy cordova-plugins


    【解决方案1】:

    对于任何遇到类似问题的人来说,这就是为我排序的原因。我将ble.connect 调用放入ble.scan 函数的成功回调中。不知道为什么,但先扫描几秒钟就可以了。

      Template.measure.events({
        'click [data-action=scan-connect-stream]': function(event, template) {
          event.preventDefault();
          if (Meteor.isCordova) {
            Meteor.startup(function () {
              device_id = '24:09:00:DE:00:42';
              ble.scan([], 5,
                  function(peripherals){
                    connectDevice(device_id);
                  },
                  function(){
                     alert('No devices found');
                  }
                );
            });
          }
        }
      });
    
    
      var connectDevice = function (device_id) {
            ble.connect(device_id,
                            function(){
                              alert('Device ' + device_id + ' connnected');
                              },
                            function(){
                              alert('Couldn\'t connect to device ' + device_id);
                              });
      }
    

    如果有人能解释为什么 ble.connect 不能单独工作,那就太好了!

    编辑:查看 Android 代码,插件的设计方式似乎是在调用 ble.connect 之前必须调用 ble.scanble.scan 导致 Android 代码中的 LinkedHashMap 填充任何发现的设备。只有当设备在LinkedHashMap 中列出后,您才能使用ble.connect 连接到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2015-05-07
      相关资源
      最近更新 更多