Могу ли я использовать внутренние часы на Wemos D1 Mini?
У меня есть работающая установка Wemos D1 Mini, которая измеряет температуру и отправляет ее по Wi-Fi на мой сервер. Теперь я использую устройство с батарейным питанием и экспериментирую с оптимизацией энергопотребления и способами его снижения.
Одна вещь, которая мне нужна, это время (текущее, либо эпоха, либо летнее время). Поэтому я внедрил NTP, но каждый раз, когда мой ESP просыпается после глубокого сна, ему нужно повторно подключаться к Wi-Fi, собирать время, измерять температуру, отправлять результаты. .
В этом pdf указано, что ESP8266 имеет внутренние часы. У меня проблемы с поиском чего-либо, кроме "RTC Shields на Wemos/Arduino" или «NTP на ESP8266»; в интернете о чем-то похожем на внутренние часы. Что-то должно быть, потому что иначе это не могло бы работать (мои представления о часах и оборудовании пока ограничены).
Мой вопрос: могу ли я использовать NTP для обновления своих внутренних часов, используя их в течение нескольких минут (я думаю, что через несколько минут они будут дрейфовать), обновляя через NTP время от времени - чтобы просто уменьшить сетевой трафик и по-прежнему использовать глубокую -спящий режим?
Любые подсказки приветствуются!
1 ответ
Лучший ответ:
Я думаю, что ответ на ваш вопрос лучше всего выразить одним словом: "Вроде".
Лучшим аргументом является документация NodeMCU Lua, в которой говорится:
Учет времени на ESP8266 технически довольно сложен. Несмотря на название RTC, RTC на самом деле не являются часами реального времени в обычном смысле этого слова. Хотя счетчик продолжает тикать, пока модуль находится в спящем режиме, точность, с которой он это делает, сильно зависит от температуры чипа. Упомянутая температура значительно меняется между тем, когда чип работает, и когда он находится в спящем режиме, а это означает, что любая калибровка, выполняемая во время работы чипа, становится бесполезной через несколько мгновений после того, как чип перешел в спящий режим. Таким образом, калибровочные значения должны быть выведены по циклам сна, чтобы обеспечить точное отслеживание времени. [...]
Поэтому, хотя это и называется RTC, это не RTC в традиционном смысле — это просто таймер, который работает даже в спящем режиме, но не с какой-либо степенью точности.
Вы можете получить доступ к текущему счетчику RTC с помощью функции Non OS SDK.
uint32_t system_get_rtc_time()
Вы можете комбинировать это с
uint32_t system_rtc_clock_cali_proc()
что дает вам количество микросекунд за тик таймера RTC.
Нельзя изменить счетчик таймера RTC, поэтому вам придется прибегнуть к «дельта-магии». чтобы обновить собственное внутреннее значение времени (проще всего значение эпохи) из разницы между последовательными вызовами для получения счетчика RTC.
Все это довольно сложно, и точность в любом случае будет невысокой, поэтому вам следует использовать NTP для регулярного обновления значения эпохи.
Но это может дать вам "приблизительное представление" как долго вы спали и т. д.
Вам нужно будет провести несколько экспериментов, чтобы узнать, насколько отличается время по сравнению со значением NTP при реальном использовании.
Типа, если не вызывать deepSleep. Цитируя Справочник API SDK 3.0.2: «Если внешнее оборудование сбрасывает чип через EXT_RST или CHIP_EN (например, выход из глубокого сна по времени), таймер RTC будет сброшен». Arduino [скетч] (https://github.com/DarioGHub/embedded/blob/main/sleep/SDK.RTC.Time.Demo.ino), перенесенный из упомянутой ссылки., @DWB
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- Питание Nodemcu с помощью Vin
- ESP8266 на Wi-Fi без пароля, возможно?
это не ответ, но я хочу показать вам, как просто получить время NTP в esp8266 Arduino: время во внутренних RTC (другого пути нет), @Juraj