Когато създавате IoT проект, който зависи от времето на деня, искате той да показва правилното време, без да се налага ръчни корекции. Изглежда, че това би било лесно за постигане с ESP32, тъй като има вградена безжична връзка и може да се свърже с интернет.

Въпреки това, въпреки че има много онлайн примери, които показват как да конфигурирате ESP32 да се свързва с интернет и да синхронизира времето с време сървър, повечето от тях изискват ръчно да коригирате лятното часово време два пъти годишно, което изглежда доста нелепо за всяка електронна система от 21-ви век устройство.

Тук ще ви представим решение, което ще позволи на ESP32 да показва точното време за всяко място по света през цялата година. Но първо, нека да разгледаме примера SimpleTime в Arduino IDE и да видим какво прави и как можем да го подобрим.

Примерът за SimpleTime

Ако използвате Arduino IDE с ESP32, ще откриете, че има пример, наречен SimpleTime това изглежда така:

Можете да получите достъп до този пример, като конфигурирате Arduino IDE да използва платка ESP32 от

instagram viewer
Инструменти меню, като например като изберете ESP32 Dev модул. След като го направите, можете да получите достъп до примера SimpleTime от Инструменти меню под Примери,ESP32,време, и Просто време.

Може да се очаква този официален пример да демонстрира най-добрия начин за правене на нещата, но в този пример има един огромен проблем. За да конфигурирате часовата зона и лятното часово време, трябва да промените следните два реда:

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

Задаване на часовата зона с помощта на gmtOffset_sec е неудобно, защото трябва да намерите GMT ​​изместване за вашето конкретно местоположение. Можете да направите това, като се консултирате с Уебсайт за средното време по Гринуич. За щастие, трябва да направите това само веднъж. В daylightOffset_sec представлява по-голям проблем обаче, защото трябва да го коригирате два пъти годишно. Това може да наложи да премахнете проекта си и да го свържете към Arduino IDE два пъти годишно, което го прави напълно неподходящ за IoT проект, който искате да настроите и забравите.

Търсите по-добър подход

И така, какъв би бил по-добрият начин за конфигуриране на часовата зона и лятното часово време? За да отговорите на този въпрос, не търсете повече от това как вашият компютър с Windows се справя със ситуацията:

Забележете как вместо да се налага да му даваме времеви измествания спрямо GMT, ние казваме на Windows каква е нашата часова зона и местоположение - в нашия случай Планинско време (САЩ и Канада)— и след това поставете отметка в квадратчето Автоматично настройване на часовника за лятно часово време. От този момент нататък Windows го обработва автоматично за нас целогодишно. Това е видът удобство, което искаме от нашия ESP32.

Свързани: Как да персонализирате часовника в системната област на Windows

Създаване на база данни за местоположение за ESP32

Правенето на същото нещо на ESP32 изисква известна работа. започнахме с а блог пост който описва как да настроите часовата зона с помощта на променливата на средата TZ. За нашето местоположение се случи така MST7MDT, M3.2.0, M11.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* password = "ВАШИЯТ_PASS";

Сменете YOUR_SSID с името на вашата безжична мрежа и YOUR_PASS с паролата, използвана за свързване с него.

Свързани: Начини за сигурно конфигуриране на безжичен рутер като обществена точка за достъп

Завършване

След като завършите стъпките за конфигуриране, качете скицата в ESP32 и тя ще използва правилното време през цялата година без никаква намеса!

Въпреки че този код ви дава добра отправна точка, има по-удобни за потребителя начини да постигнете същото. Например, може да искате да позволите на потребителя да конфигурира всичко от уеб страница, вместо да го прави по време на компилиране. Това е доста повече работа, тъй като ще трябва да направите следните неща във вашата скица на Arduino:

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

Проект, който демонстрира тези стъпки е ESP32 Часовник Dali. Именно този проект ни накара да намерим по-добър начин за синхронизиране на времето на ESP32.

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

Разгледайте програмен код за ESP32 Dali Clock, за да видите как да покажете пълнофункционална страница за уеб конфигурация. Страницата за конфигурация показва падащо меню, което позволява на потребителя да избере своето местоположение и часова зона и също така позволява на потребителя да зададе часа ръчно с помощта на приспособление за време и календар, за несвързан алтернатива!

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

Вече имате цялата информация, която ви е необходима, за да можете автоматично да настроите часовника на вашия ESP32 на точния час, както и да го настроите за лятно часово време. Това е идеално за IoT проекти, които не искате да се налага да коригирате ръчно.

7 интересни проекта, които използват ESP32 за генериране на композитно видео

Ако търсите интересни проекти с ESP32, вие сте на правилното място.

Прочетете Следващото

Дялтуителектронна поща
Свързани теми
  • Направи си сам
  • ESP32
  • Интернет на нещата
За автора
Марсио Тейшейра (публикувани 4 статии)

Аз съм производител със специален интерес към софтуер с отворен код, електроника, 3D печат, компютърна графика и ретро-компютри.

Още от Марсио Тейшейра

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!

Щракнете тук, за да се абонирате