Arduino работает как сервер, но иногда хочет действовать как клиент для обновления времени.
Мой Arduino (на самом деле Adafruit HUZZAH32 на основе ESP32) работает как сервер Wi-Fi. Его основная задача — обслуживать запросы GET от пользователя и периодически включать и выключать устройства в соответствии с командами, неявными в этих GET-запросах.
Он должен поддерживать точное время/дату, чтобы включать и выключать устройства в соответствии с указаниями. Мои дешевые часы реального времени отстают на пару секунд или больше в день. Так что я полагаю, что буду использовать такой код, как в примере по адресу:
https://randomnerdtutorials.com/esp32-ntp-client-date-time- ардуино-иде/
... в котором Arduino создает клиента для получения времени с NTP-сервера. Раз в день (например, проверяя время RTC на 00:00 в моем «цикле»), я настраиваю RTC с помощью NTP.
Оглядываясь вокруг, кажется, что это нормально для Arduino действовать как клиент, пока он не обслуживает активно клиента (запросы GET пользователя). Имею ли я это право? Нужно ли мне беспокоиться о том, что пользователь может отправить GET, когда это произойдет?
1 ответ
Лучший ответ:
Нет проблем с запуском нескольких серверов и использованием нескольких клиентов с библиотекой WiFi ядра ESP32 для Arduino, так как это не проблема с большинством библиотек WiFi для Arduino (некоторые не могут запускать серверы (TinyGsm) или может работать только один сервер (WiFiEsp(AT)).
Но вам не нужен WiFiClient для времени NTP. Во-первых, потому что NTP работает на UDP, а во-вторых, потому что ESP32 SDK предоставляет SNTP, а ядро ESP32 для Arduino включает в себя функции, представленные в библиотеке примеров ESP32 Пример SimpleTime.
Я использовал код в примере SimpleTime, и он работает как шарм. Спасибо. Я просто буду вызывать getLocalTime раз в день и сбрасывать RTC. Меня не волнует, если я ошибаюсь на несколько секунд, просто не хочу, чтобы они накапливались в течение многих дней., @RustyShackleford
Я был слегка обеспокоен тем, что могу попасть в бесконечный цикл - RTC работает быстро, когда наступает время суток для настройки через SNTP, он сбрасывается на немного более раннее время, а затем снова достигает времени настройки. Но это просто глупо - со второго раза вообще сильно не тормозит., @RustyShackleford
что за РТК? ESP32 имеет встроенный RTC и обновляет его через SNTP., @Juraj
Я использую дешевый ($ 4,95) PCF8523 с батареей., @RustyShackleford
Я не знал об одном на ESP32 (документ Adafruit для HUZZAH32 не упоминает об этом). Похоже, что для любой разумной точности требуется внешний кристалл, и он не работает, если ESP32 выключен. Конечно, если я обычно подключаюсь к Wi-Fi и использую SNTP, возможно, это не имеет значения., @RustyShackleford
- Как справиться с rollover millis()?
- Как получить текущее время и дату в Arduino без внешнего источника?
- Преобразование в Unix Timestamp и обратно
- Как запустить цикл на определенное время?
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Разница между «time_t» и «DateTime»
- Точность часов времени Arduino
- Как преобразовать время EPOCH во время и дату на Arduino?
Вам не нужно беспокоиться. и используйте встроенную функцию SNTP, а не библиотеку Arduino. https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino, @Juraj
это не в режиме точки доступа, не так ли? если да, то это проблема. в противном случае вы можете без проблем запускать произвольные клиентские запросы с сервера., @dandavis
Думаю нет (точка доступа). Мой скетч построен на основе примера SimpleWiFiServer., @RustyShackleford