• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Slacky

Member
А вот наверно сейчас глупый вопрос задам :)

А на TB-04 можно сразу запустить два комплекта RX-TX?

По пинам там все выходит, я про программный вариант ...

Спасибо.
 

pvvx

Активный участник сообщества
У чипа TLSR825x UART одна.
Кто такие "комплекты RX-TX"?
 

pvvx

Активный участник сообщества
У W801 (178р/шт), CH582M (>200р/in), TG-12F/TG7100C(>200р/шт), BL702: ZB1 (200р/шт)/ RV debug (300р/шт), PB-03F (модуль 70р/шт, kit 200р/шт) и т.д. по несколько UART (до 6 шт).
Это часть ссылок из моих заказов, не все - которые подешевше и лень ковырять список и искать только с BLE, давно пришли и валяются... Т.е. проверенные ссылки.
Вот только кому UART сдались? Никакой чип к нему не прикрутить, и комп/смарт так-же. UART = Мертвый интерфейс.
 

Slacky

Member
Извините, но вот еще вопрос. Даже наверно вопросы.

Так как я любитель, в некоторых вопросах наверно даже дилетант, то мне сложно оценить - а правильным ли я путем иду?

Есть у меня идея все-таки сделать считыватель кодов электросчетчика "Каскад" через оптопорт. Передающий светодиод передает команды, фотодиод - принимает ответы. Из интернета вычитал, что обычный диод потребляет в районе 20 мА.

А теперь вопрос - имеет ли смысл с таким потреблением заморачиваться BLE и батарейкой?

Или лучше взять какой-нибудь WiFi-модуль и запитать его от сети?

Хотя, с другой стороны, нужно ли снимать показания чаще раза в сутки?

Спасибо. Может кто пнет в нужную сторону :))
 

pvvx

Активный участник сообщества
Есть у меня идея все-таки сделать считыватель кодов электросчетчика "Каскад" через оптопорт.
А электросчетчик куда подключен? Тоже батарейку измеряет? :)
Тут только по одному из двух вариантов - если есть и не запрещен доступ к выходам сети со счетчика (вообще в щиток), то и питать там. Ну и второй вариант и так понятный. Но это какое-то безобразие и тогда сами запрещальщики пусть и лепят то, что требуется. Без них во втором случае не обойтись.
Но есть ещё возможные исключения - вы тот запрещальщик :)
 

pvvx

Активный участник сообщества
А теперь вопрос - имеет ли смысл с таким потреблением заморачиваться BLE и батарейкой?
Это смотря какая батарейка. 3000 мА.ч?
Такое как-бы лезет в любую коробочку и доступно...
Или лучше взять какой-нибудь WiFi-модуль и запитать его от сети?
А тут уже назвать батарейкой можно только поддон с акб от Теслы, или ради дешевизны какой б.у от Лифан.
Соотношения к батарейкам более десятикратные у BLE и WiFi. Т.е. по объему батарейки не менее чем в 10 раз.
Или к транзистору и трансику AC-DC адаптера... Где быстрее усохнут емкости?
 

pvvx

Активный участник сообщества
И ещё (но тут только мой опыт - другие говорят у них всё не так) мне приходиться передергивать раз в неделю, две адаптеры с WiFi устройствами на малых SoC подключенные к моим HA . Чаще всего к ним просто нет доступа, хотя соединение с роутером активно. Типичная беда убогой реализации TCP стека и отсутствия MMU для “heap”, что несовместимо с непрерывной работой – т.е. глючит “сокет” и IP порты – не хотят соединяться и HA плодит простыни логов. Это неизбежно, если у них нет встроенной периодической перезагружалки. Для некоторых WiFi устройств это решается перезагрузкой роутера – они заново соединяются и начинают работать. Но это приходится делать вручную, т.к. на сеть (роутеры/модемы/HA) стоит автономка, а автомат их перезагрузок, если и работает, то не то время когда зависают его клиенты. Третья группа WiFi побрякушек иногда теряет связь с роутерами при включении-отключении внешней эл.сети. Так-же бежать и лечить коммутацией питания.
Т.е. за 2 года работы с HA у меня нет ни одного WiFi устройства, которое бы не зависло или не заглючило... кроме реализаций на linux.

А BLE устройства, коих у меня в попечении всегда не менее 50 шт, тоже “глючат”, но не чаще раза в год – требуют замену батареек. В них ничего в памяти не засерается, т.к. они каждый рекламный интервал практически перезагружаются и все стеки CPU и прочие буфера с инициализацией внутренних адаптеров всегда новенькие и чистенькие. А помнить им надо до пары байт, и то для оптимизации потребления…
 

pvvx

Активный участник сообщества
C ZigBee тоже есть приключения. Но это больше связано с реализацией их сети и является излечимым фактором, если это ваши устройства и имеете доступ к изменению кода и конфигурации сети.
 

pvvx

Активный участник сообщества
Я не пропагандирую BLE. У него много "но" – нет быстрой обратной связи. И если используется безответная реклама, то такую сеть не положить передачей пары байтиков. Орде из кричащих BLE безразлично, что там в эфире, а частота повторов передач успешно справляется с коллизиями на приемной стороне. У Wifi всё наоборот – пару кривых или неверно понятых битиков рушит всю связь. Т.е. надежность нулевая, если не предусмотрено множество обходов и дополнительных фич выходов из таких ситуаций. На ZigBee и MESH это так-же сказывается. А большинству пользователей нужна надежность, а не “безопасность данных”. Хотя шифрование немного увеличивает отброс кривых битиков за счет большей контрольной суммы и ещё немного за счет увеличенной проверке входных параметров...
В итоге BLE и вырывается вперед для реализации тупеньких дешевых датчиков в сфере IoT. Включил и забыл, но батарейка напомнит :)
 

Slacky

Member
В общем я подумаю над вариантом ble, но запитаю его от щитка. Смысл что-то измерять, если 220 отключат.
 

Slacky

Member
А вот еще с чем столкнулся.

Если нет шифрования, то размер пакета, который передается функции bls_ll_setAdvData составляет у меня 27 байт и все прекрасно работает.

А вот с шифрованием размер пакета увеличивается и составляет уже 35 байт. И вот тут облом. Код возврата bls_ll_setAdvData - 0x12.
HCI_ERR_INVALID_HCI_CMD_PARAMS = 0x12,

Если выкинуть пару данных из пакета, уменьшив размер, то все прекрасно работает и с шифрованием.

Я пока не очень понимаю, как это обойти ...
 

Slacky

Member
Порылся в примерах, нашел, что 'if legacy ADV, max length 31 bytes is enough'. Нужно смотреть в сторону ext_adv ...
 

pvvx

Активный участник сообщества
А вот с шифрованием размер пакета увеличивается и составляет уже 35 байт. И вот тут облом.
Нет никакого облома. Передаете данные по очереди - функциональными частями.
Считаете номер передачи рекламы и меняете по этому счетчику данные.
C:
int app_advertise_prepare_handler(rf_packet_adv_t * p)    {
    (void) p;
    adv_send_count++; // count & id advertises
    ....
    bls_ll_setAdvData(adv_buf.data, adv_buf.data_size);
}

// добавить в init ble
    bls_set_advertise_prepare(app_advertise_prepare_handler); // todo: not work if EXTENDED_ADVERTISING
Второй вариант - изредка передавать пачку реклам с доп. данными и другим, более коротким интервалом. Это как во всех Xiaomi.
Обычно интервал у такой пачки ~50 ms и 4...16 сообщений в пачке.
bls_ll_setAdvDuration(время всего цикла в us, 1);
После отработки выпадает bls_app_registerEventCallback (BLT_EV_FLAG_ADV_DURATION_TIMEOUT, &ev_adv_timeout);
В void ev_adv_timeout(u8 e, u8 *p, int n) восстанавливаете стандартный вариант рекламы.
 

pvvx

Активный участник сообщества
MJWSD05MMC и многие другие термометры в оф. версии работают по второму типу - гонят пачки, когда сменилась температура или влажность (но не чаще 60 сек) или типа, а постоянно передает тупую рекламу с шагом 10 сек:


Я в термометрах гоняю пачку по событию геркона (открыто-закрыто) или при переходе счетчика через ноль... И там немного накрутил, чтобы первое сообщение в пачке отправлялась сразу, а не через установленный интервал между сообщениями...
 

Slacky

Member
Пример из SDK с ext_adv не зашел сразу. Шлет нули.

0x0201062316D2FC4100000000000000000000000000000000000000000000000000000000000000

Но думаю, он мне не подойдет, так как на машинке, где крутится HA, модуль bluetooth версии 4.2, если память не изменяет ...
 

pvvx

Активный участник сообщества
Нужно смотреть в сторону ext_adv ...
Смотрите :) в недописанный SDK от Telink - в доке указано, читайте, что это демо версия и все кто не имеет исходников либ BLE идут лесом, т.е. в реальности кушают глюки.
Я уже среверсил нужные куски, чтобы это можно было использовать, но тесты ещё не завершены окончательно.
В ext_adv нет такого типа рекламы, чтобы по ней было возмождно соединение и сканирование одновременно. Т.е. вам потребуется 2 ext_adv разных типов. А это не реализовано в SDK, как и отключение ext_adv модуля для перехода к старенькому типу :p Работает только через полную перезагрузку, путем разных ветвей инициализации всех дров BLE.
И для ext_adv вам потребуется специальный адаптер. А их нет в дешевке :)
А уж для ext_adv с LongRange - тут только золотом платить или самому лепить адаптер.
Как раз срачем по данному поводу и занимался утром - https://github.com/pvvx/ATC_MiThermometer/issues/221 - учился писать через google переводчик :)
Заодно ковыряя отлаживая уже полу-рабочую версию термометров с полным LongRange.
 

pvvx

Активный участник сообщества
Заодно ковыряю отлаживая уже полу-рабочую версию термометров с ext_adv и полным LongRange, да опционально со старыми вариантами реклам (Legacy). Отлажу и забуду - уточняйте быстрее вопросы про ext_adv, т.к. там полный дикий лес из-за множества вариантов со всех сторон, и все неоднозначные (опыта у народа вообще с этим нет).
 

Slacky

Member
Нет никакого облома. Передаете данные по очереди - функциональными частями.
Считаете номер передачи рекламы и меняете по этому счетчику данные.
C:
int app_advertise_prepare_handler(rf_packet_adv_t * p)    {
    (void) p;
    adv_send_count++; // count & id advertises
    ....
    bls_ll_setAdvData(adv_buf.data, adv_buf.data_size);
}

// добавить в init ble
    bls_set_advertise_prepare(app_advertise_prepare_handler); // todo: not work if EXTENDED_ADVERTISING
Про счетчик не очень понял. Как увеличение счетчика определит нужные данные? Вот было 0, стало 1. Через какое-то время стало 255. Как?
 

Slacky

Member
Заодно ковыряю отлаживая уже полу-рабочую версию термометров с ext_adv и полным LongRange, да опционально со старыми вариантами реклам (Legacy). Отлажу и забуду - уточняйте быстрее вопросы про ext_adv, т.к. там полный дикий лес из-за множества вариантов со всех сторон, и все неоднозначные (опыта у народа вообще с этим нет).
Да вроде запустил. Но опять же, 4.2 такой пакет не видит.
 
Сверху Снизу