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

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

pvvx

Активный участник сообщества
Вот тут перечислены самые идиотские параметры таймингов для соединения и рекламы, подобранные чтобы исключить из применения Bluetooth LE.
Для Bluetooth с питанием от сети это может сгодится, но не для LE ...
Яблоко всегда в своем репертуаре и пытается навязать свои санкции на спецификацию Bluetooth LE :)
(Но реальная причина в том, что устройства от Apple всегда используют устаревшие чипы...)
 

pvvx

Активный участник сообщества
Тайминги для соединения BLE это непреодолимый бардак для непосвященных.
Мастер лезет к устройству со своими таймингами соединения. У устройства есть даже типовой сервис UUID с указанием таймингов соединения по умолчанию. Но мастеру на них плевать. Он лезет с установками, которые написал ему программер из Индии или ещё кто похуже - к примеру из Apple... Если писал китаец, то некоторые адаптеры запоминают последние согласованные тайминги с последнего соединения. Но отбрасывают Latency (=0) и корректируют connection interval в диапазоне min 20 max 60 ms, если в последнем соединение было что-то совсем странное.
После соединения на каком-то connection interval, если оно не нравится устройству или хотим конкретики, то устройство передает запрос на согласование новых параметров таймингов соединения.
Мастер должен согласиться, а если ему не нравиться - отказаться :) И тут бывают ветвления - устройство пробует убедить мастера на другие параметры, но можно просто послать и отключиться - там явно мастер тупой, от Apple....
Так-же и мастер может запросить сменить connection intervals после соединения, но это прогрраммеры с верой от Arduino не знают и не используют. А если и используют, то загоняют на предел, чтобы батарейка у устройства села через несколько минут уже в этом сеансе... :)

Код:
#define DEFAULT_CONN_PARAM CONN_INTERVAL_10MS, CONN_INTERVAL_30MS, 0, CONN_TIMEOUT_1S
extern gap_periConnectParams_t my_periConnParameters;
#define UPDATE_CONN_PARAM CONN_INTERVAL_10MS, CONN_INTERVAL_10MS, 99, CONN_TIMEOUT_1S
extern gap_periConnectParams_t my_updateConnParameters;
Умное устройство BLE или ПО мастера меняет параметры во время соединения по нужде - если надо вылить/залить что быстро, то ускоряется, если просто тупим - увеличивает интервал...
 

pvvx

Активный участник сообщества
Если выставить типовые минимальные стандартные тайминги соединения (7.5ms), не рекомендованные Apple (min > 15 ms), тогда не каждый мастер сможет держать соединение с несколькими устройствами...
Но все BLE примеры содержат именно минимальные значения, чтобы устройства Apple не работали. И это действует :p
 

pvvx

Активный участник сообщества
Для примера возьмем https://github.com/atc1441/ATC_MiThermometer/blob/master/ATC_Thermometer/ble.c#L82
bls_l2cap_requestConnParamUpdate (8, 8, 99, 400);
8*1.25 ms. Но Latency = 99, что говорит что период ответа от устройства гарантированно будет с интервалом 8*1.25*(99+1) = 1000 ms, а мастер пусть пыжится возможным приемом посылки от устройства с интервалом через каждые 10 ms. На то он и мастер - у него батарейка большая :)
Но дальше, в том-же коде видим:
C:
    if(ota_is_working){
        bls_pm_setSuspendMask(SUSPEND_DISABLE);
        bls_pm_setManualLatency(0);
    }
т.е., при переходе в режим OTA вырубить все sleep режимы и обнулить Latency.
В итоге потребление всё время OTA шкалит за 15 мА, что недопустимо для CR2032. Ну разве что совсем свежей...
И идет запись и стирание Flash, про что в мануале SDK писано - незя делать задержки для Flash более нескольких us, т.к. нарушает тайминги арбитража BLE, а стирание сектора и того поболее...
А если совсем нужно, то стараться это вписать в интервал соединения после активного цикла приема-передачи, пока CPU тупит в RAM или спит, а не лезет за кодом в Flash.
Да и зачем такая скорость, если Flash всё равно пишется медленнее? Видимо батарейку не жалко - главное выиграть пару секунд из 40, да исключить работу с древними BT адаптерами :)
Во время OTA можно было включить минимальный Sleep - SUSPEND_CONN, тогда среднее потребление во время программирования Flash упало бы менее 1 мА. Что делать CPU пока Flash программируется? но... ->
Есть ещё такое: blc_pm_setDeepsleepRetentionThreshold(95, 95);, указывающее минимальные интервалы для ввода CPU в любые sleep. Если интервал меньше до следующего арбитража RF, то sleep не будет включаться...
И указанные значения не дадут CPU спать при интервале в 10 ms и Latency = 0 :)
 
А это пофигу - на скорость не влияет. Это тайминги переключения сканирования по каналам...
А сам процесс поиска "термометров" можно как нибудь ускорить?

Для connection свои connection interval и latency.
Это в каком файле? или речь про флаттер?

Для Bluetooth с питанием от сети это может сгодится, но не для LE ...
В моем случае может и подойдет, ибо размерами "радаров" я не особо ограничен, пока запихнул девайс в коробку от тик-так.


ps: Выставил термометру
Advertising interval 62.5
Measure interval: 2
Connect latency: 20

Побыстрее рекламки побежали. :)
 

pvvx

Активный участник сообщества
В BLE для устройства два основных режима работы «advertising» и «connection».
Соответственно для каждого режима свои интервалы и настройки.
Ещё есть сканирование - это обычно для мастера и там свои настройки.
Всё описано в мануале к SDK на английском и китайском, и с картинками...
 

pvvx

Активный участник сообщества
Это то понятно. Я имел в виду можно ли укоротить(ускорить) цикл сканирования. Или он там постоянный?
Сканирование прерывается передачей рекламы. А в случае соединения - передачами и приемами по своим интервалам.
По этому чем меньше интервалы, чем чаще прерывается сканирование (прием с рекламных каналов).
Для вашей задачи оптимально наверно будет реклама от 100 мс у устройств, а у приемников - интервалы чем больше, тем лучше.
 

hardware-dept

New member
Здравствуйте. Вопрос простой, не могу понять можно ли работать с float числами на tlsr825x. Или это у них не сделано? Долго разбирался, похоже не хватает файла типа ieee754.s хотя libm.a есть в их SDK.
Нашел, что даже у них на техническом форуме не ответили на аналогичный вопрос на китайском языке еще в сентябре 2021.
 

pvvx

Активный участник сообщества
Вопрос простой, не могу понять можно ли работать с float числами на tlsr825x. Или это у них не сделано? Долго разбирался, похоже не хватает файла типа ieee754.s хотя libm.a есть в их SDK.
Нет либ и не нужны. Зачем перегружать тупой CPU. У него задачи другие.
Нашел, что даже у них на техническом форуме не ответили на аналогичный вопрос на китайском языке еще в сентябре 2021.
Не ответили по причине глупого вопроса.
Для приколистов на github где кто-то слепил либы для TLSR825x, но т.к. они нафиг не сдались я не помню ссылку.
 

hardware-dept

New member
Следующим вопросом будет "где C++?" ?
Или где Arduino?
СПАСИБО! Мне ранее попадалась gnu soft float, но не думал что кто-то уже переделал ее именно под telink (иногда трудно найти что тебе надо даже с использованием поисковиков).
Со следующим вопросом не угадали :) . Он был бы про math.h, которую тоже telink 825x вроде не поддерживает. Но это уже с моей стороны была бы наглость. Поэтому сначала сам поищу.
С огромным уважением лично к Вам. (по моему я видел Ваши посты еще лет 10 назад на форуме pda, и уже тогда было понятно что Вы не ординарная личность. Это не похвала, это факт)
 
В BLE для устройства два основных режима работы «advertising» и «connection».
Сделал макет системы BLE позиционирования на tb03 вылезла ниразу не обсужденная нами проблема, а именно узкая направленность встроенных в TB-03 антенн.
Поворот "метки" вокруг своей оси эквивалентен перемещению на 1-2 метра, что вкупе с поглощением излучения передатчика влагой в человеческом теле дает еще большую промашку.
Есть задумки как это скомпенсировать программно, но для начала надо имхо в "метку" ставить TB-04 и колхозить ему антенну.
Что посоветуете для максимально круговой направленности - ~30мм штырь из медной проволочки ?
 

volaltd

Member
Я от pvvx так и не смог добится ответа нужен ли конденсатор для TB04 между антеной и пином ) В доке ниче нету.
 

pvvx

Активный участник сообщества
Что посоветуете для максимально круговой направленности - ~30мм штырь из медной проволочки ?
Штырь тоже имеет направленность.
Сделал макет системы BLE позиционирования на tb03 вылезла ниразу не обсужденная нами проблема, а именно узкая направленность встроенных в TB-03 антенн.
Поворот "метки" вокруг своей оси эквивалентен перемещению на 1-2 метра, что вкупе с поглощением излучения передатчика влагой в человеческом теле дает еще большую промашку.
Про это и давал графики стационарных датчиков в Home Assistant. RSSI плавают от положения человека...
При увеличении точности измерения RSSI возможен пеленг "тела" по проницаемости между стационарными приемо-передатчиками :)
 

pvvx

Активный участник сообщества
1648898713194.png
AoA G2 gateway kit including G2 gateway, x4 LR1 locators, x3 MWL01 beacons and x5 6m network cables.
 

volaltd

Member
В каждом Datasheet на чипы TLSR825x приведен Reference Design.
Уже не сильно все это нужно, но если правильно припоминаю, то нигде нет схемы самого модуля TB04 чтобы увидеть что из этой референсной схемы есть под железной крышечкой, ну а накупать их кучу и смотреть что внутри немного не тот вариант, с которого хочется начинать работать с этой китайщиной :)
 

pvvx

Активный участник сообщества
с которого хочется начинать работать с этой китайщиной :)
У вас есть другие варианты? Тогда предлагайте.
Для построения автономных устройств обычным пользователям ныне доступны модули или чипы TLSR825x и PHY62x2. Остальные либо жрут сотни mA, либо дороги и не имеются для контрактного производства при заказе пары шт. печатных плат (даже с учетом увеличения безпошлинной суммы до $1000)
 

pvvx

Активный участник сообщества
Уже не сильно все это нужно, но если правильно припоминаю, то нигде нет схемы самого модуля TB04 чтобы увидеть что из этой референсной схемы есть под железной крышечкой,
У вас тут был вопрос - есть или нет кондера от выхода?
Вам встречный вопрос - у вас есть наипростейший тестер, чтобы ткнуть в выходной пин и измерить? :)
ну а накупать их кучу и смотреть что внутри немного не тот вариант, с которого хочется начинать работать
Дык работать или ? Жалко разломать один модуль? Что это за "работа" такая?
 
Сверху Снизу