При создании проекта IoT, который зависит от времени суток, вы хотите, чтобы он показывал правильное время без необходимости ручной настройки. Казалось бы, это было бы легко сделать с ESP32, поскольку он имеет встроенную беспроводную связь и может подключаться к Интернету.

Однако, несмотря на то, что существует множество онлайн-примеров, показывающих, как настроить ESP32 для подключения к Интернету и синхронизации времени со временем сервера, большинство из них требуют, чтобы вы два раза в год переводили летнее время вручную, что кажется довольно нелепым для любого электронного устройства 21-го века. устройство.

Здесь мы представим вам решение, которое позволит ESP32 показывать правильное время в любой точке мира круглый год. Но сначала давайте взглянем на пример SimpleTime в Arduino IDE и посмотрим, что он делает и как мы можем его улучшить.

Пример SimpleTime

Если вы используете Arduino IDE с ESP32, вы обнаружите, что у него есть пример под названием Простое время это выглядит так:

Вы можете получить доступ к этому примеру, настроив Arduino IDE для использования платы ESP32 из

instagram viewer
Инструменты меню, например, выбрав Модуль разработки ESP32. Сделав это, вы можете получить доступ к примеру SimpleTime из Инструменты меню под Примеры,ESP32,Время, и Простое время.

Можно было бы ожидать, что этот официальный пример продемонстрирует наилучший способ работы, но в этом примере есть одна огромная проблема. Чтобы настроить часовой пояс и летнее время, вы должны изменить следующие две строки:

const long gmtOffset_sec = 3600;
const int daylightOffset_sec = 3600;

Установка часового пояса с помощью gmtOffset_sec неудобно, потому что вам нужно найти смещение по Гринвичу для вашего конкретного местоположения. Вы можете сделать это, проконсультировавшись с Веб-сайт среднего времени по Гринвичу. К счастью, вам нужно сделать это только один раз. То дневной светOffset_sec однако представляет собой более серьезную проблему, поскольку вам необходимо настраивать его два раза в год. Это может потребовать, чтобы вы снимали свой проект и подключали его к Arduino IDE два раза в год, что делает его совершенно неподходящим для проекта IoT, который вы хотите настроить и забыть.

В поисках лучшего подхода

Итак, как лучше настроить часовой пояс и переход на летнее время? Чтобы ответить на этот вопрос, обратите внимание на то, как ваш ПК с Windows справляется с ситуацией:

Обратите внимание, что вместо смещения времени от GMT мы сообщаем Windows, какой у нас часовой пояс и местонахождение — в нашем случае. Горное время (США и Канада)— а затем поставьте галочку Автоматическая настройка часов на летнее время. С этого момента Windows обрабатывает его автоматически круглый год. Это то удобство, которое мы хотим от нашего ESP32.

Связанный: Как настроить часы в системном трее в Windows

Создание базы данных местоположений для ESP32

Чтобы сделать то же самое на ESP32, нужно немного потрудиться. мы начали с Сообщение блога в котором описывалось, как настроить часовой пояс с помощью переменной среды TZ. Для нашего местоположения это оказалось МСТ7МДТ, М3.2.0, М11.1.0, согласно этому таблица часовых поясов. Хотя это действительно решило проблему ручной настройки летнего времени, мы хотели чтобы процесс был проще, без необходимости искать строку цифр и букв для каждого место расположения.

Мы преобразовали данные с веб-сайта в базу данных, которую вы можете использовать непосредственно в своих эскизах Arduino. Следовать эта ссылка для прямой загрузки zip-файла со скетчем Arduino.

Сама база данных хранится в файле time_zone.h. Используя базу данных, код для SimpleTime выглядит так:

Мы выделили изменения в примере SimpleTime желтым цветом. Эта строка позволит скетчу использовать базу данных:

#include "time_zones.h"

Эта строка настраивает ваше местоположение:

const char* location = "Америка/Денвер";

Существует 461 возможная локация. Вы можете найти доступные места, взглянув на time_zone.h файл или просмотрев список часовых поясов на этот сайт.

Наконец, следующая строка указывает ESP32 синхронизировать время с интернет-сервером, используя протокол сетевого времени (NTP):

configTimeWithTz (getTzByLocation (местоположение), ntpServer);

Конкретный сервер времени в Интернете можно настроить с помощью следующей строки, хотя настройки по умолчанию должны работать нормально для вас:

const char* ntpServer = "pool.ntp.org";

Вы также хотите добавить информацию о своей беспроводной точке доступа в следующие две строки:

const char* ssid = "ВАШ_SSID";
const char* пароль = "ВАШ_ПАРОЛЬ";

Заменять ВАШ_SSID с названием вашей беспроводной сети и YOUR_PASS с паролем, используемым для подключения к нему.

Связанный: Способы безопасной настройки беспроводного маршрутизатора в качестве точки общего доступа

Заканчивать

После того, как вы завершили этапы настройки, загрузите скетч в ESP32, и он будет использовать правильное время круглый год без какого-либо вмешательства!

Хотя этот код дает вам хорошую отправную точку, существуют более удобные способы сделать то же самое. Например, вы можете позволить пользователю настраивать все с веб-страницы, а не делать это во время компиляции. Это требует немного больше работы, так как вам нужно будет сделать следующие вещи в вашем скетче Arduino:

  1. Настройте ESP32 как точку беспроводного доступа для первоначальной настройки.
  2. Запустите веб-сервер, чтобы предоставить пользователю страницу конфигурации.
  3. Создайте HTML-форму, чтобы позволить пользователю вводить информацию о беспроводной сети и выбирать свое местоположение.
  4. Создайте код для обработки выбора пользователя и сохраните его в энергонезависимой памяти.
  5. При включении платы:
    • Чтение конфигурации из энергонезависимой памяти
    • Подключитесь к беспроводной сети и синхронизируйте время

Проект, который демонстрирует эти шаги, является Часы Дали ESP32. Именно этот проект привел нас к поиску лучшего способа синхронизации времени на ESP32.

Кредит изображения: Марсио Тейшейра/Flickr

Проверьте исходный код для часов Дали ESP32, чтобы увидеть, как отобразить полнофункциональную веб-страницу конфигурации. На странице конфигурации отображается раскрывающееся меню, позволяющее пользователю выбрать свое местоположение и часовой пояс, а также также позволяет пользователю устанавливать время вручную с помощью виджета времени и календаря для неподключенного альтернатива!

Синхронизация сетевого времени на основе местоположения на ESP32

Теперь у вас есть вся информация, необходимая для автоматической установки часов вашего ESP32 на правильное время, а также для перехода на летнее время. Это идеально подходит для проектов IoT, которые вы не хотите настраивать вручную.

7 интересных проектов, использующих ESP32 для создания композитного видео

Если вы ищете интересные проекты с ESP32, вы попали по адресу.

Читать дальше

доляТвитнутьЭлектронное письмо
Похожие темы
  • сделай сам
  • ESP32
  • Интернет вещей
Об авторе
Марсио Тейшейра (опубликовано 4 статьи)

Я создатель с особым интересом к программному обеспечению с открытым исходным кодом, электронике, 3D-печати, компьютерной графике и ретро-вычислениям.

Другие работы Марсио Тейшейры

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться