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

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

millworm

New member
хм, с такими настройками скачет 0.4-0.7мА
видать чего-то лишнего еще включено. буду искать, спасибо
нужно было интервал рекламы увеличить. Поднял до 3000 и все стало отлично :)

Появился новый вопрос - для работы OTA кроме поднятого сервиса еще что нужно настраивать? Пробую через https://pvvx.github.io/ATC_MiThermometer/TelinkOTA.html обновить прошивку. Она грузится какое-то время, а потом выдает ошибку NotSupportedError gatt error unknown
получаю ее в разное время: бывает чуть ли не сразу посла нажатия на flash выдается, иногда до 5 секунд доходит
в колбеке подключения выставляю
C++:
bls_l2cap_requestConnParamUpdate(CONN_INTERVAL_10MS, CONN_INTERVAL_10MS, 99, CONN_TIMEOUT_4S); 
bls_pm_setSuspendMask(SUSPEND_DISABLE);
bls_pm_setManualLatency(0);
bls_ota_setTimeout(10 * 1000000);
 

pvvx

Активный участник сообщества
Появился новый вопрос - для работы OTA кроме поднятого сервиса еще что нужно настраивать? Пробую через https://pvvx.github.io/ATC_MiThermometer/TelinkOTA.html обновить прошивку. Она грузится какое-то время, а потом выдает ошибку
Поправьте задержку сброса ОТА.
Этого не достаточно:
C++:
bls_ota_setTimeout(40 * 1000000);
Пример:
1) https://github.com/pvvx/ATC_MiThermometer/blob/master/src/app_att.c#L364
{0,ATT_PERMISSIONS_RDWR,16,sizeof(my_OtaData),(u8*)(&my_OtaUUID), (&my_OtaData), &otaWritePre, &otaRead},
2) https://github.com/pvvx/ATC_MiThermometer/blob/master/src/ble.c#L123
C++:
extern u32 blt_ota_start_tick;
int otaWritePre(void * p) {
    blt_ota_start_tick = clock_time() | 1;
    return otaWrite(p);
}
Будет отсчитывать от последнего принятого блока.
На хороших адаптерах BT и при быстрой работе js успевает залить за до 40 сек.
Но если адаптер фиговый, тормозной комп или iOS, устройство далеко, то bls_ota_setTimeout() c максимальным значением не успевает и сбрасывает
 

pvvx

Активный участник сообщества
Может нужно настройки еще какие-то менять после того как подключились?
Для OTA да.
Необходимо переключить (согласовать с партнером) интервал соединения на малый и Latency на 0.
Кушать ему надо, когда пишется flash и шевелиться быстрее (отключить DEEPSLEEP_RETENTION_xxx). От этого время приема и записи зависит.
А в других режимах - кушать надо мало...

Иногда хватает установить в параметрах соединения только Latency в 0, если интервалы были настроены и использовался Latency с большим числом... Это изучайте в параметрах соединения для всех BLE.
C++:
    if (ota_is_working) {
        bls_pm_setSuspendMask (SUSPEND_ADV | SUSPEND_CONN); // SUSPEND_DISABLE
        bls_pm_setManualLatency(0);
    } else { ... }
 
Поначалу я слишком быстро отпускал свою кнопку, замыкающую пины TXD и SWS, и получал сообщения "Error get version floader!"
Нашел в ящике отладочную платку на E104-BT12LSP (прошита скорее всего MESH с кодом управления лампочками).
Припаял SWS (желтый провод). Запускаю команду
python.exe TlsrComProg.py -p COM3 -t 4000 rf 0 0x80000 ff.bin
Получаю классическую "Error get version floader!"
Кнопку reset жал в разное время всеми указанными в этом топике способами :)
Можно как нибудь переписать этот mesh флеш на скажем blink из стандартного sdk?
 

Вложения

pvvx

Активный участник сообщества
Кнопку reset жал в разное время всеми указанными в этом топике способами :)
На плате кнопки "reset" нет и ничего к ней не распаяно, но наверняка всё прикручено к микросхеме USB-UART... Придется помучаться :)
И у TLSR8253 два входа-выхода UART TX/RX и что там у китайцев где - изучайте, путем съема крышки :)
 
Вроде стерся и прошился. Попытался залить в него родное firmware от TB-03, полученное методом
python.exe TlsrComProg.py -p COM3 -t 2000 rf 0 0x80000 ff.bin

09:18:20: USB-COM opened.
09:18:26: File was selected, size: 524288 bytes
09:18:33: Reset DTR/RTS (100 ms)
09:18:33: Activate (3 sec)...
09:18:36: Write 524288 bytes in to Flash...
09:21:47: Done (194.031 sec).
09:21:47: Soft Reset MCU

Вроде залилось, по крайней мере раньше при включении лампочки моргали, а сейчас нет.
Тем не менее при попытке считать флеш через TlsrComProg. по прежнему "Error get version floader!". Добрые китайцы приложили мне в комплект две платки без чипа, припаял на одну из них TB-03, руководствуясь подписями выводов на плате - вот он читается TlsrComProg без проблем.
IMG_20220302_092704[1].jpg

Щас пойду среду разработки ставить и примеры пытаться компилировать...

ps: вопрос немного не в тему. Предположим у нас есть маячок Beacon "пикающий" в пространство рекламой. Может ли другая TB-03 (или термометр) определить мощность сигнала его передатчика не подключаясь к нему? Это я пытаюсь ble-позиционирование в помещении реализовать...
 
Установил среду разработки TelinkSDK под Win10, инсталлятор создал три значка.
При клике по ярлычку Telink IDE 1.3 (C:\TelinkSDK\eclipse.exe -vm C:\TelinkSDK\\jre\bin\javaw ) получаю следующие сообщение об ошибке.
sshot-10.jpg
Если не стартовать java vm, а просто запустить Eclipse она нормально стартует.
Импортировал проект, пробую пересобрать. В логе следующая ошибка
sshot-10.png
Никто не подскажет как это разрулить?
 
Никто не подскажет как это разрулить?
Прорвался дальше переименовав python3 в просто python. теперь валимся тут:

Makefile:
Create Flash image (binary format)
Invoking: TC32 Create Extended Listing
 - Cannot openmake: *** [sizedummy] Error 1
make: *** Waiting for unfinished jobs....
copy from `./out/BLE-ScanerTrg.elf' [elf32-littletc32] to `./out/../BLE-ScanerTrg.bin' [binary]
output done!
Finished building: out/../BLE-ScanerTrg.bin
Finished building: out/BLE-ScanerTrg.lst
 

pvvx

Активный участник сообщества
Установил среду разработки TelinkSDK под Win10, инсталлятор создал три значка.
При клике по ярлычку Telink IDE 1.3 (C:\TelinkSDK\eclipse.exe -vm C:\TelinkSDK\\jre\bin\javaw ) получаю следующие сообщение об ошибке.
Посмотреть вложение 11919
Это норма при бардаке в PATH в windows с бардаком от java и десятков инсталляций Eclipse.
И строка у вас отличается - не указан -d32
E:\Telink\SDK\eclipse.exe -vm -d32 E:\Telink\SDK\jre\bin\javaw
 

pvvx

Активный участник сообщества
В качестве начальной точки выбрал AdScanerTrg :) Он больше всего похож на то, что мне нужно, но вот не собирается что-то :(
Есть вариант сборки без вашего участия под linux. Могу переделать проект в него, раз не умеете создавать свою среду сборки.
У меня как-то уживаются одновременно десятки сред сборки, но все было необходимо редактировать и изменять, посложнее чем вы описываете.
 

pvvx

Активный участник сообщества
ps: вопрос немного не в тему. Предположим у нас есть маячок Beacon "пикающий" в пространство рекламой. Может ли другая TB-03 (или термометр) определить мощность сигнала его передатчика не подключаясь к нему? Это я пытаюсь ble-позиционирование в помещении реализовать...
Не может. В реальной обстановке из-за отражений и прочих эффектов, да без наличия специальных антенн уровни сигналов 2.4ГГц имеют не линейное распределение.
Для позиционирования в BLE есть специальные протоколы и аппаратные решения.
 
И строка у вас отличается - не указан -d32
Ага сенкс, вписал параметр - eclipse запустился.
Был не полностью обновлен github
Отлично. хотя все оказалось банальнее, я проглядел еще один "python3" в mаке. На будущее руками создал линк python3.exe к python.exe
Есть вариант сборки без вашего участия под linux
Не, мне надо будет еще в самом коде покопаться. :) Мне требуется по задаче простенький интегратор произвольного множества маячков с указанием их RSSI. В принципе имеющийся код вполне выполняет то что мне нужно, но возможно придется что то подправить.
Для позиционирования в BLE есть специальные протоколы и аппаратные решения.
Спасибо. как я понял там ребята серьезно размахнулись на триангулирование углов. Мне, в первом приближении, это пока не нужно. В демке маячок будет находиться _внутри_ прямоугольника из 4(6,8 etc) приемников. то есть дело сводится к определению положения точки не на произвольной плоскости, а на прямой между двумя приемниками (ну как шарик на биллиардном столе где приемники в лузах). Высокая линейность на этом этапе также не нужна. Той что есть вполне хватает, ниже на скриншоте TB-03 на монтажке принимает показания термометра. Колебания значений возникают из-за того что я не выключал сканирование когда переносил термометр с места на место.
sshot-11.jpg

ps: Я правильно понимаю, что пример iBeacon из SDK это и есть код простого маячка? Можно зашить его в TB-04, подключить его к CR2032 (параллельно подпаять конденсатор микрофарад на 100) и эта конструкция будет около года работать "Спутником" пища в эфир своим именем?
 

pvvx

Активный участник сообщества
Колебания значений возникают из-за того что я не выключал сканирование когда переносил термометр с места на место.
В SDK параметр RSSI выдается с большим шагом и кое-как...
Я правильно понимаю, что пример iBeacon из SDK это и есть код простого маячка? Можно зашить его в TB-04, подключить его к CR2032 (параллельно подпаять конденсатор микрофарад на 100) и эта конструкция будет около года работать "Спутником" пища в эфир своим именем?
Я его не смотрел. Там вполне возможно, что никакого энергосбережения не включено. Это же пример :)
 

nikolz

Well-known member
если объект виден, то проще поставить лазерный триангулятор
будет и точнее и проще и надежнее .
 
если объект виден, то проще поставить лазерный триангулятор
Это вы про TOF? Скорее всего он не подойдет. Объектов будет много, они все высокоподвижны и их нужно отличать друг от друга.
ps: Чувствую что огребу проблем с их подвижностью и на ble, но в качестве макета думаю оно должно справится. Особенно если выкрутить в ноль мощность маячка (чтобы его видели только ближайшие к нему приемники)
 
Сверху Снизу