Страница 1 из 1

Режим сна батарейной ноды

Добавлено: 22 янв 2018, 09:41
ahelper
Объясните разницу между:
smartSleep(SLEEP_TIME);
и
sendHeartbeat();
sleep( SLEEP_TIME );

Re: Режим сна батарейной ноды

Добавлено: 23 янв 2018, 09:04
Berk
Фкнкция слип в варианте умного исполнения сама отправляет Хардбит на контролер после отправки сообщения на контролер о пробуждении.
В функции слип с стандартном варианте этого нет, поэтому если надо отправить Хардбит, надо его прописать. (2.0|2.1, не могу с уверенностью сказать тоже о 2.2 тк не проверял)
Конкретно отвечу на вопрос так(только в ракурсе отправки хардбит), ..вариант со смартслипом будет слать на контролер 3 сообщения, сам хардбит и два сообщения с оповещением контролера о параметрах сна, ...в варианте с обычным слипом сообщение на контроле будет одно.

НО, немного отступлю не по теме и обращу внимание именно на саму функцию слип.
Если читать комментарии разработчика в библиотеках V2(по моему с версии v2.1), то не рекомендуется использование Smartsleep как самостоятельной функции.
Правильным вариантом разработчик предлагает считать:
int8_t sleep(const uint32_t sleepingMS, const bool smartSleep)

над Смартслипом есть бриф:
/**
* \deprecated Use sleep(ms, true) instead
* Same as sleep(), send heartbeat and process incoming messages before going to sleep.
* Specify the time to wait for incoming messages by defining MY_SMART_SLEEP_WAIT_DURATION to a time (ms).
* @param sleepingMS Number of milliseconds to sleep.
* @return @ref MY_WAKE_UP_BY_TIMER if timer woke it up, @ref MY_SLEEP_NOT_POSSIBLE if not possible (e.g. ongoing FW update)
*/
int8_t smartSleep(const uint32_t sleepingMS);

Тоесть не рекомендуется.
Введен просто флаг режима смарт слип, который указывается дополнительно в конце агрументов ...,true или ..., false

Видимо в дальнейшем планируется вообще вывести из протокола Smartsleep как функцию...