Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

ESP8266 часы без Wi-Fi

Тема в разделе "NodeMCU", создана пользователем YoAlla1995, 15 июн 2019.

Метки:
  1. YoAlla1995

    YoAlla1995 Новичок

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

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.502
    Симпатии:
    174
    Покажите, что уже сделали, ну просто интересно.
    А так попробуйте millis() использовать.
     
  3. YoAlla1995

    YoAlla1995 Новичок

    Сообщения:
    5
    Симпатии:
    0
    Что именно показать? У меня около 1000 строк кода. Вопрос был вполне конкретный- мне нужна Команда для установки текущего времени. SetTime или какие то тонкости работы с time.h
     
  4. svs2007m

    svs2007m Читатель

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

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    Если без интернета, то нужно видимо добавить внешний чип RTC + батарейку. Подключаются такие чипы обычно по I2C. Когда появляется интернет - читать из него время по SNTP (периодически, раз в час например) и писать в RTC. А отображаемое время читать уже из RTC когда нужно.
     
  6. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    509
    Симпатии:
    50
    1000 строк написали а с такой простой задачей как работа с time.h не разобрались. что то не сходится в ваших показаниях.
     

    Вложения:

  7. YoAlla1995

    YoAlla1995 Новичок

    Сообщения:
    5
    Симпатии:
    0
    Насчет RTC я в курсе, и я использовала его в одном из предыдущих проектов. Но две проблемы- этот модуль гигантского размера и не помещается у меня в коробочку (но это еще можно решить, купив мини моуль), и у меня нет свободных пинов. Придется какие то устройства отключать, что бы подключить RTC.
     
  8. YoAlla1995

    YoAlla1995 Новичок

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

    funny59 Новичок

    Сообщения:
    18
    Симпатии:
    0
    Тут только внешний RTC, больше никаких вариантов. Можно было бы использовать прерывания по таймеру, но там время будет убегать довольно сильно (на пару секунд в минуту примерно)
     
  10. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.502
    Симпатии:
    174
    Чем вам не нравится мой вариант? Лень считать секунды из миллисекунд и дальше минуты, часы, дни?
     
  11. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.135
    Симпатии:
    226
    @YoAlla1995 если у вас нет модуля rtc, то только запоминать то время которое ввели и текущее значение счётчика millis. А потом как сказал @CodeNameHawk, вычитаем, прибавляем, переводим. Но будет не очень точно.
     
  12. svs2007m

    svs2007m Читатель

    Сообщения:
    79
    Симпатии:
    9
    Попробуйте поискать в примерах библиотеки timelib.h Там вроде было "ручной ввод" точки отсчета.
     
  13. rst

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    Точность то тут при чём? Точность обычного RTC (не калиброванного и не термокомпенсированного/термостатированного) будет примерно такая же как у обычного таймера - зависящая от точности задающего генератора.
    Другое дело, что внешний RTC (с батарейкой) будет хранить время и при выключенном питании. Чего не даст никакой внутренний таймер. Если только в ESP8266 нет своего встроенного RTC с внешним входом питания?
     
  14. rst

    rst Читатель

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

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

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    Где это ваше число будет храниться при выключенном питании уже придумали? И не просто храниться, а инкрементироваться каждую секунду. Вот именно такое место хранения и называется "RTC-чип".
     
  16. nikolz

    nikolz Гуру

    Сообщения:
    4.136
    Симпатии:
    431
    на каком языке программирования надо решения?
    СИ или LUA?
     
  17. enjoynering

    enjoynering Авторитетный участник сообщества

    Сообщения:
    509
    Симпатии:
    50
    1000 строк для esp8266. Не первый проект и тадам - отмазка о занятых пинах.

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

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

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

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    1000 строк элементарно быдлокодится чайником при помощи копипаста, там где профи напишет одну строку в цикле. ;)
     
  19. svs2007m

    svs2007m Читатель

    Сообщения:
    79
    Симпатии:
    9
    Как вариант. На своем мобильнике поднимите точку доступа. При "достаточной близости" мобильника ваш ESP после конекта с его сетью, может взять с инета все что вам нужно.
     
  20. nikolz

    nikolz Гуру

    Сообщения:
    4.136
    Симпатии:
    431
    на СИ будет примерно так:
    -----------------------
    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);
    }
     

Поделиться этой страницей