• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLE модули TB-04/TB-03F (TLSR8253F512)

вот вам информация про ваше заблуждение: BLE тут и не пахнет. Мечтатель Вы наш.
А какое отношение этот проект имеет к системе о которой я написал?
Вот линк на тех ребят. https://www.quuppa.com/overview/
"As the Quuppa system is interoperable with Bluetooth® wireless technology, it can track any Bluetooth® enabled device that is transmitting a Quuppa specified radio packet. For example, smartphones can be made trackable just by adding a few lines of code to the application.
Quuppa Tag IDs can also be read by Bluetooth devices without the help of Locators. For example, a doctor could read a patient’s ID Tag directly using a smartphone to request critical information from a cloud service.... " (c) детальное описание технологии по тому же линку.
 
В этот лимит вписывается только система на китай-BLE чипах.
Значит вернемся к нашим чипам :) Вопрос тут возник. Пытаюсь из флаттера коннектится к TB03 прошитым вашим adScannerTrg
Пытаюсь получить список нотификаций, аналогичный тем что выводятся у вас на страничке по нажатию кнопки Start Scanner
Коннет происходит, сервис и характеристику получаю. Даже один раз выскакивает Notification ( повторно не появляется), но получить значение в нем не получается, падаем по ошибке записи в Description. Error и Done при этом не выводится.
Что я делаю не так? Понимаю что язык для вас скорее всего незнакомый, но логика действий то хоть у меня правильная? Может я вообще не ту характеристику дергаю?

Код:
flutterBlue.scanResults.listen((results) async {
      for (ScanResult r in results) {
        if (r.device.id == DevId) {
          flutterBlue.stopScan();
          await r.device.connect();
          var services = await r.device.discoverServices();
          var advService = services.firstWhere(
              (e) => e.uuid == Guid('00001f10-0000-1000-8000-00805f9b34fb'));
          var advCh = advService.characteristics.firstWhere((element) =>
              element.uuid == Guid('00001f11-0000-1000-8000-00805f9b34fb'));
          await advCh.setNotifyValue(true);
          advCh.value.listen(
            (value) {
              _incrementCounter();
              print('Notification');
            },
            onError: (e) => print('Error'),
            onDone: () => print('Done '),
          );
        }
      }
    });
 
Кусочек лога вдогонку
Код:
D/BluetoothGatt(25067): onConnectionUpdated() - Device=A4:C1:38:67:7D:4C interval=9 latency=99 timeout=2000 status=0
D/BluetoothGatt(25067): setCharacteristicNotification() - uuid: 00001f11-0000-1000-8000-00805f9b34fb enable: true
D/FlutterBluePlugin(25067): [onDescriptorWrite] uuid: 00002902-0000-1000-8000-00805f9b34fb status: 0
I/flutter (25067): Notification []
 

pvvx

Активный участник сообщества
Скорее всего нарушена последовательность исполнения команд.
Пробуйте синхронизированный вызов setNotifyValue
 

pvvx

Активный участник сообщества
Возможно не выставлен размер MTU....
Используется
#define MTU_DATA_SIZE 63
оно по умолчанию у многих адаптеров
Реальные пакеты до 38 байт (31 байт из рекламы + mac + ...)
 
Последнее редактирование:

pvvx

Активный участник сообщества
В flutter_blue куча приколов и разгребать их я не хочу, т.к. он для iOS.
 

pvvx

Активный участник сообщества
О` нашел как избавиться от iOS.
Note that iOS will not allow requests of MTU size, and will always try to negotiate the highest possible MTU (iOS supports up to MTU size 185)
Необходимо ставить в устройстве MTU 256 и более :)
С ограничениями таймингов там тоже всё в таком-же духе. Т.е. спецификация BLE в iOS не поддерживается.
 
Вообще то он кроссплатформенный и под андроид и под IOS. По крайней мере я исключительно под андроид пишу.
Речь ведь об этом? А если учесть наличие исходников которые можно форкнуть и исправить под себя, не особенно заморачиваясь с совместимостью для IOS, то особых проблем вообще быть не должно. :)
 

volaltd

Member
Речь ведь об этом? А если учесть наличие исходников которые можно форкнуть и исправить под себя, не особенно заморачиваясь с совместимостью для IOS, то особых проблем вообще быть не должно. :)
Где-то с года два назад ткнули меня во флуттер и хотели нагрузить разработкой приложения Android/iOS на нем. Нашлась поучительная история с каким-то математиком, разрабатывавшем софтину на котлине, поддавшегося всеобщему восторгу и несколько недель преобразовывашего свой код на эту новомодную и хорошо рекламируемую технологию. По готовности на вопрос почему на Google Nexus 7 2013 он получает 0.5FPS ничего вразумительного никто сказать не смог. А так да, проблем вообще быть не должно, но подкралось неожиданно откуда не ждали :))
 
Возможно не выставлен размер MTU....
Вроде запустил, но как-то нестабильно. то застревает на первом нотификейшене то лупит одно за другим как часы.
По умолчанию MTU = 20, по крайней мере такое число выдается функцией
final mtu = await _curDev!.mtu.first;

Вот только что все работало, а сейчас опять молчит как рыба об лед.

C-like:
void _onNewData(value) {

    print('======= new notification $value');

  }

  BluetoothDevice? lastDev;

  void _onScanResult(results) async {

    for (ScanResult r in results) {

      // print('${r.device.id}');

      if (r.device.name.contains('BLE_67')) {

        print(' ================ Scan found  $r');

        await flutterBlue.stopScan();

        if (lastDev != null) {

          await lastDev!.disconnect();

        }

        r.device.connect().then((value) async {

          lastDev = r.device;

          //_curDev!.state.listen(_onChangeConnectState);

          final mtu = await r.device.mtu.first;

          print('Default mtu = $mtu');

          // await _curDev!.requestMtu(20);

          r.device.discoverServices().then((services) {

            print('end discover service');

            var _advService1 = services.firstWhere(

                (e) => e.uuid == Guid('00001f10-0000-1000-8000-00805f9b34fb'));

            print('Service - $_advService1');

            var _advCh1 = _advService1.characteristics.firstWhere((element) =>

                element.uuid == Guid('00001f11-0000-1000-8000-00805f9b34fb'));

            print('Advert - $_advCh1');

            _advCh1.setNotifyValue(true).then((value) {

              print('set notify');

              _advCh1.value.listen(

                _onNewData,

                onError: (e) => print('Error'),

                onDone: () => print('Done '),

              );

            });

          });

        });

      }

    }

    print('end check scan result');

  }

Код:
/BluetoothGatt(18648): onClientConnectionState() - status=0 clientIf=9 device=A4:C1:38:67:7D:4C
D/FlutterBluePlugin(18648): [onConnectionStateChange] status: 0 newState: 2
I/flutter (18648): Default mtu = 20
D/BluetoothManager(18648): getConnectionState()
D/BluetoothManager(18648): getConnectedDevices
D/BluetoothGatt(18648): discoverServices() - device: A4:C1:38:67:7D:4C
D/BluetoothGatt(18648): onConnectionUpdated() - Device=A4:C1:38:67:7D:4C interval=6 latency=0 timeout=500 status=0
D/BluetoothGatt(18648): onSearchComplete() = Device=A4:C1:38:67:7D:4C Status=0
D/FlutterBluePlugin(18648): [onServicesDiscovered] count: 7 status: 0
D/BluetoothGatt(18648): onConnectionUpdated() - Device=A4:C1:38:67:7D:4C interval=9 latency=99 timeout=2000 status=0
I/flutter (18648): end discover service
I/flutter (18648): Service - BluetoothService{uuid: 00001f10-0000-1000-8000-00805f9b34fb, deviceId: A4:C1:38:67:7D:4C, isPrimary: true, characteristics: [BluetoothCharacteristic{uuid: 00001f11-0000-1000-8000-00805f9b34fb, deviceId: A4:C1:38:67:7D:4C, serviceUuid: 00001f10-0000-1000-8000-00805f9b34fb, secondaryServiceUuid: null, properties: CharacteristicProperties{broadcast: false, read: true, writeWithoutResponse: false, write: false, notify: true, indicate: false, authenticatedSignedWrites: false, extendedProperties: false, notifyEncryptionRequired: false, indicateEncryptionRequired: false}, descriptors: [BluetoothDescriptor{uuid: 00002902-0000-1000-8000-00805f9b34fb, deviceId: A4:C1:38:67:7D:4C, serviceUuid: 00001f10-0000-1000-8000-00805f9b34fb, characteristicUuid: 00001f11-0000-1000-8000-00805f9b34fb, value: []}, BluetoothDescriptor{uuid: 00002901-0000-1000-8000-00805f9b34fb, deviceId: A4:C1:38:67:7D:4C, serviceUuid: 00001f10-0000-1000-8000-00805f9b34fb, characteristicUuid: 00001f11-0000-1000-8000-00805f9b34fb, value: []}]
I/flutter (18648): Advert - BluetoothCharacteristic{uuid: 00001f11-0000-1000-8000-00805f9b34fb, deviceId: A4:C1:38:67:7D:4C, serviceUuid: 00001f10-0000-1000-8000-00805f9b34fb, secondaryServiceUuid: null, properties: CharacteristicProperties{broadcast: false, read: true, writeWithoutResponse: false, write: false, notify: true, indicate: false, authenticatedSignedWrites: false, extendedProperties: false, notifyEncryptionRequired: false, indicateEncryptionRequired: false}, descriptors: [BluetoothDescriptor{uuid: 00002902-0000-1000-8000-00805f9b34fb, deviceId: A4:C1:38:67:7D:4C, serviceUuid: 00001f10-0000-1000-8000-00805f9b34fb, characteristicUuid: 00001f11-0000-1000-8000-00805f9b34fb, value: []}, BluetoothDescriptor{uuid: 00002901-0000-1000-8000-00805f9b34fb, deviceId: A4:C1:38:67:7D:4C, serviceUuid: 00001f10-0000-1000-8000-00805f9b34fb, characteristicUuid: 00001f11-0000-1000-8000-00805f9b34fb, value: []}], value: []
D/BluetoothGatt(18648): setCharacteristicNotification() - uuid: 00001f11-0000-1000-8000-00805f9b34fb enable: true
D/FlutterBluePlugin(18648): [onDescriptorWrite] uuid: 00002902-0000-1000-8000-00805f9b34fb status: 0
I/flutter (18648): set notify
I/flutter (18648): ======= new notification []
 

Вложения

Нашлась поучительная история с каким-то математиком,
Ага тоже ее слышал. :) Flutter - это ардуино от программирования. Язык быстрого прототипирования и средство для новичков которым нужен быстрый результат.
В силу того что многие вещи требуют ручной доводки по месту, ненавязчиво вовлекает новичка изучать то, что находится у него под капотом. :)
 

nikolz

Well-known member
А какое отношение этот проект имеет к системе о которой я написал?
Вот линк на тех ребят. https://www.quuppa.com/overview/
"As the Quuppa system is interoperable with Bluetooth® wireless technology, it can track any Bluetooth® enabled device that is transmitting a Quuppa specified radio packet. For example, smartphones can be made trackable just by adding a few lines of code to the application.
Quuppa Tag IDs can also be read by Bluetooth devices without the help of Locators. For example, a doctor could read a patient’s ID Tag directly using a smartphone to request critical information from a cloud service.... " (c) детальное описание технологии по тому же линку.
Ну Вы у них это читали:
Системы Quuppa могут достигать точности около 0,5 м (2 фута) или “субметра”,
используя уникальные методы пеленгации, основанные на угловых измерениях и запатентованном алгоритме, который оттачивался командой основателей более 15 лет.
---------------------
Одно только упоминание про 15 лет уже напоминает лохотрон.
А 0.5 метра этого Вам достаточно?
 

nikolz

Well-known member
Сколько выставить? Ставил 38 вообще нотификашины не срабатывают
Вы хотя бы разберитесь как измеряется уровень (мощность) сигнала на приемной стороне и какое время интегрирования при этом используется.
потом будете с pvvx дальше мечтать .
 

nikolz

Well-known member
вот еще инфа из Вашей ссылки:
Real-time-это гибкая концепция.
Для стандартной системы Quuppa это означает частоту обновления местоположения до 50 Гц и задержку до 100 мс.
Прикольно, обновляете через 20 ms+задержка еще 100.

-------------------------
Quuppa также может быть настроена на использование собственных каналов, на которых метки Quuppa могут быть настроены на передачу с частотой до 50 Гц.
А это для pvvx - cкока скока это микросекунд?

И в итоге:
Например, при отслеживании быстро меняющихся видов спорта.
Тогда хорошо знать, что сама система Quuppa не имеет никаких ограничений (как говорят - Остапа понесло, но не далеко),
и тег может быть настроен на передачу, например, 200 Гц или даже выше, а задержка может составлять 20 мс или меньше.
 

nikolz

Well-known member
Вот еще информация к размышлению с сайта этой компании:
В итоге с погрешностью 1 метр время измерения 1 секунда (это из картинки)
-----------------------
Quuppa – частная независимая компания,
в которой работают более 55 человек из 16 национальностей,
штаб-квартира которой находится в Эспоо, Финляндия, а офисы-в Вашингтоне (США), Сиднее (AUS), Шанхае и Шэньчжэне (CN).

Quuppa является ведущим поставщиком систем определения местоположения в реальном времени (RTLS)
с более чем 3000 развертываниями в более чем 55 странах и более чем 200 партнерами по всему миру.
-------------------

Вопросы к знатокам
Сколько человек в каждой штаб квартире?
Сколько человек одной национальности?
За сколько лет 55 человек развернули 3000 систем по всему миру?
 

nikolz

Well-known member
на самом деле эти ребята обыкновенные барыги - торгуют чужими разработками.
очень воняет сетевым маркетингом.
 
Одно только упоминание про 15 лет уже напоминает лохотрон
Вы что, всерьез судите о конечном продукте по рекламным материалам на их сайте? Я лично в свое время написал весь контент для сайта стоматологической клиники. При этом нифига не разбираясь в теме, даже пару ошибок нашел в чужих маркетинговых материалах :)
А 0.5 метра этого Вам достаточно?
Пока достаточно. Будет не хватать, увеличу число приемников. ну или и вовсе откажусь от понятия "маячок" и сделаю каждый из "маячков" одновременно и приемником для своих соседей.
Этакий пеленгационный mesh. Например искомый маячок только что прошел между двух других маячков и направился в сторону третьего. Рассчитаете быстродействие программной интерполяции определения его предполагаемого местонахождения?
Думаю эти ребята что-то подобное и сделали.
очень воняет сетевым маркетингом.
Да наплевать чем там они занимаются и чьи разработки продают, я у них ничего покупать не собираюсь. Судя по ролику с хоккеистами BLE вполне справляется с расчетом их местоположения. ЧиТД
 

pvvx

Активный участник сообщества
Сколько выставить? Ставил 38 вообще нотификашины не срабатывают
Используется
#define MTU_DATA_SIZE 63
оно по умолчанию у многих адаптеров
Реальные пакеты до 38 байт (31 байт из рекламы + mac + ...)
 
Сверху Снизу