ESP8266 + FLProg – Пользовательские системные параметры и синхронизация с сервером точного времени

oycaewu5gt1nhfczrh2cmffzbcq.jpeg

В этом уроке мы рассмотрим использование пользовательских системных переменных для связи web интерфейса настройки и схемы проекта. Так же попробуем настроить синхронизацию системных часов контроллера с серверами точного времени.
Данный урок создан для версии 3.1.4, которая сейчас находится в предрелизовом тестировании. Скачать её можно здесь. Более подробно о проекте FLProg можно узнать из блога компании на хабре, сайта проекта и форума. Кроме того на канале ArduinoProm можно посмотреть огромное множество видео уроков.

В качестве основы будем использовать проект, созданный на прошлом уроке.

Для начала создадим в три системных пользовательских параметра, в которых будет хранится текущее системное время контролера, часовой пояс, и адрес сервера точного времени, с которым будем синхронизироваться. Для этого находим ветку »Добавить параметр» в дереве проекта в узле »Пользовательские параметры».

lyx5ntbovumhnei8so2minrob54.png

Откроется окно диалога добавления нового системного параметра. Заполним его.

80jwjrlmkkztgrzt0mshwl5-vp8.png

В поле »Имя» введём имя параметра. Выберем тип параметра — »String». Значение этого параметра будет динамически изменяться в процессе работы, поэтому отключим сохранение значение параметра в EEPROM. Поэтому же не задаем значение по умолчанию. Максимальную длину строки оставим 20 (вывод будет в виде 01:01:01 01–01–2018 то есть 19 символов).

Таким же образом добавим второй параметр

amh80c9qpt1y5r9pipq-piiefli.png

Только оставим сохранение в EEPROM, что бы контроллер запоминал введённый нами сервер, и зададим сервер по умолчанию.

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

73uenw99ca7saku05vzp3ezbmvc.png

Тип параметра Integer, Обязательно сохранять в EEPROM, значение по умолчанию, на Ваш выбор (у меня это 4 часа).

В результате мы получили три пользовательских параметра

lz0k3nb1x-dlyh5s-99nfdmorcu.png

Переходим к схеме прошивки.

В библиотеке функциональных блоков находим блок »Получение времени с NTP сервера» и претаскиваем его на рабочую область схемы

gmvgnj5gj9bf1yi7wbeou8o1m5c.png

Двойной клик по этому блоку открывает редактор параметров блока.

pgu5frxmuzknqwmy9kg19pxq2py.png

Рассмотрим настройки поподробнее.
NTP сервер — адрес сервера с которого будет браться точное время. Можно задать как константу. Можно выбрать из списка стандартных. Я все проверял — работают. Для выбора нажмите кнопку »Стандартные сервера».

alhaysghnxmdqcavlgr76ez5jte.png

Но поскольку мы хотим »по взрослому» задавать адрес сервера из web интерфейса ставим галочку в чек бокс »Вход»

Период запроса до получения первого ответа — периодичность, с которой контроллер будет »стучаться» на сервер пока не получит время в первый раз. Оставляем константой значение раз в 30 секунд. Возможно так же установить вход, тогда на него необходимо будет подавать значение в миллисекундах.

Период запроса после получения первого ответа — как часто контроллер будет уточнять время у сервера. Оставляем по умолчанию, раз в полчаса. Так же можно задавать через вход, в миллисекундах.

Часовой пояс — Поскольку сервер отдаёт время по Гринвичу, этим параметром задаем смещение часового пояса в часах. Мы решили задавать этот параметр через web интерфейс, поэтому ставим галочку в чек бокс »Вход»

Выход «Год», Выход «Месяц», Выход «День», Выход «Час», Выход «Минута», Выход «Секунда» — в данном уроке они нам не нужны, поэтому галочки не устанавливаем.

Выход «Unix Time» — этот выход нам не нужен, галочку не ставим (если честно я пока не придумал User Case для него. Но на всякий случай сделал, вдруг, кому то пригодится).

Итого у нас получилась такая настройка блока

uv2vr5ydtv3ydsqnhmg7j0cak8a.png

Соответственно изменился и блок на схеме прошивки

r893fhyrnb9dhachn96t_lzvvoy.png

Найдем в библиотеке блок »Чтение системного параметра» и перетаскиваем его на схему.

rzxkolpex43huthy5djzgzdzf0k.png

Двойной клик по этому блоку, и начинаем настраивать его параметры.

Сначала нажимаем кнопку выбора системного параметра.

bu0mrnqa5sy8ve5jrin0vwtpcos.png

Открывается окно выбора системного параметра. Выбираем параметр »Сервер точного времени»

cngrqu7jxusawjc1ffxqix-rzxm.png

На этом настройка блока закончена.

Располагаем удобно блоки и соединяем выход блока »Чтение системного параметра» со входом »Server» блока »Получение времени с NTP сервера»

numjm1ryhg5wjv4b0nonhv0q__4.png

Перетаскиваем на схему ещё один блок »Чтение системного параметра» и настраиваем его на чтение параметра »Часовой пояс».

uzeccxkp6w3jsztvq24mfzh_izc.png

Соединяем выход этого блока со входом »TimeZone» блока »Получение времени с NTP сервера»

a5ac-ou4d6owjk62ywaftowyfu8.png

Добавляем на схему новую плату. Для этого нажимаем кнопку »Добавить плату»

r09ybryrhgdualvx6bkntejmdvg.png

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

txj1zmktcnq0ovkic-nrohy-yxu.png

Вытаскиваем на схему на вторую плату блок »Получение данных с часов точного времени»

gv1icfwvtsakil2ky8pkah_9q6g.png

Двойным кликом по нему вызываем диалог настройки блока. Нажав кнопку »New» вызываем диалог выбора часов и выбираем »Системные часы контроллера».

phyzq-b8kbsdqbsmkqzx2tfxbpq.png

kjzpwbyipn3vf73pxqnmmaffkhu.png

Затем ставим галочку »Выход «Часы»»

h0pmad5q_1rsr0qkvrstl9xc_7m.png

И заканчиваем редактирование блока.

Затем копируем этот блок ещё пять раз, переставляя в настройках каждого из них галочку выхода в последовательности Минута — Секунда — День — Месяц — Год.

ge3qdze0jw-pftr_anh7dhpxwuo.png

Теперь вытаскиваем на схему из библиотеки блок »Конвертация строк».

ewntqie0dpqaoqbrpoqrwvwlngs.png

И в его настройках выбираем тип конвертации »Время»

qars3hdfliocyi6qw7zrz-kriam.png

Копируем блок ещё пять раз, и собираем схему

wdcnq7vqhjffyx1q96koyadtjw0.png

Переносим на схему из библиотеки блок »Сложение строк»

bvttxo_fw3ziqfc5syr4pbrgm3u.png

В настройках блока задаём 11 входов.

4hbc30jrwltqt1fodggv0seue7i.png

И соединяем блоки согласно схеме

irz2zgwken0iq8ehm_90w1kzv0y.png

На свободных входах блока задаём константы

Вход 2 — »:»
Вход 4 — »:»
Вход 6 — Пробел
Вход 8 — »-»
Вход 10 — »-»

Для задания константы производим клик правой кнопкой мыши на свободном входе и из выпавшего меню выбираем »Вставить константу»

e3oya7bbojdilo70nuf1n15hzk8.png

Откроется окно ввода константы, где в поле »Значение по умолчанию» вводится необходимая константа

olws981oen_wpbcrfappmdagpgk.png

Теперь вытаскиваем из библиотеки на схему блок »Запись системного параметра»

yl3mzt3hjhtqyw__ajgk13tg_dc.png

В настройках блока снимаем галочку »Вход разрешения записи» и выбираем параметр »Дата — Время»

wl6havdy8cinfwlpl4tfvp4lck8.png

Соединяем выход блока »Сложение строк» со входом блока »Запись системного параметра»

d9-r3ywv-yuaxbr_rctbvvbngqi.png

В результате у нас должна получится такая схема (Для наглядности развернём первую плату).

4u9leq4v053jejpyi08yluy3jrm.png

Со схемой прошивки закончили, возвращаемся к дереву проекта.

На главную страницу Web интерфейса добавим три параметра (как это сделать смотри в предыдущем уроке).

Параметр 1 — Системный параметр »Дата — Время», тип параметра — »Текст», лейбла — »Время»

Параметр 2 — Системный параметр »Сервер точного времени», тип параметра — »Поле ввода», лейбла — »Сервер»

Параметр 3 — Системный параметр »Часовой пояс», тип параметра — »Поле ввода», лейбла — »Часовой пояс»

hjq-kfpifn8uv1zz7p5i_btkgim.png

Включаем на странице кнопку »Save»

6ythkknyo5ka-t7bu5nmpmtybgi.png

Заливаем программу в контроллер, и смотрим, что у нас получилось на главной странице (как это сделать, смотри предыдущий урок)

Сразу после подключения — с сервером точного времени ещё не синхронизировались

phtk1grovjrkefkfbbhbdsykwke.png

Через минуту (обновили страницу) — прошла синхронизация

77dsw4un9uabbmcy_rqcyhgohpo.png

Сменили часовой пояс и нажали кнопку сохранить

ruwhx9fj6pkv9jt107nnyd409mg.png

Проект, созданный на уроке можно скачать здесь.

© Habrahabr.ru