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

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

Метки:
  1. Catbear

    Catbear Гик

    Обновление bin никакого эффекта не дало-все так же как и до того.
    Попробовал вместо 12_22 версии Voik, поставить Вашу "Ныне" #517, увеличив цифры-это заработало как я хотел.
    Единственное, непринципиальное-есть ли в ней возможность точки разделителя сделать попеременно мигающими? Или это все "сжато" теперь в lfs.img?
    PS Еще хотел уточнить: если раскомментировать narodmon, внеся данные с датчика (температура, давление), то они по моему никак не отображаются на часах (в логе присутствуют) или какая то иная логика заложена? Корректировка данных с openweathermap?
     

    Вложения:

    Последнее редактирование: 8 окт 2023
    Voik нравится это.
  2. ИгорьК

    ИгорьК Гуру

    Все сжато. Без этого никак.


    1. Если в логе видно, что данные с народного мониторинга приходят, то выбирается наименьшее значение из этих данных и отображается на часах.

    2. Данные с народного мониторинга действительны 10 минут. Если датчик с мониторинга не меняет значения больше этого времени - он исключается из анализа.

    3. Если данные с мониторинга отличаются от опенпогоды больше чем на три градуса - отражается опенпогода.
     
    Voik и Catbear нравится это.
  3. Voik

    Voik Гик

    Мне тоже по нраву такой вариант
    Может быть в следующих версиях сделать такой флажок?
    .
     
  4. ИгорьК

    ИгорьК Гуру

    Можно. Только сейчас не до часов. Совсем. В ближайшее время не обещаю.
     
    Voik нравится это.
  5. ИгорьК

    ИгорьК Гуру

    ... началось

    20240928_094042.jpg
     
    Voik нравится это.
  6. Voik

    Voik Гик

    Это радует!
    Что за датчик нужно заказать, что от моды не отставать?
     
  7. ИгорьК

    ИгорьК Гуру

    1. ESP32 D1-mini. (Любой ESP32 - без добавок, типа S2 или C3, etc.)

    upload_2024-9-30_8-43-26.png

    На ESP32 часы работают уже больше года, но код был лишь подшаманен с одного МК на другой. Теперь отображение данных переписано заново и именно под ESP32.

    Вообще, код пересмотрен.

    2. В зависимости от поддельности платы, может потребоваться LDO-регулятор напряжения +3.3В

    3. Датчик CO2 MH-Z19. С ним в паре старый добрый DS18b20.

    4. Датчик частиц SPS30. С ним в паре (но можно тот же DS18b20 оставить) -

    5. SCD41 - Carbon Dioxide, temperature, humidity Sensor.

    6. Фоторезистор.

    Или, как обычно, ничего из перечисленного, но тогда и смысла нет.

    Под пару SPS30/SDC41 выполнен корпус:

    upload_2024-9-30_9-0-9.png

    upload_2024-9-30_9-0-33.png


    upload_2024-9-30_9-0-52.png


    upload_2024-9-30_9-1-24.png


    Корпус оптимизирован под печать без поддержек. Совсем без них не обошлось, но их чуть-чуть.

    Для размещения датчиков и платы в корпус устанавливается фрейм. На нем идет сборка навесным монтажом (ибо никаких элементов кроме перечисленных в часах нет.)

    Под MH-Z19 надо будет начертить другой фрейм.

    SPS30 и MH-Z19 в паре работать тоже смогут (со временем), влезут в этот корпус. Надо будет почертить, но это не первоочередная задача. Кому нужно, могут сделать свой фрем.

    Сейчас ситуация такая. Переписаны все части кода, но не собраны воедино диспетчером.
    Все особенности старых часов (Openweathermap, narodmon, mqtt), естественно, остаются.

    Часы предназначены для маньяков качества воздуха ;)
     
    Последнее редактирование: 30 сен 2024
  8. KindMan

    KindMan Гуру

    Вместе не сравнивали показания?
     
  9. Voik

    Voik Гик

    Отличный проект для энтузиастов! Автор проделал впечатляющую работу, создав функциональные и эстетически привлекательные часы для мониторинга качества воздуха.

    Я, однако, пока не возьмусь повторять.

    Расположены информеры предыдущих поколений: показывают и время, и температуры, и прогноз.
    А домочадцы смотрят прогноз в смартах...

    Поэтому, на основе этого проекта, я сделал просто часы, которые ничего не показывают, кроме текущего времени.
     
  10. ИгорьК

    ИгорьК Гуру

    Без сравнения видно, что SCD-41 по со2 несет ахинею. Но. Там сзади бумажка, я ее еще не оторвал, пока идет отладка :) Воздух через него не прокачивается, поэтому на техсостояние это не влияет. Не думаю, что сенсирионовский датчик плох. Жалоб на него нет.

    MH-Z19 - старый добрый датчик. Сейчас у меня с ним работают двое часов. Одни дома в спальне, другие - в кабинете. Рекомендую. Узнаете много интересного. Не сказать - удивительного.

    SPS30, безусловно, очень специфический датчик. Но есть места, где он необходим. И, к сожалению, в одном месте мне необходим именно он.

    Таким образом, в целом, наиболее интересным, в общем случае, представляются часы с одним единственным датчиком SCD-41.

    :cool: Во сколько данных идет с часов:

    Код (Bash):
    {
      "tz": 3,
      "narod": "13.2",
      "press": "1025",
      "city": "Moscow",
      "wind": "5.36",
      "hum": "57",
      "co2": 916,
      "maxlux": 4095,
      "humi": "33.7 ",
      "pm1": "2.6",
      "heap": 150784,
      "tpz": "1.1",
      "pm4": "8.4",
      "pm2_5": "5.9",
      "minlux": 300,
      "npm10": "20.5",
      "lux": 3084,
      "bright": 11,
      "temperature": "26.0 ",
      "npm2_5": "20.0",
      "pm10": "9.7",
      "maintemp": "13.2",
      "ds18b20": "26.0 ",
      "npm1": "16.8",
      "npm0_5": "9.8",
      "npm4": "20.5"
    }
    З.Ы. Данные с Опенпогоды идут плохо, через пень - колода. На Апишный сервер через браузер практически не пробиться (а на обычный - без проблем), а вот часы, правда, пробивются. Надо чем-то менять Опенпогоду, но пока не знаю чем.
     
    Последнее редактирование: 30 сен 2024
    Voik нравится это.
  11. Voik

    Voik Гик

    Я бы порекомендовал open-meteo.com
    В проекте, где только текущее время я его и использую, чтоб раз в сутки брать часовой пояс. Но там и прогноз можно брать.
    У меня там совсем нет никаких датчиков - только d1. Раз в сутки берет данные с NTP и часовой пояс.
     
    ИгорьК нравится это.
  12. ИгорьК

    ИгорьК Гуру

    Там даже без регистрации и API ключа?
     
  13. Voik

    Voik Гик

    Так точно!
     

    Вложения:

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

    ИгорьК Гуру

    Подарок!
     
    Voik нравится это.
  15. Voik

    Voik Гик

    Добрался до ПК и осмелился залить сюда архив. Может кому пригодится...
     

    Вложения:

    • only clock.zip
      Размер файла:
      424,9 КБ
      Просмотров:
      21
    ИгорьК нравится это.
  16. Voik

    Voik Гик

    Кстати! Теперь из каждого утюга вещают про ИИ.
    Я вот решил скормить ИИ файл с настройками вайфай из предыдущего поста. И попросил сделать возможность перебода сетей.
    Когда будет возможность, то на ПК проверю.
    Ответ прилагаю:

    Да, можно добавить возможность подключения к нескольким Wi-Fi сетям. Если подключение к первой сети не удалось, код может попытаться подключиться ко второй. Вот пример, как это можно реализовать:
    Код (C++):
    print("\n***********\wifi.lua begin")
    do
        local networks = {
            {ssid = 'HUAWEI-B315', pwd = 'dXg65PEyAfUv7L6C'},
            {ssid = 'SECOND_NETWORK', pwd = 'password123'} -- Вторая сеть
        }

        local currentNetwork = 1

        local function connectToNetwork()
            if currentNetwork <= #networks then
                local scfg = {}
                scfg.ssid = networks[currentNetwork].ssid
                scfg.pwd = networks[currentNetwork].pwd
                scfg.auto = true
                scfg.save = true

                wifi.setmode(wifi.STATION)
                wifi.sta.clearconfig()
                wifi.sta.config(scfg)
                wifi.sta.connect()

                print('\nПопытка подключения к сети:', scfg.ssid)
            else
                print('\nВсе сети перепробованы. Подключение не удалось.')
            end
        end

        local function checkConnection()
            local ip = wifi.sta.getip()
            if ip then
                print('\nПодключено! IP-адрес:', ip)
                http.get('http://example.com', nil, function(code, data)
                    if code == 200 then
                        print('Доступ к интернету установлен.')
                    else
                        print('Не удалось получить доступ к интернету. Код ответа:', code)
                    end
                end)
            else
                print('\nНе удалось подключиться к сети:', networks[currentNetwork].ssid)
                currentNetwork = currentNetwork + 1
                connectToNetwork() -- Переход к следующей сети
            end
        end

        connectToNetwork() -- Начальное подключение
        tmr.create():alarm(20000, tmr.ALARM_SINGLE, checkConnection)
    end
    ### Объяснение изменений:
    1. **Массив сетей**: Создан массив `networks`, в котором хранятся данные для нескольких Wi-Fi сетей.
    2. **Переменная текущей сети**: Используется переменная `currentNetwork` для отслеживания текущей сети, к которой пытается подключиться устройство.
    3. **Функция подключения**: Функция `connectToNetwork()` отвечает за настройку подключения к текущей сети из массива.
    4. **Проверка подключения**: Если устройство не успешно подключилось, происходит переход к следующей сети, и вызывается функция `connectToNetwork()`.
    5. **Сообщения о попытках подключения**: Выводятся сообщения о текущей сети и статусе подключения.

    С помощью этого кода устройство будет пытаться подключиться к первой сети, а если не удастся, перейдет ко второй. Вы можете добавлять дополнительные сети в массив `networks`, если это необходимо.
     
    ИгорьК нравится это.
  17. ИгорьК

    ИгорьК Гуру

    Хорошая мысль. Кажется я что-то такое делал с теми часами, где работает датчик качества воздуха по со2 - несколько человек просили его на время и хотели видеть график. График строится сторонним приложением через MQTT, а для этого нужно соединение wifi. Не будешь же единственные часы постоянно перенастраивать.

    upload_2024-10-2_14-23-6.png
     
    Voik нравится это.
  18. Voik

    Voik Гик

    Ругается на нехватку памяти...
     
  19. ИгорьК

    ИгорьК Гуру

    Код зело неоптимальный.

    1. Все русские символы надо заменить на нерусские, ибо занимают они в два раза больше места, а уж что там с их выводом - вообще не известно.

    2. Проверка наличия коннекта таким http.get запросом валит МК на бок, ибо в него безостановочно льются данные с сервера. Для проверки коннекта есть net.dns.resolve - делает это экономно.

    3. Зачем вообще проверять коннект - речь же идет о подключении к сети, наличие ip есть и достаточно.
     
    Последнее редактирование: 2 окт 2024
    Voik нравится это.
  20. ИгорьК

    ИгорьК Гуру

    Положил корпус на thingiverse. Код уже лежит на Github, но пока не почищен от личных данных, так что еще в частном репозитории.
     
    Catbear и Voik нравится это.