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

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

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

    ИгорьК Гуру

    Внимание! В продаже имеются матрицы с нормальными, повернутыми на 90 и на 180 градусов модули. Это устройство - под нормальные.

    Последняя версия от 29.05.2023.

    часы - антипод проекту от Ивана.




    Варианты корпусов:

    upload_2023-7-12_13-29-47.png


    [​IMG]

    [​IMG]

    [​IMG]

    [​IMG]

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

    Часы не имеют цели показать крутость их хозяина и, следовательно:

      • не имеют кучи железа (а вместе с ним и лишних, нигде не применимых данных );
      • не имеют веб-интерфейса - руками в текстовом редакторе забьете пару настроек;
      • не имеют бегущей строки, потому что мы не в метро (но иногда по приколу анимационно сдвигают информацию);
      • не имеют будильников (смартфон всегда удобнее);
      • не имеют памятных дат (смартфон всегда гораздо удобнее);
      • не имеют... еще, наверное, чего-то.
    Часы заходят в Интернет и:
      • показывают время секунд через 5-7, обновляют все данные в течение чуть больше минуты после включения;
      • поддерживают точное время;
      • узнают текущую погоду и ее прогноз на сегодня и завтра;
      • допрашивают Народный мониторинг о состоянии до пяти датчиков, выбирают наименьшую и выдают ее за текущую уличную, если она не отличается от значения сервера более чем на три градуса. Иначе берутся данные сераера;
      • получают уличную температуру и температуру в бане (парной) от брокера по протоколу MQTT;
      • выводят температуру в парной заместо всего, когда она выше 40 градусов, когда выше 60 - мерцают;
      • шлют на брокер тучу информации;
      • можно корректировать код (например, перечень датчиков народного мониторинга) по сети;
      • если присоединить датчик DS18b20 - считывают значение температуры в комнате.
    Часы
      • с 0 до 16 часов выдают время, температуру на улице и прогноз на сегодня;
      • с 16 до 19 выдают время, текущую температуру на улице и ожидаемую минимальную температуру сегодня;
      • с 19 часов выдают время, текущую температуру на улице и прогноз НА ЗАВТРА.
    Данные DS18b20 выдаются постоянно, если он присоединен.

    И все :) Стабильно и надежно.

    Соединять:

    upload_2018-11-6_12-43-23.png

    Кидать матрицу на 3.3 вольта для уменьшения ее свечения, особенно от NodeMCU, категорически не рекомендую! Стабилизатор модуля не рассчитан на ток матрицы. Даташит MAX7219 требует для питания именно 5 вольт!

    Отсутствие веб-интерфейса позволяет вам почувствовать себя не только крутыми диайвайщиками, но и ушлыми программистами.


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

    Четыре простых шага.


    Чайники Медные загляните сюда.

    Скачайте прилагаемый архив.

    1. Уточните свои данные .

    В текстовом редакторе (лучше - notepad++) вам надо открыть и уточнить один файл:
    _setuser.lua .

    2. Залейте прошивку в модуль - файл в отдельной папке с расширением bin.

    При помощи https://github.com/marcelstoer/nodemcu-pyflasher заливаете бинарный файл (папка bin), не забыв там же сначала потереть для надежности память. Все отображено на картинке ниже:

    [​IMG]



    3. Залейте скрипты в модуль.

    При помощи ESPlorer https://esp8266.ru/esplorer/ закатываете все файлы из комплекта в модуль. Бинарник, что в отдельной папке, тащить в модуль не надо!

    Вот как работать с ESPlorer. Это пояснение назначений кнопок:
    [​IMG]

    Для заливки файлов пользуйтесь кнопкой Upload...

    upload_2018-9-4_16-23-52.png


    4. Проверяем и Запускаем устройство.

    4.1. Обновляем перечень файлов кнопкой "Reload", что справа
    upload_2018-9-4_16-24-38.png


    4.2. Запускаем на исполнение файл _init.lua
    Видим:
    upload_2018-9-4_12-3-22.png


    4.3. Все получилось? Перезагружаем и жмем кнопку _renemeinit.lua. Через 15 секунд и в правом окне ESPlorer видим перезагрузку модуля.

    После этого ваши часы с присоединением любого питания начинают тикать сами.
    Если переедете в другой город - включите ESPlorer, нажмете _renemeinit.lua еще раз, и часы не будут запускаться - можно вносить изменения.

    Все. Кто не понял - Иван ждет!


    Все версии внешне выглядят одинаково и имеют одинаковый функционал.

    Третья дополнительно берет текущую температуру с народного мониторинга. Но, как показала практика, apixu показывает ее не хуже. Поэтому и первой версии вполне достаточно.


    Настройка Народного Мониторинга
    здесь.

    Отформатировать модуль кнопкой "Format" в ESPlorer (Не забудьте сохранить ключ Apixu) и повторить все что написано в этом сообщении заново. Теперь зона времени устанавливается в файле setglobals.lua.
    =======================
    Фонты и надписи править здесь. Поиграйтесь в жирные цифры:

    [​IMG]

    Все равно потом вернетесь (по умолчанию в этих часах) к изящным 5х7:


    [​IMG]




    Корпус здесь. И здесь от abf. И здесь от Securbond

    О точности и стабильности.

    Фонт цифр от abf.
     

    Вложения:

    Последнее редактирование: 12 июл 2023
    Un_ka, NikitOS, KindMan и 6 другим нравится это.
  2. DetSimen

    DetSimen Guest

    Напомнило

    All_I.jpg
     
    NikitOS, sys, issaom и 2 другим нравится это.
  3. SergeiL

    SergeiL Оракул Модератор

    Как по мне, то 5 секунд время, 5 секунд температура на улице, и то порой напрягает.
    Порой ждешь 5 секунд - посмотреть погоду или время. :)
    А бегущие строки раз в минуту - вообще за пределом моего понимания.
    Это же какой темперамент должен быть ;)
     
    NikitOS нравится это.
  4. ИгорьК

    ИгорьК Гуру

    ~15 секунд время, все остальное по 2,5 секунды.

    upload_2018-9-4_13-16-16.png

    В файле setglobals.lua регулируется общее время цикла. Но от него отнимаются 2,5 секундные показы других данных.
     

    Вложения:

    Последнее редактирование: 12 июл 2023
  5. SergeiL

    SergeiL Оракул Модератор

    У меня часы в "большой" комнате - гостиной, и в коридоре показывают и время и температуру за бортом.
    5 секунд время, 5 сек актуальная температура на улице, в тени.
    И то и то - востребовано на 100%, особенно при сборе утром.
    В детской и спальне - только время.
    Главное их не нужно настраивать - поставил и забыл.
    На всех прописан один и тот же ntp сервер, и все работает как "часы" :).
     
    ИгорьК нравится это.
  6. ИгорьК

    ИгорьК Гуру

    Прогноз погоды утром тоже нужен. Мне. Температура внутри... Не всегда.
    На заметку. Глазу нужно 2 - 2,5 секунды, чтобы фиксировать информацию. Но надо за что-то цепляться не менее 7 секунд.

    Поэтому, режим 7/2,5 может оказаться удачнее чем 5/5
     
    SergeiL нравится это.
  7. SergeiL

    SergeiL Оракул Модератор

    Температура и влажность, внутри, идет только в OH, для анализа.
    На индикатор не вижу смысла выводить.
    А сообщить Пушем из OH, что температура в детской ниже 20 С - это к.м.к - полезно!
     
  8. SergeiL

    SergeiL Оракул Модератор

    Нужно проверить!
     
  9. не имеют нормальных шрифтов...

    видно тоже нужно свой вариант делать )
     
  10. ИгорьК

    ИгорьК Гуру

    Ну, тебе то не угодить :)
    Покажешь нормальный - за 20 минут сделаю. Персонально для тебя.
    Из 20 минут - 10, чтобы понять что есть "нормальный".
     
  11. прям персонально для меня?
    [​IMG]

    вообще надо бы на трех сегментах часы.

    а так да, часы должны оставаться часами.
     
  12. SergeiL

    SergeiL Оракул Модератор

    Как по мне - самый читаемый - 7-сегментов:)
    IMG_3690.JPG
    IMG_3691.JPG
     
    sys и ИгорьК нравится это.
  13. ИгорьК

    ИгорьК Гуру

    Для тебя. Вот щаз повторю эти у \$&^&щные цифры.
     
    SergeiL нравится это.
  14. ИгорьК

    ИгорьК Гуру

    Код (Lua):
    dat = {}
    dat.anm = true -- animation
    dat.int = 20 -- interval
    dat.askn = false -- narodmon
    dat.akmq = false -- mqtt
    dat.narod = '85.0'
    dat.apixu = '85.0'
    dat.mqtemp = '85.0'
    dat.ds18b20 = false
    dat.mnow = '0000'
    dat.askw = 51
    dat.intens = false
    dat.dot1 = 0
    dat.dot2 = 0
    dat.dotp = false
    dat.lasttime = ''
    dat.codef = 0
    dat.codenow = 0
    dat.maxtemp = '85.0'
    dat.mintemp = '85.0'

    dig = {}
    dig['1'] = {0x18,0x38,0x18,0x18,0x18,0x18,0x18,0x3c}
    dig['2'] = {0x38,0x6c,0x6c,0x0c,0x18,0x30,0x64,0x7c}
    dig['3'] = {0x38,0x0c,0x1c,0x38,0x08,0x0c,0x4c,0x38}
    dig['4'] = {0,8,24,40,72,124,8,8}
    dig['5'] = {0x3f,0x30,0x30,0x3e,0x03,0x03,0x03,0x3e}
    dig['6'] = {0,28,32,64,120,68,68,56}
    dig['7'] = {0,124,4,4,8,16,32,64}
    dig['8'] = {0x3c,0x66,0x66,0x18,0x66,0x66,0x66,0x3c}
    dig['9'] = {0x3c,0x66,0x66,0x66,0x3e,0x02,0x06,0x1c}
    dig['0'] = {0,56,68,76,84,100,68,56}
    dig['+'] = {0,0,4,4,31,4,4,0}
    dig['-'] = {0,0,0,0,124,0,0,0}
    dig['z'] = {0,0,0,0,0,0,0,0}
    dig['R'] = {0,0,4,2,127,2,4,0} -- arrow
    --dig['H'] = {24,36,126,195,90,90,66,126} -- Home
    dig['H'] = {0x18,0x24,0x42,0xc3,0x5a,0x5a,0x42,0x7e} -- Home

    max7219 = require("_max7219")
    max7219.setup({numberOfModules = 4, SSPin = 8, intensity = 6 })
    max7219.clear()
    -- max7219.setIntensity(1)
    -- dofile('main.lua')
    dofile('_startmax.lua')
    dofile('askds18b20.lua')
    --if dat.akmq then dofile('setmqtt.lua') end
    Файл setglobals.lua. В нем эти 4 замечательные цифры. Время засекал?
     
    Пушной звер нравится это.
  15. ИгорьК

    ИгорьК Гуру

    Да, 7 сегментов читается отлично. Я, вот, думаю прикупить какие-нибудь китайские большие сегментники.

    Но все таки на доступной матрице они в целом пока побольше.
     
  16. SergeiL

    SergeiL Оракул Модератор

    Матрица прикольна, чтобы вывести что-то строчное, типа "на улице усиление ветра", или "Не забудьте зонтик!"
     
  17. ИгорьК

    ИгорьК Гуру

    sys нравится это.
  18. ИгорьК

    ИгорьК Гуру

  19. ИгорьК

    ИгорьК Гуру

    Да. Но проблема в том, что нет ясности в алгоритме такого вывода. Выводить постоянно - это тоска.