pvvx
Активный участник сообщества
Для получения минимального потребления с передачей нескольких значений в минуту или час по WiFi существует уже проверенное решение. Оно заключается в передаче одного стандартного пакета 802.11 или типа и приема его на другом оборудовании. Прием можно организовать и на ESP8266 используя только стандартные функции SDK и Arduino.
К примеру, среди стандартных функций, не ограничивая работу AP или STA, на ESP8266 есть функция оповещения приема пакета ‘Probe Request’. Логирование можно осуществить и на многих роутерах, установив OpenWRT.
Передача стандартного пакета ‘Probe Request’ занимает не более 1 мс (прием на СВЧ диоде около модуля):
Далее, на примере использования пакета ‘Probe Request’:
Лог в UART на стороне модуля с датчиком:
Лог в UART на стороне ESP8266 работающего к примеру с прошивкой "web-свалки":
Из этого получается, что время активности, когда модуль исполняет нужные нам действия составляет 4..5 мс, в которой среднее потребление около 110 мА из-за работающего RF. Самая большая и критичная часть – это загрузка. У всех ESP это самая долгая и потребляющая часть из имеющихся WiFi-SoC, которую удалось сократить всего до 30 мс и уменьшить стартовый ток в 2 раза используя RapidLoader. При этом это не всё время когда происходит потребление при старте, ему предшествует время старта генератора CLK на кварце…
На других WiFi-SoC старт из sleep происходит за 1 мс. Т.е. вся активность составляет до 6 мс, с средним потреблением 80..100 мА. А в режимах sleep с потреблением 0.1..3 мА у них активны все прерывания и остаются рабочими контроллеры, такие как UART, ADC, ... Что позволяет осуществлять передачу значений по мере их поступления с датчиков, с задержкой не более 5 мс от события.
Передача стандартного пакета ‘Probe Request’ занимает не более 1 мс (прием на СВЧ диоде около модуля):
Далее, на примере использования пакета ‘Probe Request’:
- Включение модуля (аналогично после deep_sleep), загрузка программы и инициализация. На ESP8266 с использованием RapidLoader – 30..40 мс при 60..75 мА. На других модулях зависит от режима: из sleep - до 1 мс, из deep_sleep - порядок до 10 мс.
- Модуль с датчиком, с самого первого старта, опрашивает датчик, упаковывает значение в MAC поле блока ‘Probe Request’. Время исполнения зависит от датчика. Возьмем опрос ADC, что составит 1 мс при 20 мА.
- Включает тактирование и питание RF части, переписывает в её регистры записанные заранее значения и ждет инициализации RF части. Она аналоговая и требует время на это, как и на стабилизацию PLL. Данная процедура занимает пару мс при > 70 мА.
- Включает передачу блока ‘Probe Request’. Время исполнения 1 мс при 150..200 мА.
- Отключает RF и переводит чип в deep_sleep состояние. Если используется SPI Flash, то необходимо подать команду sleep и к ней. Время исполнения процедуры менее 1 мс при 25 мА.
Лог в UART на стороне модуля с датчиком:
Код:
...
ID:0x0018 ADC:0x0237
ID:0x0019 ADC:0x023c
ID:0x001a ADC:0x0234
ID:0x001b ADC:0x023c
ID:0x001c ADC:0x023c
ID:0x001d ADC:0x023c
ID:0x001e ADC:0x023b
ID:0x001f ADC:0x0237
ID:0x0020 ADC:0x023b
...
Код:
...
WiFi event(7): Probe Request (MAC:02:00:37:02:18:00, RSSI:-47)
WiFi event(7): Probe Request (MAC:02:00:3c:02:19:00, RSSI:-47)
WiFi event(7): Probe Request (MAC:02:00:34:02:1a:00, RSSI:-47)
WiFi event(7): Probe Request (MAC:02:00:3c:02:1b:00, RSSI:-48)
WiFi event(7): Probe Request (MAC:02:00:3c:02:1c:00, RSSI:-47)
WiFi event(7): Probe Request (MAC:02:00:3c:02:1d:00, RSSI:-47)
WiFi event(7): Probe Request (MAC:02:00:3b:02:1e:00, RSSI:-47)
WiFi event(7): Probe Request (MAC:02:00:37:02:1f:00, RSSI:-57)
WiFi event(7): Probe Request (MAC:02:00:3b:02:20:00, RSSI:-65)
...
На других WiFi-SoC старт из sleep происходит за 1 мс. Т.е. вся активность составляет до 6 мс, с средним потреблением 80..100 мА. А в режимах sleep с потреблением 0.1..3 мА у них активны все прерывания и остаются рабочими контроллеры, такие как UART, ADC, ... Что позволяет осуществлять передачу значений по мере их поступления с датчиков, с задержкой не более 5 мс от события.
Последнее редактирование: