• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 часы без Wi-Fi

YoAlla1995

New member
Всем привет! Пытаюсь разбираться в ESP8266 NodeMcu уже около года, поэтому, вопрос очень простой и одновременно- сложный. В интернете полно информации как на ESP8266 сделать часы с синхронизацией по wi-fi - и это разумно. Раз она умеет подключаться к интернету, то пусть сама берет время.
Моя система будет работать в основном, без интернета (wi-fi на борту используется для доступа к вэб-интерфейсу), а часы очень нужны для отсчета времени. Вопрос такой- как сделать часы? Например, что бы в мониторе порта отображалось время? Я понимаю что копать нужно в time.h но я в этом не сильна.
Просьба камнями не кидать- за год первый раз обращаюсь на форум, потому что уже голову сломала. Всем спасибо)
 

YoAlla1995

New member
Покажите, что уже сделали, ну просто интересно.
А так попробуйте millis() использовать.
Что именно показать? У меня около 1000 строк кода. Вопрос был вполне конкретный- мне нужна Команда для установки текущего времени. SetTime или какие то тонкости работы с time.h
 

svs2007m

Active member
Если с интернетом засада то лучше докупить модуль часов реального времени (стоит копейки). А так без синхронизации вряд ли что-то стоящее получится.
 

rst

Member
Моя система будет работать в основном, без интернета (wi-fi на борту используется для доступа к вэб-интерфейсу), а часы очень нужны для отсчета времени. Вопрос такой- как сделать часы?
Если без интернета, то нужно видимо добавить внешний чип RTC + батарейку. Подключаются такие чипы обычно по I2C. Когда появляется интернет - читать из него время по SNTP (периодически, раз в час например) и писать в RTC. А отображаемое время читать уже из RTC когда нужно.
 

enjoynering

Well-known member
1000 строк написали а с такой простой задачей как работа с time.h не разобрались. что то не сходится в ваших показаниях.
 

Вложения

YoAlla1995

New member
Если с интернетом засада то лучше докупить модуль часов реального времени (стоит копейки). А так без синхронизации вряд ли что-то стоящее получится.
Насчет RTC я в курсе, и я использовала его в одном из предыдущих проектов. Но две проблемы- этот модуль гигантского размера и не помещается у меня в коробочку (но это еще можно решить, купив мини моуль), и у меня нет свободных пинов. Придется какие то устройства отключать, что бы подключить RTC.
 

YoAlla1995

New member
1000 строк написали а с такой простой задачей как работа с time.h не разобрались. что то не сходится в ваших показаниях.
Если я тебе по скайпу позвоню- и докажу что я девушка? ЧТо будет? Вы только считаете, что девушки глупые и ничего не смыслят в программировании- а сами даже простейшую задачу решить не можете. К тому же- не важно кто сколько строк написал- я бы не обращалась сюда, если бы этот ответ можно было бы найти в гугле. Моя ситуация требует не стандартного решения, и в этом поможет только форум.
При синхронизации с интернетом- мой ESP берет число текущей даты (времени) с сервера. Это число например 65748465758. Потом я его перевожу в понятное человеку значение и вытаскиваю нужные данные. А мне нужно, что бы ESP брал число из моей переменной и продолжал отсчет времени именно с нее.
Оказывается, задача не такая уж и простая, если никто не может предложить решение, которое до этого не попробовала бы я сама.
 

funny59

New member
Тут только внешний RTC, больше никаких вариантов. Можно было бы использовать прерывания по таймеру, но там время будет убегать довольно сильно (на пару секунд в минуту примерно)
 

Сергей_Ф

Moderator
Команда форума
@YoAlla1995 если у вас нет модуля rtc, то только запоминать то время которое ввели и текущее значение счётчика millis. А потом как сказал @CodeNameHawk, вычитаем, прибавляем, переводим. Но будет не очень точно.
 

svs2007m

Active member
Попробуйте поискать в примерах библиотеки timelib.h Там вроде было "ручной ввод" точки отсчета.
 

rst

Member
@YoAlla1995 если у вас нет модуля rtc, то только запоминать то время которое ввели и текущее значение счётчика millis. А потом как сказал @CodeNameHawk, вычитаем, прибавляем, переводим. Но будет не очень точно.
Точность то тут при чём? Точность обычного RTC (не калиброванного и не термокомпенсированного/термостатированного) будет примерно такая же как у обычного таймера - зависящая от точности задающего генератора.
Другое дело, что внешний RTC (с батарейкой) будет хранить время и при выключенном питании. Чего не даст никакой внутренний таймер. Если только в ESP8266 нет своего встроенного RTC с внешним входом питания?
 

rst

Member
Насчет RTC я в курсе, и я использовала его в одном из предыдущих проектов. Но две проблемы- этот модуль гигантского размера и не помещается у меня в коробочку
RTC - это не модуль, а микросхема. Если мало места, зачем тогда лепите из отдельных модулей? Сделайте свою плату, на которую и поставьте нужные чипы. Но в любом случае - место будет нужно для батарейки. И намного больше чем для чипа.

и у меня нет свободных пинов. Придется какие то устройства отключать, что бы подключить RTC.
Если нет свободных пинов - значит изначально неправильно построили схему устройства. А если уже есть какие-то устройства на I2C-шине, туда же можно и RTC добавить, не расходуя лишних пинов.
 

rst

Member
А мне нужно, что бы ESP брал число из моей переменной и продолжал отсчет времени именно с нее.
Где это ваше число будет храниться при выключенном питании уже придумали? И не просто храниться, а инкрементироваться каждую секунду. Вот именно такое место хранения и называется "RTC-чип".
 

nikolz

Well-known member
Всем привет! Пытаюсь разбираться в ESP8266 NodeMcu уже около года, поэтому, вопрос очень простой и одновременно- сложный. В интернете полно информации как на ESP8266 сделать часы с синхронизацией по wi-fi - и это разумно. Раз она умеет подключаться к интернету, то пусть сама берет время.
Моя система будет работать в основном, без интернета (wi-fi на борту используется для доступа к вэб-интерфейсу), а часы очень нужны для отсчета времени. Вопрос такой- как сделать часы? Например, что бы в мониторе порта отображалось время? Я понимаю что копать нужно в time.h но я в этом не сильна.
Просьба камнями не кидать- за год первый раз обращаюсь на форум, потому что уже голову сломала. Всем спасибо)
на каком языке программирования надо решения?
СИ или LUA?
 

enjoynering

Well-known member
1000 строк для esp8266. Не первый проект и тадам - отмазка о занятых пинах.

Как можно писать под камень не знать его переферию. Не знать, что на i2c шину можно повесить 100500 устройств?

Не знать что можно открыть исходники библиотеки time.h и посмотреть как это все уже было сделано 10 лет тому назад.

Вы точно все сами пишите или за вас пишут?
 

svs2007m

Active member
Как вариант. На своем мобильнике поднимите точку доступа. При "достаточной близости" мобильника ваш ESP после конекта с его сетью, может взять с инета все что вам нужно.
 

nikolz

Well-known member
на СИ будет примерно так:
-----------------------
os_timer_t timer;
uint8 sec; //секунды
uint8 min; //минут
uint8 hour; //часы
uint32 day; // дни
//------------------------------
void timer_cb(){
sec++;
if (sec>60) {min++; sec=0;}
if (min>60) {hour++; min=0;}
if (hour>24) {day++; hour=0;}
}
//-----------------------
void user_init(){
sec=0; min=0; hour=0; day=0;
os_timer_setfn(&timer,(os_timer_func_t *)timer_cb,0);
os_timer_arm(&timer,1000,1);
}
 
Сверху Снизу