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

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

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

    ИгорьК Давно здесь Команда форума

    Поддавшись часовому умопомешательству создал часы - антипод проекту от Ивана.



    [​IMG]

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

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

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





    Соединять:

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

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

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









    Пошагово. Медленно. Четыре простых шага. С картинками.
    (Никакой прошивкой ESP-8266 загубить нельзя! Только подачей 5 вольт куда не надо. )

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

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

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

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

    upload_2018-10-1_13-34-41.png

    askapixu.lua
    - указываете свой ключ с сайта https://www.apixu.com и название местности, где торчат ваши часы.

    upload_2018-10-1_13-38-47.png

    setglobals.lua - зона времени, где находитесь.

    [​IMG]

    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.1.1. и запускаем на исполнение файл _wifi.lua
    upload_2018-9-4_16-26-7.png

    Через 20 секунд должны увидеть:
    upload_2018-9-4_11-57-5.png

    Не увидели - убейте модуль апстену или исправьте ошибки в названии точки доступа и/или пароля (_wifi.lua).

    4.1.2. Есть WiFi? Тогда запускаем на выполнение файл askapixu.lua:

    [​IMG]


    [​IMG]

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


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

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

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











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

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

    UPD 27/10/2018. Версия три и Настройка Народного Мониторинга здесь.

    ===============================
    UPD 26/03/2019 - Еще раз перезалиты фалы в связи с изменениями в Apixu.

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


    UPD 19/04/2019 Версия четыре здесь.



    Про apixu.

    Фонты и надписи править здесь. Поиграйтесь в жирные цифры:

    [​IMG]

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


    [​IMG]


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

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


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

    Вложения:

    Последнее редактирование: 25 июн 2019 в 18:31
    BAR__MEN, KindMan, Securbond и 5 другим нравится это.
  2. DetSimen

    DetSimen Гуру

    Напомнило

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

    SergeiL Гуру

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

    ИгорьК Давно здесь Команда форума

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

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

    В файле setglobals.lua регулируется общее время цикла. Но от него отнимаются 2,5 секундные показы других данных.
     
  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. Пушной звер

    Пушной звер Оракул

  18. ИгорьК

    ИгорьК Давно здесь Команда форума

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

    ИгорьК Давно здесь Команда форума

  20. ИгорьК

    ИгорьК Давно здесь Команда форума

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