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

Делюсь опытом ESP8266. Уменьшение тока потребления.

pvvx

Активный участник сообщества
@enjoynering - нашел от куда вы вытянули этот бред.
1. При уже орущей, уже соединенной c колонкой устройства у пользователя, пакеты запросов не принимаются.
2. При уже орущей, уже соединенной c колонкой устройства у пользователя, пакеты объявлений кто она такая не передаются.
3. При уже орущей, уже соединенной c колонкой устройства у пользователя, утилиты Linux не примут ничего - связь идет на другом канале и каналы имеют скачкообразную перестройку, узнать которую можно только при первичном соединении.
4. Соединение может быть защищено pin-кодом.
5. Соединение может быть защищено привязкой по MAC.
6. Соединение всегда шифровано, и вам не влезть в пойманный трафик с прыжками по каналам...
7. Размер пакета всегда ограничен. Разница размера в версии BT. Переполнения невозможно, т.к. типовое устройство bluetooth однозадачно - пока не отработает, нового не примет. Это не WiFi роутер скипающий все пакеты которые не лезут, у BT нет таких задач.
 

pvvx

Активный участник сообщества
Как таковую "привязку" BLE по MAC вы не снимете. При ней в обоих устройствах согласуется ключ шифрации, который будет меняться при каждом соединении. Снять можно только в ручную, с помощью специальной команды устройству. А сообщения не шифрованные этим ключом приниматься не будут :p
Скорость любого CPU в BLE SoC без проблем позволяет обслужить непрерывный максимальный радио-поток. Он мал - всего 1 мегабит. Сообщения больше аппаратного буфера отбрасываются на аппаратном уровне, т.к. не совпадет контрольная сумма. Не с тем МАС - аналогично. И приемник включается окном - 500 мкс, после передачи. Попробуйте попадите просто так :p Большинство сообщений идет с подтверждением - BLE стек, т.е. последовательно - запрос-исполнение-ответ - какие ещё переполнения?
Вот как раз это и является костью в ESP. ESP32 - полный тормоз и не успевает отвечать. Устройству приходится посылать множественные дополнительные перезапросы ESP32, разряжая батарейку. По этим причинам испольpование ESP32 в BLE невозможно.
 

pvvx

Активный участник сообщества
И как же Lora или WiFi-ESP-NOW это решит? Потеря одного пакета и весь ваш тайминг в 2 мс накрыт тазиком.
ESP-NOW отличается от (nRF) ESB только в худшую сторону. А ESB - это предок BLE. Для КА части используется та-же схема и функция производящая - TX-пауза-RX но с малым буфером и другим кодом.
 

pvvx

Активный участник сообщества
А у время от срабатывания геркона на Xiaomi LYWSD03MMC до вывода на GPIO на приемнике AdScanerTrg:
1685885141440.png
2.9...3.5 мс.
И туда входит просыпание SoC в LYWSD03MMC, передача по 3-м каналам BLE рекламы, прием на другом TLSR825x (TB-03F), разбор сообщения и вывод события открытия/закрытия на GPIO.
Т.е. если это кнопка, то включение лампы будет через 3 мс.
 

nikolz

Well-known member
А у время от срабатывания геркона на Xiaomi LYWSD03MMC до вывода на GPIO на приемнике AdScanerTrg:
Посмотреть вложение 13141
2.9...3.5 мс.
И туда входит просыпание SoC в LYWSD03MMC, передача по 3-м каналам BLE рекламы, прием на другом TLSR825x (TB-03F), разбор сообщения и вывод события открытия/закрытия на GPIO.
Т.е. если это кнопка, то включение лампы будет через 3 мс.
Какую максимальную частоту передачи сообщений можно получить?
И хорошо бы не забивать три канала.
 

pvvx

Активный участник сообщества
Какую максимальную частоту передачи сообщений можно получить?
И хорошо бы не забивать три канала.
Тогда ESB и прочие варианты, используемые в мышках. У Telink мышки опрос вроде в 1000 Гц.
 

pvvx

Активный участник сообщества
См: Application Note: Telink Enhanced ShockBurst Engine User Guide.
 

pvvx

Активный участник сообщества
При тесте на ESP32 с nRF01 (ESB) вышло всего 150 транзакций в сек. ESP- ещё тот тормoз...
На TLSR825x может значительно быстрее, но тогда ESP пропускает большинство пакетов и требуются ретранзакции, что сводит всё на нет:
Кусок кода TLSR825x с либой для ESB:
C:
    ...
    ESB_SetDatarate(ESB_DR_2M);
    ESB_SetOutputPower(ESB_RF_POWER_0DBM);
    ESB_SetAddressWidth(ADDRESS_WIDTH_5BYTES);
    ESB_ClosePipe(ESB_PIPE_ALL);

    unsigned char rx_address[5] = { 0xe7, 0xe7, 0xe7, 0xe7, 0xe7 };
#if (RF_RX_TX == RF_TX)
    ESB_SetAddress(ESB_PIPE0, rx_address);
    ESB_OpenPipe(ESB_PIPE0, 1);
    ESB_SetTXPipe(ESB_PIPE0);
    ESB_ModeSet(ESB_MODE_PTX);
#else
    ESB_SetAddress(ESB_PIPE0, rx_address);
    ESB_OpenPipe(ESB_PIPE0, 1);
    ESB_ModeSet(ESB_MODE_PRX);
#endif

    ESB_SetRFChannel(chn);
    ESB_SetAutoRetry(2, 150); //5,150
    ESB_RxTimeoutSet(500); // 500 us
    ESB_RxSettleSet(80); // 80 us
    ESB_TxSettleSet(149); // 149 us

    ESB_EnableDynamicPayload(1);
    ...
 
Сверху Снизу