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

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

  1. ИгорьК

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

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



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

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

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

    Соединять:

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

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

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


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

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

    1. Уточните данные своей сети и ключа apixu.

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

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

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

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


    2. Залейте прошивку в модуль.

    При помощи 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

    и запускаем на исполнение файл _wifi.lua
    upload_2018-9-4_16-26-7.png

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

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

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


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

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

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

    P.S. (Для тех кто живет в России, а не в Москве):

    upload_2018-9-5_9-58-52.png
    В третьей версии часовой пояс править в файле setglobals.lua.

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

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


    UPD 11/09/2018. Версия два Здесь. (Третья - лучше.)

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

    Внимательно: не смешивайте файлы из разных версий.

    Про apixu.

    Фонты и надписи править здесь. (Поиграйтесь в жирные цифры. Все равно потом вернетесь к изящным 5х7)

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

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


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

    Вложения:

    Последнее редактирование: 14 янв 2019
    KindMan, Securbond, sys и 4 другим нравится это.
  2. DetSimen

    DetSimen Гуру

    Напомнило

    All_I.jpg
     
    sys, issaom, Mitrandir и ещё 1-му нравится это.
  3. SergeiL

    SergeiL Гуру

    Как по мне, то 5 секунд время, 5 секунд температура на улице, и то порой напрягает.
    Порой ждешь 5 секунд - посмотреть погоду или время. :)
    А бегущие строки раз в минуту - вообще за пределом моего понимания.
    Это же какой темперамент должен быть ;)
     
  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. ИгорьК

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

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

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

  19. ИгорьК

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

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