Часы на esp8266 и max7219 + android управление

Тема в разделе "Глядите, что я сделал", создана пользователем IvanUA, 28 авг 2017.

?

Вы повторили это проект?

  1. Нет (просто ознакомился)

    35 голосов
    13,2%
  2. Да, один раз (попробовал)

    111 голосов
    41,9%
  3. Да, не однократно

    123 голосов
    46,4%
Можно выбрать сразу несколько вариантов.
  1. IvanUA

    IvanUA Гуру

    Так все же, зачем соседке отключать DHCP? В чем сакральный смысл?
    в 4.5 как раз и будет реализована возможность хранить до 10 избранных сетей с их паролями...
    Перебор? Не совсем.
    Код устроен таким образом что он не будет перебирать все известные сети, а будет сравнивать, если избранная сеть есть в списке отсканированных сетей, то только тогда будет пробовать к ней коннектиться...
    Код (C++):
    if((statusUpdateNtpTime==0 || (minute==02 && second==43)) && !alarm_stat) timeUpdateNTP();
    || - это логическое или. Из этого следует что синхронизация с НТП сервером происходит либо каждую минуту при statusUpdateNtpTime==0 или каждый час во 2 минуту 43 секунды...
    Если по стечению обстоятельств именно в этот момент к примеру выводится строка, то естественно синхронизации не будет... Можно конечно вызывать данную функцию к примеру по таймеру, но тогда это грозит тормозами бегущей строки если она таки будет пробовать выводиться в это время.... Если у вас есть идеи как лучше организовать данную синхронизация, то я буду благодарен если поделитесь...
     
  2. urg2000

    urg2000 Нерд

    Добрый вечер.
    Поставил прошивку 2Х4.5
    1. Погоду выставил русский начала погоды со слова Зараз
    2. У меня датчик bme280 выставил температуру, влажность и давление, везде одно значени, или я что-то не так выставил?
    3. Народмон тоже не заработал.

    Прошивка 2Х4.4 в наличии есть?
     

    Вложения:

  3. max50a5

    max50a5 Гик

    Есть такое, Иван в курсе.
    Да, нужно было так: tD, h, P. А так у Вас три температуры.
    Не проверял.
    https://github.com/IZ76/VZ_Clock/tree/master/VZ_Clock_x2_v4.4
     
    Последнее редактирование: 3 янв 2021
  4. urg2000

    urg2000 Нерд

    2Х4.4 bin фаил нужен
    функция на экране и её длительностью тоже что-то нето
     
  5. max50a5

    max50a5 Гик

    Держите.
    Эта настройка пока не работает.
     

    Вложения:

    urg2000 нравится это.
  6. DiMaro

    DiMaro Нерд

    IvanUA, спасибо за пояснения, стало понятнее, я даже не удосужился толком почитать про логические операторы... смотрел на интуитивном уровне
    но, выходит что-то в этой логике не так работает, во всяком случае у меня
    или сказывается отсутствие какой-то периферии?

    на всякий случай повторюсь, ESP голая
    любая предполагаемая периферия и дисплей в том числе, отсутствуют
    дисплей уже на почте, жду когда работники ОПС из праздничного запоя на работу выйдут после 5-го января
    3231 "приползет" не скоро, есть россыпью устаревшие 1307, но нет желания на праздники заморачиваться сборкой RTC модуля

    хотел прицепить сюда почти 10-ти часовой лог работы устройства, но не вижу на этом движке такой возможности
    что вижу...
    погоду тянет каждые 15 мин стабильно
    датчики каждую минуту, с редкими выпадениями (возможно это из-за строки упомянутой Вами выше)
    автосинхронизацию c НТП не вижу вообще, кроме подозрительного, по непонятным пока причинам, реконекта в 16:41:29
    и соответственно, с последующим за ним, разовой штатной синхронизацией, других NTP запросов в логе не наблюдаю

    возможно я что-то "накуралесил" с правками логирования, и подключения к сети
    на всякий случай завтра "накачу" неправленую, последнюю однострочную версию и проверю
    наработок и идей по синхронизации пока нет, надо понять действительно ли это баг и более детально разобраться в логике программы. тогда уже может что-то и посоветую
     
  7. DiMaro

    DiMaro Нерд

    Последнее редактирование: 4 янв 2021
  8. IvanUA

    IvanUA Гуру

    По логу конечно есть вопросы... Вернее все как вы описали... Но тут надо разбираться почему так происходит. Есть предположение что в момент пропусков бежит строка. Проверить это можно легко. В коде найти функцию которая выводи бегущую строку. В начале и в конец функции поставить вывод времени и описание события (старт/финиш бегущей строки) в сериал порт... Тогда по логу будет понятно когда бежит строка, и не она ли является причиной пропусков...
     
  9. urg2000

    urg2000 Нерд

    С прошивкой 2Х4.4 народмон не работает для датчика тоже нужно что-то выбрать?

    Благодарю
     

    Вложения:

  10. DiMaro

    DiMaro Нерд

    IvanUA, откомпилировал и накатил 4.4 версию в два модуля однострочку и двустрочку
    двустрочка, как и задумано каждый час в 2 мин 43 сек выполняет синхронизацию с NTP сервером
    однострочка - нет
    это меня успокоило, я не виноват :)

    сравниваю...
    однострочка если удалить "ненужное" чтоб не мешало думать
    Код (C++):
      if (millis() > (minCount2 + 60000)) {
      minCount2 = millis();
      if ((statusUpdateNtpTime == 0 || (minute == 02 && second == 43)) && !alarm_stat) timeUpdateNTP();
      }
    двустрочка
    Код (C++):
      if(((statusUpdateNtpTime == 0 && second == 43) || (minute == 02 && second == 43)) && !alarm_stat) timeUpdateNTP();
    сдается мне, minCount2 с приращением в одну минуту, с таким разрешением не позволяет делать секундную выборку... позже проверю


    Add
    Заработала автоматика
    Код (C++):
    ======== START GET SENSORS DATA =======================
    23:01:10    sensore[0](+corr) = 0.00
    ======== END ==========================================
    ======== START GET SENSORS DATA =======================
    23:02:10    sensore[0](+corr) = 0.00
    ======== END ==========================================

    23:02:43    Start time synchronization with the "pool.ntp.org" server
        Proba #1    23:02:44
        Proba #2    23:02:45
        Proba #3    23:02:45
    23:02:45    Save Time: {"hour":23,"minute":2,"second":45,"year":2021,"month":1,"day":4}
    23:02:45    04.01.2021 DW = 2
        Time Updated Successfully

    ======== START GET SENSORS DATA =======================
    23:03:10    sensore[0](+corr) = 0.00
    ======== END ==========================================
     
    Последнее редактирование: 5 янв 2021
  11. evilscorp

    evilscorp Нуб

    На однострочной 4.4 настройки не сохраняются, на других так же? Как можно сделать что бы настройки при отключении питания сохранялись?
     
  12. IvanUA

    IvanUA Гуру

    У версий х1 и х2 разный подход к опрасам функций и выводу информации.
    в х2 - еще старый, и он привязывается жетско ко времени
    в х1 - уже нет жесткой привязки ко времени, есть свои таймеры

    Попробуйте сделать так:
    Код (C++):
    if (millis() > (minCount2 + 60000)) {
      minCount2 = millis();
      if ((statusUpdateNtpTime == 0 || minute == 02 &) && !alarm_stat) timeUpdateNTP();
      }
    Если дадите лог, то возможно там что то будет понятно. Вы прошивку компилируете или льете бинарник?
     
  13. evilscorp

    evilscorp Нуб

    [QUOTE="IvanUA,
    Если дадите лог, то возможно там что то будет понятно. Вы прошивку компилируете или льете бинарник?[/QUOTE]

    Лью бинарник, как лог снимать незнаю, попробую разобраться
     
  14. DiMaro

    DiMaro Нерд

    Иван, если из уcловия исключить секунды, то скорее всего сработает... с некоторыми условностями
    в данный момент в двухстрочной ЭТО как-то еще работает... "как-то" - потому что заметил все же присутствуют пропуски. четный час/нечетный час, видимо как карта ляжет
    в однострочной не работает вообще (10 часовой лог это подтверждает)
    У меня другое предложение, необходимо сделать что-то типа отложенного задания...
    достаточно добавить один флаг и все решается малой кровью...
    набросал... по логам все "четко", мне нравиться... ни одного пропуска.
    завтра на почте забираю дисплей и как все остальные, буду смотреть и в него, а не только логи... потестирую
     
  15. DiMaro

    DiMaro Нерд

    Забрал на почте дисплей, подключил
    Первое впечатление - прикольно, офигенно!
    После некоторого времени поигравшись в настройках с разными плюшками постепенно "накатывает" понимание - а четыре "кубика", то маловато :)
    Надо докупить и наверное по максимальному на двухстрочный вариант
    по синхронизации:
    к флагу statusUpdateNtpTime добавил еще два флага (можно только один, один из них полностью повторяет первый, можно упразднить, но в дальнейшем это может потребоваться для более сложных алгоритмов)
    Скорее даже добавил для удобства понимания алгоритма, по имени флага.
    и дефайню для тестов период повтора синхронизации
    флаги обозвал - switchUpdateNtpTime, служит переключателем интервалов с первичной синхронизации с частотой повтора 1 минута на постсинхронизацию с любым удобным интервалом определенным в дефаайне. Последний я бы предоставил возможность пользователю самому выбирать в вебморде. Например в минутах. Один час оптимально при отсутствии RTC модуля, а с модулем, так и и вовсе можно раз в сутки, неделю... месяц
    и beginUpdateNtpTime флаг сигнализирующий нам о необходимости, в свободное от других, более важных задач, выполнить синхронизацию
    Код (C++):
    //------------------------------------------------------------------------------------------------
    bool statusUpdateNtpTime = 0;      // если не "0" - то последнее обновление времени было удачным
    bool beginUpdateNtpTime = 0;       // раз флаг
    bool switchUpdateNtpTime = 0;      // два флаг... вообще это жесть какая-то, господа ардуинщики, целый байт занимаем ради одного битика
    #define intervalNTPtimeUpdate 10   //период обновления времени NTP сервера в минутах (не знаю, дефайнить это надо или как-то иначе принято... на ассемблере как-то проще, две дерективы запомнил и программируй)
    //------------------------------------------------------------------------------------------------
    //unsigned long minCount2;
    unsigned long countUpNTPtime;       //счетчик синхронизации времени с NTP сервером (уже имеем, просто переименовал для более легкого понимания) он теперь два интервала времени отчитывает
    //------------------------------------------------------------------------------------------------
    в цикле немного редактирую условие
    Код (C++):
    // --------- Обработка таймаутов синхронизации с NTP сервером ----------------

        if (!switchUpdateNtpTime) {
          if (millis() > (countUpNTPtime + 60000)) { //мы тут, если по какой-то причине не удалась синхронизация в сетапе после подключения к беспроводной сети или ошибка синхронизациий в процессе работы
            countUpNTPtime = millis();
            beginUpdateNtpTime = 1; //каждую минуту ставим задачу на выполнение синхронизации
          }
        }
        else
        {
          if (millis() > (countUpNTPtime + intervalNTPtimeUpdate * 60000)) { // мы тут если синхронизация с NTP сервером после старта или в процессе работы прошла успешно
            countUpNTPtime = millis();
            beginUpdateNtpTime = 1; //ставим задачу на выполнение синхронизации (каждый час или другой выбранный интервал определенный в дефайне, вебморде конфиге и т.д.)
          }
        }
    тут же, в основном цикле ниже, или где угодно (задача то поставлена) добавляем...
    Код (C++):
        if (beginUpdateNtpTime == 1 && !alarm_stat) timeUpdateNTP();
    после того как оттикает таймер, при первой же возможности выполняетcя синхронизация, теперь за нас только alarm_stat решает, когда ей быть выполненой

    и, соответсвенно, необходимо сбросить/установить флаг/флаги в...
    Код (C++):
    void timeUpdateNTP() {
    ...
      statusUpdateNtpTime = 1;
      switchUpdateNtpTime = 1;
      beginUpdateNtpTime = 0;
    ...

      statusUpdateNtpTime = 1 //если синхронизация успешна
      switchUpdateNtpTime = 1 //если синхронизация успешна
     
      statusUpdateNtpTime = 0 //если синхронизация не удалась
      switchUpdateNtpTime = 0 //если синхронизация не удалась
    }
    повторяю, statusUpdateNtpTime и switchUpdateNtpTime это по сути один флаг и добавления в целом считаю не сильно затратными по ресурсам
    тестировал с разными интервалами 10 мин и 60 мин. синхронизация работает стабильно... пока
     
  16. Retro

    Retro Нерд

    Иван, спасибо за проделанную работу. Одно-строчный вариант я уже повторял, только не ваш. Ваш решил попробовать именно из-за двух строк. Прошил сразу последнюю версию 4.5
    Ни в коем случае не критика, а простые пожелания к тому что хотелось бы.
    1. Если в пароле Wi-Fi сети есть знак "&", то подключение не происходит. Понятно почему так происходит - символ "&" является операцией языка программирования.
    2. Так же не подключается к Wi-Fi сетям с скрытым SSID.
    3. Отображение погоды не отключается. Убираю соответствующую галочку, отправляю данные в контроллер и после обновления страницы галочка на месте.
    4. Не совсем понятны пункты настроек "Анимация точек". Я правильно понял, что это точки разделяющие часы и минуты? Перебрал все варианты что там есть и кроме скорости моргания ничего не меняется. Как минимум при настройке "вращение" должно было что-то поменяться, но у меня просто обычное моргание.
    5. Хотелось бы иметь режим моргания точек - одна секунда горят : одна секунда не горят. Я так понял, что это режим "Простая L", но он работает как не странно, только если часы не подключились к Wi-Fi. Если часы подключились к Wi-Fi то в режиме "Простая L" точки не горят одну секунду, а горят всего половину секунды (когда это вижу у меня начинает дергаться глаз :D). И еще - когда часы не подключены к Wi-Fi точка моргает всего одна.
    6. За что отвечает настройка "Анимация секунд"? У меня при выборе всех параметров нет никаких изменений. Я так понял что-то должно меняться когда включен режим "Часы в две строки" ?
    7. Вращение. Не увидел смысла вращать отдельные модули в сроке. Было бы полезно перевернуть целиком строку на 180 градусов. Например это поможет сократить длину проводов при стыковке модулей.
    8. Повторно подключается к Wi-Fi через несколько секунд после того как уже был успешно к нему подключен.
     
  17. IvanUA

    IvanUA Гуру

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

    ПС... Сегодня на однострочной заметил слет настроек к дефолтным... Надо подумать и наверное отказаться от форматирования памяти по кнопке или как то еще изменить эту процедуру((((
     
  18. Retro

    Retro Нерд

    Я понял. Поторопился :) Попробую версию 4.4
     
  19. Retro

    Retro Нерд

    Что-то лыжи не едут :( Прошил версию 4.1 - данные с датчика не приходят. Датчик DHT22 с Ali, уже распаянный на плате с нужной обвязкой. Датчик 100% рабочий, проверил его в другом проекте. Проект залил на туже NodeMcu. Может я пытаюсь не на ту платформу шить данный скетч? Вот ссылки того что я покупал:
    https://aliexpress.ru/item/32656401198.html?spm=a2g0s.9042311.0.0.274233edyxLWXv
    https://aliexpress.ru/item/33037061522.html?spm=a2g0s.9042311.0.0.274233eds5pIDs&sku_id=67335069429
    Очень хочется часы высотой в два юнита :) В один из далека плохо видно.
     
  20. stasnik

    stasnik Нерд

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