Максимально точно идущие и простые часы-как?
- Войдите на сайт для отправки комментариев
Вс, 11/07/2021 - 00:11
Всем добрейшего!
Написал я тут часы одни...Просто часы-под esp32. Каждые 10 минут будут синхронизироваться с мировым сервером времени (для точности) по wifi. Ничего полезного не делают-тупо комнатные часы :-)
Интересно другое: есть у меня подозрение, что они будут идти весьма произвольно и подглючивать. Оно бы конечно и наплевать-учитывая синхронизацию с сервером...Но вот как правильней сделать, на ваш взгляд? ;-)
Опять же повторюсь -ничего полезного и критичного не делают. Просто интересный момент(для меня)- хотелось бы узнать мнение народа, по этому поводу....
Вот такой колхозец от меня:
void loop() { void timer (); } void timer ()// функция-таймер. По сути - обычные часы { if ( (millis()-localSeconds)>=1000 )//при некотором подтормаживании //системы-тут могут быть проблемы- //тогда надо будет реализовать иначе { localSeconds = millis(); if (seconds<59) { seconds = seconds+1; } else if (seconds==59)//можно и без else if - это просто для наглядности { seconds = 0; if (minutes<59) { minutes = minutes+1; } else if (minutes==59)//можно и без else if - это просто для наглядности { minutes = 0; if (hours<12) { hours = hours + 1; } else if (hours==12)//можно и без else if - это просто для наглядности { hours = 1; } } } } }
тьху, вот так надо, опИсался :-B :
В esp32 есть модуль часов реального времени. Можно припаять точный кварц и настроить. Будет точно, но это не твой уровень.
Ну видимо придется тогда ограничиться максимально частым обновлением времени с сервера...
По сути служба реалного времени должна работать от внутреннее генератора с калибровкой по сети, только не знаю, как это все реализовано в ардуино. И это не миллис, а time(), или что там в с стандартное.
Да, я уже тоже, когда задумался над точным временем, понял, что это будут дебри те еще... Просто я тут думал вот над чем: ну ок, у меня система не загружена особо - чего там, часы обычные...Ну будет накапливаться ошибка в миллисекунды/десятки/даже сотни миллисекунд за 10 минут(допустим). Это всё неважно-будет ведь обновляться с сервера...
Опять же, когда подумаешь об обновлении - глюки и тормоза сети тоже скажутся. Нет, в данном конкретном случае мне всё равно. Просто получается такая куча допущений, что внутренний цензор рвет волосы. И не только на голове :-D
Максимально простые часы, 720 байт размером.
Интересно другое: есть у меня подозрение, что они будут идти весьма произвольно и подглючивать. Оно бы конечно и наплевать-учитывая синхронизацию с сервером...Но вот как правильней сделать, на ваш взгляд? ;-)
Если хотите, чтобы часы шли максимально точно, нужно заменить:
localSeconds = millis();
на
localSeconds += 1000;
Ну а вообще, IMHO правильнее разделить задачи учета и индикации времени. Т.е. учет времени нужно вести в секундах (например, юникстайм) и только для индикации выделять из этих секунд часы, минуты и секунды в данной минуте.
Всем добрейшего!
Написал я тут часы одни...Просто часы-под esp32. Каждые 10 минут будут синхронизироваться с мировым сервером времени (для точности) по wifi. Ничего полезного не делают-тупо комнатные часы :-)
Не. Сервера такое не любят, может и забанить.. Делай так. Часы просто типа как написал, но конечно localSeconds +=1000. И два запроса на сервер с некоторым солидным интервалом. Дальше по времени которое намерили твои часы и правильному времени рассчитай коэффициент коррекции. Дальше веди время с учетом этого коэфициента. Периодически, раз в сутки например повторяй определение этого коэффициента.
Реализация NTP для ESP8266 мне не понравилась, делал свое.