Nano Hash - криптовалюты, майнинг, программирование

Как использовать Meteor и плагин Cordova BLE для подключения к устройству BLE

Я пытаюсь использовать Meteor и этот плагин Cordova - https://github.com/don/cordova-plugin-ble-central — добавлен в мой проект с помощью meteor add cordova для подключения к устройству Bluetooth LE (TI Sensortag). Все, что я хочу сделать для начала, это при нажатии на ссылку подключиться к устройству и показать сообщение.

У меня есть следующий код в разделе events моего шаблона javascript.

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, что событие BLE Connect в плагине Cordova запускается, но затем не подключается. Я получаю ту же проблему при отладке на двух разных телефонах и при использовании устройства BLE, которое не является TI Sensortag, поэтому я предполагаю, что это проблема с тем, как плагин взаимодействует с Meteor (возможно, Meteor не ждет достаточно долго для успешного обратного вызова?).

Кто-нибудь успешно использовал этот плагин с Meteor или кто-нибудь может подсказать, что я делаю неправильно? Должен ли я попытаться обернуть его в пакет Meteor или каким-либо образом я могу дать плагину больше времени для ответа до того, как сработают успешные или неудачные обратные вызовы? Любая помощь приветствуется!


Ответы:


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.scan должен вызываться перед вызовом ble.connect. ble.scan приводит к тому, что LinkedHashMap в коде Android заполняется всеми обнаруженными устройствами. Только после того, как устройство появится в списке LinkedHashMap, вы сможете подключиться к нему с помощью ble.connect.

10.06.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..