Часы на NodeMCU Lua + MAX7219 минус все лишнее.

Тема в разделе "Глядите, что я сделал", создана пользователем ИгорьК, 4 сен 2018.

Метки:
  1. ИгорьК

    ИгорьК Гуру

    Это мусор, хвостом остался. Уберу.

    Для нормального запуска часов не возбраняется указывать зону времени.
    Она действительно присутствует в двух местах. В init.lua глобальная переменная удаляется после выполнения _setuser.lua, где либо будет новая, либо дефолтная.

    Да, это осталось от старых версий часов, но я не тестировал работу без указания зоны времени. Пусть она будет. Или не будет - смотрите сами.


    Это может влиять. Я поправлю.

    Не нужен народный мониторинг - комментируем ключи, и таблица ни на что не влияет.

    (Сейчас в другом проекте, голова уже далека от этих часов. Я сделал то их давненько, минимум полгода, только опубликовал недавно)
     
    Последнее редактирование: 14 ноя 2024
    Voik нравится это.
  2. Voik

    Voik Гик

    Ещё я создал переменную для регулирования периода отображения на дисплее времени (часов с минутами), т.к., по-моему, это прежде всего часы.

    Если кому интересно:
    в _setuser.lua дописать переменную kaunter=20
    20 (примерно 20 секунд) можно менять как хотите, но натуральное число.

    В main.lua находим
    строку 8 и меняем local counter = 0 на local counter = -1 * kaunter
    в строке 92 меняем counter = 1 на counter = -1 * kaunter

    Хотя можно и без переменной просто подкорректировать в main.lua строки 8 и 92 на отрицательное число.
     
    Последнее редактирование: 14 ноя 2024
    ИгорьК нравится это.
  3. ИгорьК

    ИгорьК Гуру

    В функции tiktak() переменная counter показывает когда меняются показания. Можно поменять числа и условия показа там как нравится.

    Например, выводить прогноз погоды только если ожидается дождь. Или если ожидается изменение температуры от текущей больше чем на 5 градусов
     
    Voik нравится это.
  4. Voik

    Voik Гик

    Скажите пожалуйста в чём разница между
    dat.nghtmod и dat.shownight?

    Ещё есть в коде dat.askw. Используется в это1 версии?
    это в тестах
     
    Последнее редактирование: 15 ноя 2024
    ИгорьК нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Это предпосылка к рефакторингу. :) Остаток от прошлых задумок. Ни в чем не участвует.

    Смотрите как удобно отвечать на такие вопросы в VS Code:
    upload_2024-11-15_20-50-42.png

    Видно, что переменная есть только в файле установки и старом main.lua, что остался в папке test.


    - это рабочая переменная для показа или не показа остальных данных кроме времени ночью.

    Спасибо вам огромное за внимание к коду.

    ============================


    Часы рождались так.

    Сначала была ESP8266 и интерес научиться работать с MAX7219 - сделал.
    Надо что-то отражать: время - сделал.
    Можно забрать данные с народного мониторинга - забрал.
    Можно забрать данные с MQTT - забрал.
    Можно отправлять данные на брокер и в Home Assistant - сделал.
    Можно отправить данные на Народный мониторинг - отправил.
    Можно взять погоду с сервера - взял.
    Включил несколько датчиков, оставил DS18b20.

    Посмотрел на другие часы - подход изменился. Потом опять изменился. Вы сделали ряд дельных предложений и замечаний.

    С другой стороны - проект достаточно большой.

    То есть, никакой особой концепции изначально не было. Lua позволяет дописывать и дописывать код. При этом могут оставаться хвосты. Вот и это такой хвост.

    Хотя на ESP32 код значительно переписан и не просто для МК, а где-то наполовину концептуально.

    То есть, никакой особой изначальной концепции
     
    Последнее редактирование: 15 ноя 2024
    Voik нравится это.
  6. Voik

    Voik Гик

    Благодарю Вас за ответ!
    У меня ещё вопрос про синхронизацию времени: как часто идёт обращение к ntp серверу?
    Ибо в коде я нашёл только единыжды: в _init.lua time.initntp()
     
    ИгорьК нравится это.
  7. ИгорьК

    ИгорьК Гуру

    Модуль time подразумевает только запуск службы ntp, синхронизация осуществляется автоматически.

    Кстати, ко мне приехала пара SCD30 :) Скоро можно ожидать применения.
     
    Voik нравится это.
  8. Voik

    Voik Гик

    Пробовал все рекомендации не помогает.
    :(
    IMG_20241118_164355_850.jpg
    Ну это уже не важно, ведь есть вин10 и vscodium.
    Тогда я не буду эксперименты ставить. Подожду от Вас результат.
     
  9. ИгорьК

    ИгорьК Гуру

    Таки на картинке у вас что-то странное.

    Неработоспособность ESPLorer заключается, обычно, в невозможности соединиться с платой или закинуть в нее что-то. А здесь соединение есть, а плата шлет в порт странную информацию.
     
    serg3295 и Voik нравится это.
  10. Voik

    Voik Гик

    Решил я сократить кол-во обращений к погодному серверу (хоть и даётся 1000 в сутки).

    Все данные, и текущие и прогноз можно брать одним запросом.

    Что сделал?

    Для этого нужно в main.lua закомментировать
    Код (C++):
    -- wt[1] = { '_getnowOM.lua', 1205, 0 }
    Следующу строку исправить wt[2], цифры (1205) поправить по вкусу:
    Код (C++):
    wt[1] = { '_getForecastOM.lua', 1205, 0 }
    Далее строки править:
    wt[3] wt[2] и т.д.

    В _getForecastOM.lua после строки 47
    Код (C++):
    if not answtb[1] then prt'\t\t\t\t\t\t\t\t\t!!!No Forecast Data'; return end
    добавить:
    Код (C++):
     --** Начало правки
    wth.tempOM = tonumber(answtb[1]) --температура сейчас

    offset = string.match(str, '_seconds":(%d*)')
    if offset then wth.offset = tonumber(offset) end
    print("\n**************************\nПолучил offset\t" .. wth.offset ..
    "\n**************************\nПолучил температура сейчас\t" ..  wth.tempOM ..
    "\n**************************")
    --** Конец правки
    Print - для контроля, можно опустить.

    Ещё рекомендую заменить в строке запроса:
    &timezone=Europe%2FMoscow&
    на
    &timezone=auto&
    Критика приветсвуется.
     
    Последнее редактирование: 19 ноя 2024 в 13:49
    ИгорьК нравится это.
  11. Voik

    Voik Гик

    Вполне возможно, что платка глючит, потому что на другом компе тоже не подключается. Хотя другие прошивки встают и функционируют.
     
    ИгорьК нравится это.
  12. ИгорьК

    ИгорьК Гуру

    Что сразу критика. Нормальное решение.
     
    Voik нравится это.
  13. ИгорьК

    ИгорьК Гуру

    Вообще отличное решение. Все данные, и текущие и прогноз можно брать одним запросом. Замылен у меня глаз. Здорово что вы кодом занимаетесь.
     
    Voik нравится это.
  14. serg3295

    serg3295 Гуру

    @Voik, попробуйте стереть флеш с помощью esptool. Иногда помогает.

    <путь к >/esptool.py -p <порт> -b 460800 --before default_reset --after hard_reset --chip esp32 erase_flash
     
    Voik и ИгорьК нравится это.
  15. Voik

    Voik Гик

    Пробовал и Вашу рекомендацию: стирает.
    esptool-erase.JPG
    Потом шьёт.
    esp-flashtool.JPG
    Но esplorer выдаёт абракадабру на этом мк. Платка, видимо, дефективна или руки кривы...

    Хотя другая платка, что уже давно в работе уже, открылась в esplorer! Теперь можно и на вин7 эксперементировать.
    succes.JPG
    Благодарю!

    З.Ы. Увидел ошибку: шью неправильно.
     
    Последнее редактирование: 20 ноя 2024 в 22:13
    ИгорьК нравится это.
  16. ИгорьК

    ИгорьК Гуру

    Файл lfs.img правильно будет удалить с МК.
     
    Voik нравится это.
  17. Voik

    Voik Гик

    Осуществил индикатор оставшегося времени до показа другой информации:
    [​IMG]

    После всей этой затеи перестал работать blink...

    Что сделал:
    В main.lua заменил
    Код (C++):
    outtime = '' .. gethournow .. ':'
    на
    Код (C++):
    outtime = '*' .. gethournow .. ':'
    после
    Код (C++):
    counter = counter + 1
    добавил
    Код (C++):

    --**** начало правки

      if counter == -17 then digl["*"]={'11','11','11','11','11','11','11','10'};minnow = 61; end
      if counter == -16 then digl["*"]={'11','11','11','11','11','11','11','00'};minnow = 61; end
      if counter == -15 then digl["*"]={'11','11','11','11','11','11','10','00'};minnow = 61; end
      if counter == -14 then digl["*"]={'11','11','11','11','11','11','00','00'};minnow = 61; end
      if counter == -13 then digl["*"]={'11','11','11','11','11','10','00','00'};minnow = 61; end
      if counter == -12 then digl["*"]={'11','11','11','11','11','00','00','00'};minnow = 61; end
      if counter == -11 then digl["*"]={'11','11','11','11','10','00','00','00'};minnow = 61; end
      if counter == -10 then digl["*"]={'11','11','11','11','00','00','00','00'};minnow = 61; end
      if counter == -9 then digl["*"]={'11','11','11','10','00','00','00','00'};minnow = 61; end
      if counter == -8 then digl["*"]={'11','11','11','00','00','00','00','00'};minnow = 61; end
      if counter == -7 then digl["*"]={'11','11','10','00','00','00','00','00'};minnow = 61; end
      if counter == -6 then digl["*"]={'11','11','00','00','00','00','00','00'};minnow = 61; end
      if counter == -5 then digl["*"]={'11','10','00','00','00','00','00','00'};minnow = 61; end
      if counter == -4 then digl["*"]={'11','00','00','00','00','00','00','00'};minnow = 61; end
      if counter == -3 then digl["*"]={'10','00','00','00','00','00','00','00'};minnow = 61; end
      if counter == -2 then digl["*"]={'00','00','00','00','00','00','00','00'};minnow = 61; end

    --**** конец правки
     
    Про переменную kaunter я писал ранее. Важно, чтоб она была 17 или больше.

    Далее поправил, чтоб перебор условий начинался с 0. Ранее было 8.
    Код (Text):
      if counter == 0 then
      if wth.tempout or wth.narod or wth.tempOM then
      dofile '__printtempnow.lua'
      else
      counter = 3
      end
      end
      if counter == 3 then
      if wth.tempFCOM then
      dofile '__printtempFC.lua'
      else
      counter = 6
      end
      end
    И т.д.

    Добавил в _setuser.lua ещё знак (но это не важно, т.к. он всё равно перерисовывается)
    Код (Text):
    digl["*"]={'11','11','11','11','11','11','11','11'}
    Вообще-то я символы вынес в ртдельный файл.
    Прикрепил тут main.lua и символы. Переименовать надо.

    Вроде ничего не забыл...
     

    Вложения:

    • numbrid.txt
      Размер файла:
      1,6 КБ
      Просмотров:
      1
    • main.txt
      Размер файла:
      5,5 КБ
      Просмотров:
      1
    Последнее редактирование: 22 ноя 2024 в 07:52
    ИгорьК нравится это.
  18. ИгорьК

    ИгорьК Гуру

    "Ну вы, блин, даете!" :)

    ---------------------

    Кстати, у вас синяя матрица. У меня такая перевернута относительно красной. Вы перевернули отображение, или у вас оно обычное?

    У меня синяя матрица работает перевернутой, но чет лом выкладывать объяснения.

    -------------------------

    И цифры уже перерисовали :)
     
  19. Voik

    Voik Гик

    Изображение обычное. Но синяя матрица очень плохо ночью, поэтому она мной используется для экспериментов.
    Сделал чуть повыше и чуть поуже.
     
    ИгорьК нравится это.
  20. Voik

    Voik Гик

    Всё-таки вариант с индикатором со стороны минут лучше, по-моему.
    Кино:


    Файлы прикерпил.
     

    Вложения:

    • main.txt
      Размер файла:
      5,6 КБ
      Просмотров:
      2
    • numbrid.txt
      Размер файла:
      1,6 КБ
      Просмотров:
      3
    Последнее редактирование: 22 ноя 2024 в 09:05
    ИгорьК нравится это.