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, когда это произойдет?

, 👍0

Обсуждение

Вам не нужно беспокоиться. и используйте встроенную функцию SNTP, а не библиотеку Arduino. https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino, @Juraj

это не в режиме точки доступа, не так ли? если да, то это проблема. в противном случае вы можете без проблем запускать произвольные клиентские запросы с сервера., @dandavis

Думаю нет (точка доступа). Мой скетч построен на основе примера SimpleWiFiServer., @RustyShackleford


1 ответ


Лучший ответ:

2

Нет проблем с запуском нескольких серверов и использованием нескольких клиентов с библиотекой 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