Jump to content
iT4iT.CLUB

Leaderboard


Popular Content

Showing content with the highest reputation since 06/17/2019 in all areas

  1. 2 points
    Добрый день! Дерзну ответить. У меня сделано так: 1. В файле с датчиками (по умолчанию "users_bme280_x2.h") после строки "knob_t *H = new knob_t( 0, 100, ".01", "Влажность", "%");" вставляете: knob_t *DP = new knob_t(-50, 100, ".01", "точка_росы", "°C"); (это будет круговая диаграмма с точкой росы) 2. перед строкой "void sensors_config() {" вставляете: float dewPointFast(float celsius, float humidity) { float a = 17.271; float b = 237.7; float temp = (a * celsius) / (b + celsius) + log(humidity*0.01); float Td = (b * temp) / (a - temp); return Td; } (это функция расчета точки росы) 3. после строки " sensors.add(T, device::out, 0x76, "out_temperature", out_init, out_temp, true);" вставляете : sensors.add(DP, device::out, "dewpoint", [&](){ return dewPointFast(out_temp(), out_hum()); }, true); (это добавление програмного датчика точки росы для уличного датчика) 4. заливаете прошивку и точка росы должна появиться в веб-интерфейсе
  2. 2 points
    Они там есть, только скрыты. Для того чтобы они были доступны через web-интерфейс необходимо раскомментировать в файле users_auto.h несколько строк. На рисунке показано какие. После это в на странице появится Жмём "полудомик" и получаем По поводу Blynk... Прикручивал сам, автор и так много сделал.. Каждый уже как бы пляшет от того что предоставлено в массы.
  3. 1 point
    CCS811 измеряет не только СО2 , но и другие летучие в-ва, которые косвенно то же будут влиять на показания СО2, отсюда точность по СО2 может уплывать. Его удобно использовать для мониторинга качества воздуха в помещении и организации проветривания. MH-Z19 - инфракрасный датчик только для СО2, к летучим органическим в-вам он нечувствителен, он у меня стоит в теплице для "научного мониторинга"
  4. 1 point
    Ну если есть датчик, почему же не контролировать? Тем более в коде от @Kitsumэтот датчик прописан и остаётся только поменять OFF на ON. И во вторых это датчик углекислого газа и органических летучих соединений.
  5. 1 point
    Всем добрый день. На днях получил все необходимые датчики и корпус. Собрал всё. Проблем не возникло. Только на датчике CCS8111 контакт WAK надо подключить к GND на плате. После нескольких часов работы показания датчика улетели на максимум и так пробыли до рестарта ESP... Как вы думаете, с чем может быть проблема?? И еще, как можно допилить код для взятия показания VOC??? Немного про корпус для датчиков из Китая, вот немного фоток: Сам корпус серого цвета. посмотрим как поведет себя на улице
  6. 1 point
    Доброе время суток. Вы уверены, что это именно проблема с оперативной памятью? В консоль выводится какая-либо информация по ОЗУ? Если нет, то добавьте для теста, в Setup следующий код. cron.add(cton::time_10s, [&](){ Serial.printf("free ram: %u\r\n", ESP.getFreeHeap()); }); После этого запустить контроллер с прописанными 30-ю и более датчиками. Понаблюдайте за этим значением. Уточните, что вы имеете в виду под "полностью отрубается web ...", при заходе на страницу вы получаете ошибку, что запрашиваемая страница не найдена или что-то появляется? Я предполагаю, что проблема не с ОЗУ, а с тем, что все данные с датчиков, в том числе их структура и логи, передаются через объекты String, а не потоковым выводом. Думаю, что просто данных слишком много и все не поместилось. А т.к. данные представлены в формате json, который имеет строгий синтаксис, то при разборе вылетает ошибка, в следствии чего не создаются сенсоры в web интерфейсе и т.д. Если я прав, то стоит пересмотреть как способ формирование ответов сервера на API запросы, так и варианты хранения данных. @den48rus Если Вам еще нужна помощь, то сообщите какие изменения Вы уже вносили, какие пользовательские файлы используете и какие датчики?
  7. 1 point
    Доброе время суток. Заранее спасибо, что помогаете друг другу! Да, все это возможно. Например, для расчета точки росы Вам понадобятся показания температуры и влажности, а также функция которая и будет производить расчет. Вот её упрощенный вариант. /* Функция расчета точки росы */ float dewPoint(float t, float h) { float a = 17.271; float b = 237.7; float temp = (a * t) / (b + t) + log(h * 0.01); return (b * temp) / (a - temp); } Теперь можно объявить новый сенсор, но для начала опишем настройки для визуализации. knob_t *DP = new knob_t(-40, 125, ".1", "Точка росы", "°C"); Ну и сам сенсор, но помните, что он берет данные от других датчиков, которые должны быть объявлены. У меня они имеют идентификаторы out_temperature и out_humidity для температуры и влажности соответственно. sensors.add(DP, device::out, "out_dewPoint", [&](){ return dewPoint( sensors.get("out_temperature"), sensors.get("out_humidity") ); }); Вот в принципе и все не сложные операции. Для индикации изменения давления "к дождю" необходимо придумать какую-нибудь формулу, скорее всего уже есть наработки в интернете. Вопрос в том, какие параметры потребуются для этого. Лично мне в голову приходит мысль смотреть в логи с датчика давления и влажности, а также рассчитывать абсолютную влажность по ним и смотреть на тенденцию изменения абсолютной и относительной влажности. Для индикации можно использовать значение в процентах или придумать свою условную шкалу, но в любом случае придется рассчитать её приделы. В общем, нужна формула. Для LCD дисплея 20х4 Вам понадобится i2c конвертер, возможно он уже распаян на нем, в противном случае у Вас не хватит свободных портов для подключения. Далее все еще проще, скорее всего у Вас уже имеется библиотека для работы с ним, и наверное это она https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library Подключаем библиотеку и объявляем дисплей (например в основном .ino файле), убедитесь, что i2c адрес для дисплея никем не занят. #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 20, 4); Производим инициализацию дисплея, например, в конце функции setup. lcd.begin(); lcd.backlight(); Теперь создадим в планировщике задачу которая будет обновлять данные на дисплее каждые 30 секунд, опишем её сразу после инициализации дисплея. cron.add(cron::time_30s, [&](){ lcd.clear(); lcd.printf("Temperature %.1f C", sensors.get("out_temperature")); }); Первой строкой мы очищаем дисплей, а второй выводим данные. Естественно, что Вы можете изменять позицию курсора. Сразу отмечу, что я не проверял этот код, я просто опираюсь на описания библиотеки (LiquidCrystal_I2C.h) и её "родителя" (print.h) которые посмотрел на GitHub https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library/blob/master/LiquidCrystal_I2C.h https://github.com/esp8266/Arduino/blob/master/cores/esp8266/Print.h Но общий смысл должен быть понятен. Что касаемо Blink, то мне с ним не приходилось сталкиваться, дать какие-то рекомендации со своей стороны затрудняюсь, нужно изучать API сервиса. Но я рад, что есть люди @Вадим Гречухин которые это уже реализовали. Перед установкой датчиков стоит обработать все открытые и подвергающиеся воздействия окружающей среды элементы диэлектрическим лаком. Сами сенсоры на время обработки лаком стоит закрыть чем ни будь чтобы не вывести их из строя. Обязательно убедитесь в их работоспособности после этих операций. Я старался размещать датчики сенсорами вниз, особенно фото датчики чтобы уменьшить количество оседаемой на них пыли, у меня её много т.к. проживаю чуть ли не в интимной близости от дороги. Ну а в будке, как мне кажется, лучше размещать их в средней части, на небольшом удалении друг от друга чтобы они не могли влиять на показания соседей. Все это мое субъективное мнение, основанное только на личном опыте. Далеко не факт, что он верный. Из достоверных источников известно точно, что сама будка должна быть расположена в теневой зоне на высоте пары метров от земли и не иметь вблизи других строений. В моем случае нарушены все эти правила т.к будка закреплена на мачте параболической антенны далеко даже не на первом этаже многоэтажного дома на расстояние 20 сантиметров от стены этого дома да еще и на солнечной стороне. В общем все это влияет на показания, но самое критичное это солнечная сторона, старайтесь найти место в тени на весь световой день. Скорее всего сенсоры вышли из строя. У меня аналогичная ситуация произошла с датчиком влажности и датчиком загрязнения воздуха после того как весной (в очередной раз) будка была повреждена и перестала выполнять свои прямые обязанности по защите датчиков. Судя по повреждениям, во время оттепели что-то прилетает с верхних этажей и уничтожает крайний конусный элемент будки. Следом после этого датчики заливает водой... Имейте это в виду при выборе места установки.
  8. 1 point
    Всем добрый вечер. @Kitsum спасибо большое за подробную инструкцию и скетч для метеостанции. Собрал 2. Одна на чипе CH340, другую на CP2102. Все работает прекрасно. Только для второй использовал настройку: "плата - Node MCU 0.9 ESP-12". Датчика BME280 у меня пока еще нет, но есть BMP280. От него работает только температура и давление. Хочу спросить, можно ли добавить расчет точки росы, индикацию изменения давления (типа " к дождю" и т.п.), добавить поддержу сервиса Blynk, добавить дисплей 2004. Вопрос не по программной части: как правильно расположить датчики в корпусе на улице? Сейчас ко мне едет из Китая такой корпус: планирую поставить BME280, BH1750 и CCS811. Как было бы правильно их с вашей точки зрения расположить. У меня сейчас уже год работают 2 метеостанции, одна в России, другая в Болгарии. Обе были куплены через сайт народного мониторинга. Но работают они плохо. Обе с датчиками AM2302, BMP085 (по моему такой...). Одна станция через пару месяцев работы стала показывать 99% влажность. Другая 99% влажность показывает только ночью. Датчики стоят на северных сторонах домов в распредкоробках, с отверстиями для вентиляции. Есть интересный момент, они предают на сайт еще и напряжение на ESP и уровень сигнала Wi-Fi. Можно ли и в вашу метеостанцию добавить отображение этих данных. Спасибо.
  9. 1 point
  10. 1 point
    Доброе время суток @Astron Тут Вы поспешили, смотрите в чем дело Это сообщение сформировано самой библиотекой и говорит, что вы пытаетесь использовать динамический буфер, который не поддерживается в 6-ой и более старших версиях. Именно по этой причине я указал в инструкции, что необходимо использовать 5-ую версию. Так что вы практически все сделали правильно. На всякий случай, я сформировал архив с Portable Arduino IDE v1.8.9 для Windows с поддержкой ESP8266 и ESP32, а также установленными FS плагинами для загрузки файлов web сервера, базовым набором библиотек (не все нужно обновлять) и скетчем с проектом метеостанции. Я мог что-то упустить, но надеюсь у Вас все получится. Скачать можно тут: https://yadi.sk/d/lXNS4_juPVPYwA
  11. 1 point
    Обновление от 27.02.2018 (v2.0 Beta) Друзья, всем доброе время суток. Немного не хватает времени и технических возможностей подготовить все как положено до конца месяца, в связи с этим прошу отнестись с пониманием. Основная статья будет переписана в течении нескольких дней после публикации этого сообщения. Все исходники, по доброй традиции, опубликованы в первом сообщении темы. Краткий список изменений Требования Arduino IDE c поддержкой esp8266 v2.4.0+ Любой модуль на базе ESP8266 c Flash 4MB (3MB выделяем под SPIFFS) Код для микроконтроллера структурирован и разбит на модули, что делает его более простым для понимания и внесения изменений config.h - работа с файлом конфигурации хранящимся во flash памяти микроконтроллера в формате json. Реализована возможность быстрого добавления пользовательских параметров. Поиск, чтение, запись этих параметров, а также специализированные функции для работы с WEB интерфейсом – обновление и запись группы параметров, переданных в формате json и формирование списка параметров и их значений с фильтрацией паролей для их скрытия при передаче в WEB интерфейс (в WEB интерфейсе реализована ответная часть). cron.h - планировщик заданий основной целью которого является выполнение пользовательских заданий с установленным интервалом времени. Задания представляют из себя функции описанные пользователем. На данный момент они не должны принимать или возвращать никаких значений, обязаны выполнять всю работу самостоятельно или с помощью глобальных объектов. Интервал выполнения задания выставляется в миллисекундах или с помощью макросов, представляющих из себя человекочитаемые имена, за которыми скрываются часто используемые отрезки времени в миллисекундах. Доступен дополнительный функционал в виде поиска задания в журнале, сброс его интервала вызова, выставление нового интервала, остановка выполнения и проверка активности задания. gpio.h - не является модулем. Содержит примеры реализации работы с GPIO для самых часто упоминаемых пользователями задач – управление нагрузкой по превышению установленных через WEB интерфейс приделов температуры и влажности, а также управление нагрузкой при расхождении расчетных значений абсолютной влажности между показаниями двух датчиков. sensors.h - тестовый вариант модуля для реализации автоматического сбора данных с пользовательских датчиков. Очень тесно завязан с планировщиком заданий и http сервером. Преследует только одну цель – избавить пользователя от внесения изменений в большую часть кода при составления собственного набора датчиков, в том числе не описанных в проекте, работающих на других шинах данных или с другими библиотеками. Также позволяет создавать программные сенсоры для вывода расчетных данных, например, абсолютная влажность или любой иной информации представленной в числовом виде. Это могут быть данные об уровне сигнала, напряжения питания или значение с аналогово порта. Помимо добавления сенсоров доступен поиск по списку всех сенсоров, проверка и изменения статуса (актуально только для i2c шины), получение последнего собранного значение с одного или группы сенсоров, аналогичная процедура для логов (активируются для каждого сенсора отдельно) и формирование списка в формате json из всех сенсоров с описанием всех необходимых характеристик. services.h - не является модулем. Содержит примеры реализации передачи показаний на внешние ресурсы на примере связи с MQTT брокером, а также передача данных через Rest API на такие ресурсы как "ThingSpeak" или "Народный мониторинг". tools.h - содержит набор вспомогательных утилит. webserver.h - Основная рабочая лошадка. Представляет из себя http сервер с реализацией API для обмена данными с WEB интерфейсом проекта, а также работающий с файлами во flash памяти микроконтроллера. Тесно связан со всеми модулями. Описание всего функционала заслуживает отдельного раздела. wifi.h - модуль описывает режимы работы Wi-Fi а также переключение между ними. Добавлена поддержка работы со скрытыми беспроводными сетями. В связи с тем, что целью было охватить все желаемые пользователями датчики, код был унифицирован и теперь поддерживает работу с любыми источниками данных. Примеры пользовательской конфигурации расположены в следующих файлах. users_auto.h - не является модулем. Содержит пример с реализацией выбора используемых датчиков с помощью подобия виртуальных переключателей ON/OFF. Также является примером как добавлять датчики в систему с использованием лямбда функций. Не совместим с users_bme280_x2.h users_bme280_x2.h - не является модулем. Содержи пример реализации работы с двумя датчиками BME280 на I2C шине. В отличие от users_auto.h, при добавлении нового датчика используются обычные функции. Не совместим с users_auto.h Изменения в WEB интерфейсе WEB интерфейс больше не запрашивает дублирующие файлы с внешних ресурсов, все необходимое для работы хранится на микроконтроллере. Список индикаторов на главной странице строится автоматически в зависимости от данных предоставленных объектом sensors через API. Добавлена поддержка двух групп датчиков – внешних и внутренних. Группа внешних сенсоров считается основной и отображается по умолчанию. Если зафиксировано наличие внутренней группы, то в меню будет добавлен переключает с индикацией выбранной группы. Исправлен баг с блокировкой доступа к панели управления из-за паразитных cookies различных систем аналитики. Изменен алгоритм работы системы защиты доступа к панели управления – реакция на брутфорс пароля или cookies, метод генерации соли и т.п. Также клиент получает соответствующее уведомление при блокировке доступа. В разделе основных настроек добавлена возможность изменять имя контроллера для MDNS протокола. Изменения вступят в силу в течении 10 минут или после перезапуска микроконтроллера. Найти устройство можно по этому имени в зоне ".local", по умолчанию "espws.local". Также в основных настройках добавлен пункт подтверждения пароля для домашней беспроводной сети. Его отсутствие было историческим упущением, но справедливость наконец восторжествовала. Раздел "Система" был расширен и теперь включает в себя всю информацию о текущем подключении. Также добавлена возможность динамического обновления некоторых данных, в список входят: уровень сигнала, напряжение питания и объем свободной памяти. В разделе обновления прошивки микроконтроллера ужесточена проверка контрольной суммы загружаемого файла, теперь нельзя загрузить программу без этих расчетов. Ранее просто выводилось предупреждение. Также увеличен список расшифровок ответа микроконтроллера в ходе обновления микропрограммы. В разделе "Файловая система" отображается корректный объем доступной flash памяти для внутренней файловой системы. Добавлен раздел для внешнего коллектора данных “ThingSpeak”. Пока доступен только ввод ключа для работы с API. По Вашим просьбам был добавлен раздел "Контроль состояния GPIO". Это пробный вариант конфигурации взаимодействия ESP8266 с внешней нагрузкой через WEB интерфейс. На данный момент в разделе присутствуют два параметра выставляющие границу включения внешней нагрузки при превышении установленных значений температуры или влажности. Доработана система оповещений. Мелкие правки и исправления ошибок в коде web интерфейса. В связи с тем, что старая реализация графика была нацелена на конкретные данные, унификация его кода на данный момент невозможна. График работает, но принимает строго указанные значения. Данная проблема будет решена позже. PS: Еще раз прошу отнестись с понимание и обратить внимание, что это тестовая версия. Спасибо.
×
×
  • Create New...