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

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

?

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

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

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

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

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

    big_alex Гик

    Попробуйте заменить все ESP.reset () на ESP.restart (), я уже когда то делал такое и мне помогло

    https://www.pieterverhees.nl/sparkl...-difference-between-esp-reset-and-esp-restart

    ESP.reset () - это аппаратный сброс, который может оставить некоторые регистры в старом состоянии, что может привести к проблемам, более или менее похоже на кнопку сброса на ПК.
    ESP.restart () - сообщает SDK о перезагрузке, так что это более чистая перезагрузка, используйте ее, если возможно.
     
  2. stasnik

    stasnik Нерд

    а вопрос - а подтягиваюещее сопротивление GPIO16 к земле или к 5v. Стоит 10К к земле.
     
  3. big_alex

    big_alex Гик

    stasnik нравится это.
  4. DiMaro

    DiMaro Нерд


    По сбросу к дефолнтым, может в тему окажутся, мои наблюдения
    по конфигам, как я понимаю у нас три конфига
    Time, Alarm и основной и самый объемный Config
    вот с последним и наблюдаются странности...
    попытаюсь объяснить что заметил
    где и как мы можем повлиять на Конфиг?
    1. Wifi => Сохранить настройки (конфиг переписывается с последующим рестартом девайса)
    2. Mqtt => "Использовать MQTT сервер" при каждой установке/сбросе чекбокса происходит автоматическое обновление Конфига
    тут же ручное обновление Конфига при клацанье на кнопку "Сохранить настройки"
    4. Thing => "Отправлять данные на ThingSpeak" и "Получать данные от ThingSpeak", чекбоксы как и в пункте 2 с автоматическим обновлением Конфига
    тут же ручное обновление "Сохранить настройки ThingSpeak"
    5. Погода => "Получать и выводить погоду на экран" чекбокс с автообновлением аналогично пункту 2
    ручное обновление "Сохранить настройки и обновить погоду"
    в этих пунктах никаких странностей не замечено
    6. Настройки => "Сохранить настройки"
    а вот в последнем пункте, случаются странности
    смотрим лог, лишнее удалил и сам конфиг, естественно, "подрезал"
    по непонятной пока причине, в Конфиг может лететь "пустота" - Save Config:{}
    во всяком случае, так сообщает лог
    ничего не трогаю, только жму кнопку "Сохранить настройки" и на N-раз, записывается нормальный конфиг
    если после "чистого" конфига в логах перегрузить часики, то и происходит сброс "на заводские"
    а если к примеру, после "чистого" конфига в логах из "настроек" перейти на любой из пунктов выше и там сохранить конфиг, то все нормально...
    кнопка очистки памяти (конфигов), имхо нужная штука
    Код (C++):
    ==== START GET SENSORS DATA =======================
    18:33:10>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:34:15>timeDay: 5, volBrightnessD: 2, timeNight: 24, volBrightnessN: 0,  kuOn: 7,  kuOff: 23, rotate: 90, clockNight: 0, buzzerSet: 1
             ......
    18:34:15>Save Config:{}
    ======== START GET SENSORS DATA =======================
    18:34:15>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:34:18>timeDay: 5, volBrightnessD: 2, timeNight: 24, volBrightnessN: 0,  kuOn: 7,  kuOff: 23, rotate: 90, clockNight: 0, buzzerSet:
             ......
    18:34:18>Save Config:{}
    ======== START GET SENSORS DATA =======================
    18:34:18>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:34:19>timeDay: 5, volBrightnessD: 2, timeNight: 24, volBrightnessN: 0,  kuOn: 7,  kuOff: 23, rotate: 90, clockNight: 0, buzzerSet: 1
             ......
    18:34:20>Save Config:{}
    ======== START GET SENSORS DATA =======================
    18:34:20>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:34:22>timeDay: 5, volBrightnessD: 2, timeNight: 24, volBrightnessN: 0,  kuOn: 7,  kuOff: 23, rotate: 90, clockNight: 0, buzzerSet: 1
             ......
    18:34:22>Save Config:{}
    ======== START GET SENSORS DATA =======================
    18:34:22>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:34:24>timeDay: 5, volBrightnessD: 2, timeNight: 24, volBrightnessN: 0,  kuOn: 7,  kuOff: 23, rotate: 90, clockNight: 0, buzzerSet: 1
             ......
    18:34:24>Save Config:{}
    ======== START GET SENSORS DATA =======================
    18:34:25>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:34:26>timeDay: 5, volBrightnessD: 2, timeNight: 24, volBrightnessN: 0,  kuOn: 7,  kuOff: 23, rotate: 90, clockNight: 0, buzzerSet: 1
             ......
    18:34:26>Save Config:{}
    ======== START GET SENSORS DATA =======================
    18:34:27>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:34:28>timeDay: 5, volBrightnessD: 2, timeNight: 24, volBrightnessN: 0,  kuOn: 7,  kuOff: 23, rotate: 90, clockNight: 0, buzzerSet: 1
             ......
    18:34:28>Save Config:{}
    ======== START GET SENSORS DATA =======================
    18:34:29>sensore[0](+corr) = 0.00
    ======== END ==========================================
    ======== START GET SENSORS DATA =======================
    18:36:10>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:36:38>timeDay: 5, volBrightnessD: 2, timeNight: 24, volBrightnessN: 0,  kuOn: 7,  kuOff: 23, rotate: 90, clockNight: 0, buzzerSet: 1
             ......
    18:36:38>Save Config:{"ssidAP":"WiFi-Clock","passwordAP":"12345678",..................}
    ======== START GET SENSORS DATA =======================
     
  5. IvanUA

    IvanUA Гуру

    Если действительно проблема возникает при сохранении конфига, то здесь на ум приходит только мысль о том что очень большой файл и возможно библиотека json как то сбоит. Если так, то по идее начиная от версии 4.5 уберем эту проблему. Там все конфиги более мелкие. Можно сказать так, что каждая веб страница с настройками имеет свой конфиг файл. И да самое главное что json строку для записи в память формирует уже не наша библиотека json, а javascript веб браузера... Вернее наша его тоже формирует. Но очень очень редко...
     
  6. stasnik

    stasnik Нерд

    а есть уже 4.5 для однострочной? дайте поиграться.
     
  7. Pitruxa

    Pitruxa Гик

    Скорее всего так и есть. Я не люблю когда направление ветра показывает стрелками и всегда менял стрелки на описание словами. Так вот, на версии 1х4.4. после этой замены начинаются глюки, в основном со сбросом настроек или их не сохранением. Перебрал много вариантов и вычислил что это происходит именно из-за этого. Оставил направление ветра стрелками - проблема исчезла!
     
  8. DiMaro

    DiMaro Нерд

    Не берусь утверждать что проблема с сохранением конфига из-за его большого размера, или Джойсона или Джаваскрипта... не знаю...
    похоже большое количество отправляемых текстовых аргументов (59 на странице настроек) точно на это влияет
    разбил страницу "настройки" на две группы и сделал отдельно сохранение опшинов для дисплея (39 аргументов) и отдельно сохранение опшинов для датчиков (20 аргументов)
    размер конфига при этом естественно не изменился
    весь день пока работает без сбоев... во всяком случае не получается смоделировать "зависон" как ни старался

    еще вырезал в настройках времени "переход на летнее время" (не актуально уже) и добавил выбор интервала повтора синхронизации с NTP сервером с шагом в 1 час
    Код (C++):
    ======== START GET SENSORS DATA =======================
    18:38:10>sensore[0](+corr) = 0.00
    ======== END ==========================================
    18:39:02>Set NTP Server Name: pool.ntp.org, NTP Time Zone: 3.00, Repeat Interval: 1 hour
    18:39:03>Save Alarm:{"ntpServerName":"pool.ntp.org","timeZone":3,...}

    18:39:03>Start time synchronization with the "pool.ntp.org" server
         Request #1     18:39:04
         Request #2     18:39:05
         Request #3     18:39:06
    18:39:06>Save Time:{"hour":18,"minute":39,"second":6,"year":2021,"month":1,"day":12}
         12.01.2021 DW = 3
         Time Updated Successfully

    ======== START GET SENSORS DATA =======================
    18:39:10>sensore[0](+corr) = 0.00
    ======== END ==========================================

    из хотелок желаю вот такой эффект анимации точек часов

    00 11 00 00 00 11
    00 11 00 00 00 11

    00 00 00 11 00 00
    00 00 00 11 00 00

    пожалуй это самый прикольный вариант из того что ранее приходилось видеть, не считая стандартных, мигающих с частотой 1 Гц
    создается эффект - точка как бы проваливается в бездну, и вновь всплывает в противоположной позиции
    типа семафорного перемигивания но обязательно с флешем
    это на потом хотелка...

    Pitruxa
    наработки остались для посмотреть?
    для восприятия информации так конечно информативнее
    но и обратный эффект может присутствовать, увеличение времени вывода бегущей строки на дисплей, что особенно не приятно для однострочной версии + на более долгое время будет отвлекаться "камень" от других процессов (увеличатся пропуски других событий, например опрос состояния датчиков... хотя наверное и это решаемо)
     

    Вложения:

    • setup.png
      setup.png
      Размер файла:
      21,6 КБ
      Просмотров:
      216
    • time.png
      time.png
      Размер файла:
      13,5 КБ
      Просмотров:
      185
  9. IvanUA

    IvanUA Гуру

    Пока не закончу 4.5 в две строки + еще пару проектов, то не планирую.
    Я же говорю на 4.5 все большие конфиги будут разбиты на маленькие - минимум на каждую страницу по одному)))
    Код (C++):
      SPIFFS.begin();
      loadTime();
      loadSsids();
      loadJssids();
      loadIndexs();
      loadTimes();
      loadWeaths();
      loadLeds();
      loadSenss();
      loadMqtts();
      loadThings();
      loadNmons();
      loadSgps();
      lang();
    Кому как ;)
    ЕСПха сама не плохо справляется с подсчетом времени, так что частые дергания НТП сервера - врядли нужны... И уж тем более если использовать часовой модуль.
    Видео бы.
    Для меня самые интересные варианты - самый первый в этих часах, и Макса с перетеканием половины точки с верху вниз и обратно.
    Сейчас, я стараюсь все процессы максимально отвязать от привязки времени и пользоваться таймерами.... А замена стрелок - сейчас влияет только на длительность бегущей строки.
     
  10. DiMaro

    DiMaro Нерд

    Так я именно об этом и говорил в теме выше
    Сейчас пользователь не может это изменить и интервал по умолчанию составляет 1 час
    Сделал возможность увеличить этот интервал (пока до 12 часов) добавлю еще сутки, трое и выключение
    видео нет, не помню даже где это видел, давно это было, но на тот момент очень понравилось и осело в памяти
    набросал то что имел ввиду, так будет проще, будет время, посмотрите...
    Код (C++):
     
    =============================================================
          <option value = "11"> Семафор H</option>
          <option value = "12"> Семафор L</option>
    =============================================================
        } else if (animPoint == 11 || animPoint == 12) { // Семафор
          if (flash < 250) {
            setCol(digPos[4], 0x60); setCol(digPos[4] + 1, 0x60);
          } else if (flash >= 250 && flash < 500) {
            setCol(digPos[4], 0x00); setCol(digPos[4] + 1, 0x00);
          } else if (flash >= 500 && flash < 750) {
            setCol(digPos[4], 0x06); setCol(digPos[4] + 1, 0x06);
          } else if (flash >= 750) {
            setCol(digPos[4], 0x00); setCol(digPos[4] + 1, 0x00);
          }
        }
    =============================================================
     
     
  11. DiMaro

    DiMaro Нерд

    еще несколько вариантов анимации точек, не шедевры но право на жизнь имеют
    Код (C++):
        } else if (animPoint == 11 || animPoint == 12) { // Семафор
          if (flash < 250) {
            setCol(digPos[4], 0x60); setCol(digPos[4] + 1, 0x60);
          } else if (flash >= 250 && flash < 500) {
            setCol(digPos[4], 0x00); setCol(digPos[4] + 1, 0x00);
          } else if (flash >= 500 && flash < 750) {
            setCol(digPos[4], 0x06); setCol(digPos[4] + 1, 0x06);
          } else if (flash >= 750) {
            setCol(digPos[4], 0x00); setCol(digPos[4] + 1, 0x00);
          }
        } else if (animPoint == 13 || animPoint == 14) { // Семафор2
          if (flash < 250) {
            setCol(digPos[4], 0x66); setCol(digPos[4] + 1, 0x66);
          } else if (flash >= 250 && flash < 500) {
            setCol(digPos[4], 0x66); setCol(digPos[4] + 1, 0x00);
          } else if (flash >= 500 && flash < 750) {
            setCol(digPos[4], 0x66); setCol(digPos[4] + 1, 0x66);
          } else if (flash >= 750) {
            setCol(digPos[4], 0x00); setCol(digPos[4] + 1, 0x66);
          }
        } else if (animPoint == 15 || animPoint == 16) { // Семафор3
          if (flash < 250) {
            setCol(digPos[4], 0x66); setCol(digPos[4] + 1, 0x66);
          } else if (flash >= 250 && flash < 500) {
            setCol(digPos[4], 0x06); setCol(digPos[4] + 1, 0x06);
          } else if (flash >= 500 && flash < 750) {
            setCol(digPos[4], 0x66); setCol(digPos[4] + 1, 0x66);
          } else if (flash >= 750) {
            setCol(digPos[4], 0x60); setCol(digPos[4] + 1, 0x60);
          }
        } else if (animPoint == 17 || animPoint == 18) { // Семафор4
          if (flash < 250) {
            setCol(digPos[4], 0x66); setCol(digPos[4] + 1, 0x00);
          } else if (flash >= 250 && flash < 500) {
            setCol(digPos[4], 0x00); setCol(digPos[4] + 1, 0x00);
          } else if (flash >= 500 && flash < 750) {
            setCol(digPos[4], 0x00); setCol(digPos[4] + 1, 0x66);
          } else if (flash >= 750) {
            setCol(digPos[4], 0x00); setCol(digPos[4] + 1, 0x00);
          }
        }
     
  12. DiMaro

    DiMaro Нерд

    добавил режим тишины (mute). полная блокировка всех звуков.
    в нормальной работе это наверное не особо то и потребуется, но когда занимаешься отладкой, тестированием и часто жмякаешь на кнопки да еще поздно ночью, спасает меня от гнева родных и близких :)
    есть конечно и другие методы... захотелось именно так
     

    Вложения:

    • mute.png
      mute.png
      Размер файла:
      37,4 КБ
      Просмотров:
      259
  13. max50a5

    max50a5 Гик

    В свое время тоже делал чекбокс "Бип при сохранении".
     
  14. IvanUA

    IvanUA Гуру

    4.5 двухстрочная ссылка
    Осталось добавить еще шрифтов и поправить народмон.
    Все остальное должно работать.
    Потестить можно уже сейчас - в этой версии больше глобально ничего меняться не будет.
     
  15. Justasf

    Justasf Нуб

    в однострочной версии 4.4 не могу победить "ночной режим". В любом случае в ночное время показывает информацию с датчиков. Полностью "тихого режима" нет. У всех так? или где надо "подкрутить"?
     
  16. klslab

    klslab Нерд

    Justasf у меня также, уже привык.
     
  17. Justasf

    Justasf Нуб

    у меня есть еще часы на старой версии 11.2019.1X. Там все нормально. А с этой версией спать мешают...
     
  18. klslab

    klslab Нерд

    IvanUA 4.5 двухстрочная ссылка не скачивается "веб-версией Диска используются сторонние файлы cookie"

    все - скачал через диск, веб версия в никакую не давала скачать.
     
    Последнее редактирование: 18 янв 2021
  19. IvanUA

    IvanUA Гуру

    Возможно. У меня сейчас нет возможности проверить. Но в любом случае в версии 4.5 это поправится. Там будет еще для каждого режима выбор когда можно отображать. Как вот здесь
    [​IMG][​IMG]
     
    tosat нравится это.
  20. Al_Nai_ex

    Al_Nai_ex Нуб

    Здравствуйте! Попробовал установить двухстрочную прошивку 4.5. Всё работает вплоть до момента, когда часы начинают отображать "полный" час, т.е., например, 8.00 или 11.00. В этот момент включает баззер и часы перезагружаются. После перезагрузки баззер продолжает пищать. Помогает только ручное нажатие на ресет. Попробовал с несколькими разными модулями ESP8266 - эффект устойчивый.