Перейти к публикации
iT4iT.CLUB

Вся активность

Эта лента обновляется автоматически     

  1. Последняя неделя
  2. Же ка

    esp8266 и парсинг погоды с OpenWeatherMap

    спасибо большое за Ваш код. Скопировал себе, поменял настройки WiFi, координаты и API ключ, прошил, но в ответ получил Connecting successfully, code 401. Что это означает?
  3. evgenyD

    Метеостанция на ESP8266 от it4it.club

    Добрый день! отличнейший проект!!!! очень жду продолжения для ESP32
  4. IvAn

    Метеостанция на ESP8266 от it4it.club

    Только это не пробовал. Завтра попробую. Без корректировки работает. С корректировкой четыре раза отключались датчики. Убрал корректировку, опять заработало.
  5. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Убедитесь в работоспособности проекта без строки корректировки. Проверьте датчик стандартным скетчем, идущим в примере с библиотекой. Укажите в качестве температуры и влажности какие-нибудь значения, можно статичные. Посмотрите на результат длительной работы.
  6. IvAn

    Метеостанция на ESP8266 от it4it.club

    Простое добавление строчки для корректировки сенсора ccs811 не подходит. Все датчики перестают отвечать примерно через час.
  7. Ранее
  8. IvAn

    Метеостанция на ESP8266 от it4it.club

    Спасибо. Подправил, посмотрю, что получится.
  9. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Доброе время суток. Большинство самостоятельно добавляет необходимый функционал. Как мне кажется, на текущий момент в проекте очень много проблем, думаю, что следующую версию имеет смысл делать для контроллера ESP32. А для всего остального всегда можно получить ответ на форуме. Но, возможно, я ошибаюсь... Это связано с тем, что на одном графике отображается информация с нескольких сенсоров, это сопровождается некоторым описанием для каждого из них. На все это требуется место для визуализации, и только свободная часть используется для вывода данных с сенсоров. В итоге, на маленьком разрешении рассмотреть что-либо практически невозможно. Но если хочется её вернуть, то в файле index.htm найдите следующий фрагмент css кода. @media screen and (max-width:610px) { #graph { display: none; } div.copyright { position: unset; } } И удалите из него строку #graph { display: none; } Не забудьте запаковать файл обратно в .gz формат Это зависит от самого датчика. В проекте данные проходят только через медианный фильтр, класс medianFilter_t в файле tools.h. По сути, это просто накопительный буфер для сглаживания случайных пиков. Больше информации можно посмотреть тут https://ru.wikipedia.org/wiki/Медианный_фильтр В ранних версиях используемой библиотеки это не было реализовано. Интересно посмотреть, как это повлияет на показания. В файле users_auto.h есть пример кода для работы с датчиком #if SENSOR_CCS811 sensors.add(C, device::out, 0x5A, "out_co2", [&](){ ccs811.begin(); ccs811.start(CCS811_MODE_1SEC); }, [&](){ uint16_t eco2, etvoc, errstat, raw; ccs811.read(&eco2, &etvoc, &errstat, &raw); return eco2; }, true); #endif Замените его на этот #if SENSOR_CCS811 sensors.add(C, device::out, 0x5A, "out_co2", [&](){ ccs811.begin(); ccs811.start(CCS811_MODE_1SEC); }, [&](){ uint16_t eco2, etvoc, errstat, raw; ccs811.set_envdata(sensors.get("out_temperature"), sensors.get("out_humidity")); ccs811.read(&eco2, &etvoc, &errstat, &raw); return eco2; }, true); #endif Разница всего в одной строке ccs811.set_envdata(sensors.get("out_temperature"), sensors.get("out_humidity")); Где out_temperature и out_humidity, это имена объявленных Вами сенсоров температуры и влажности.
  10. IvAn

    Метеостанция на ESP8266 от it4it.club

    Добрый день! Очень интересная метеостанция. Жалко, что дальше не развивается. Недавно получил ESP, теперь понятно на каком уровне можно с ней работать. Побольше бы таких проектов. А теперь о работе программы. Почему на телефоне нет иконки статистики за 24 часа? Отдельные графики работают. CCS811 несовсем корректно обрабатывается. У меня после проветривания комнаты резко растут показания и плавно снижаются. В библиотеке CCS811 есть пример возможности корректировки датчика по температуре и влажности. Подскажите как подправить код.,
  11. Спасибо. Реализация для CentOS чем нибудь отмечается? что нужно подправить? В чем разница между network_id, object_name ,
  12. В К

    esp8266 и парсинг погоды с OpenWeatherMap

    @Kitsum Спасибо, приятно что не забываете о столь давних темах
  13. Kitsum

    esp8266 и парсинг погоды с OpenWeatherMap

    @В К Найдите строку postingInterval = find ? 600L * 1000L : 60L * 1000L; и замените ее на postingInterval = find ? 3600L * 1000L : 60L * 1000L;
  14. В К

    esp8266 и парсинг погоды с OpenWeatherMap

    Не подскажете, что нужно изменить дабы запрос информации с сервера производился не каждые 10 мин, а каждый час?
  15. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Вы можете воспользоваться решением указанным несколько постов ранее, только внесите одно изменение. Замените запрос температуры по индексному номеру датчика sensors.add(T, device::in, "ds18b20_s0", [&](){ return ds18b20.getTempCByIndex(0); }); на запрос по уникальному серийному номеру sensors.add(T, device::in, "ds18b20_s0", [&](){ return ds18b20.getTempC({ 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 }); }); После этих изменений датчику c идентификатором ds18b20_s0 будет соответствовать DS18B20 с адресом 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0
  16. Vladimir

    Метеостанция на ESP8266 от it4it.club

    У меня работает на десяток датчиков DS и 2 BME все передается по MQTT каждые 5с на домашнюю SCADA на ней же работает и брокер. Есть иногда провалы по связи с DS в этом проекте не отрабатываются ошибки связи с DS в другом проекте (не закончил до конца) написан обработчик ошибок. Для настройки датчиков DS создана спец страница t.htm автоматически генерируемая, которая позволяет настроить (правда в программе руками) адреса DS отслеживает отказы и т.д. страничка генерируется через файловую систему ESP (см скетч сейчас уже не помню что там рисовал). Уже пол года все работает. давно не заглядывал - смотрите как там написано. Еще реализованы (как всегда не до конца но работают). на основании исходника метеостанции: Счетчики воды, Меркурий 230 по 485 связи, сейчас делается email нотификатор читающий из MQTT данные и генерирующий email сообщения с предупреждениями - потом он будет расширен GSM модулем с SMS нотификатором с функцией управления. ESP8266_WS_V2.0_BETA13.zip
  17. olegkaras

    Метеостанция на ESP8266 от it4it.club

    Добрый день. Поделитесь прошивкой на несколько DS18B20 , мне нужно что бы обращение к датчику происходило по серийному номеру (если какой нибудь датчик отсоединить то нумерация списка датчиков не менялась).
  18. alex0127

    Метеостанция на ESP8266 от it4it.club

    Все разобрал, тщательно собрал, по статистике с MQTT одна две ошибки с каждого датчика в сутки, раньше было 1 ошибка в полчаса, наверное это уже приемлимый результат. с BME ошибок нет совсем!!! наверное OneWire менее помехозащищенный протокол чем I2C.
  19. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Попробуйте провести эксперимент используя только один из двух датчиков по очереди чтобы попытаться исключить неисправность датчиков. Или временно замените датчики на другие. Убедитесь, что сама линия имеет надежные контактные соединения с контроллером и датчиками. Проверьте исправность подтягивающего резистора на шине 1 wire. Попробуйте подключать датчики без использования паразитного питания если конечно последнее используется. Воспользуйтесь одним из стандартных примеров библиотеки DallasTemperature для 10-15 минутного теста.
  20. alex0127

    Метеостанция на ESP8266 от it4it.club

    Все работает!!! и как верно предположили заработало только на GPIO14 (D5 на платах NodeNCU). Но вроде как есть же еще свободные пины GPIO 1,2,3,9,10, tx rx на внешнем питании уже не нужен по идее. Кстати сделал одну интересную ошибку когда заливал прошивку удаленно, забыл указать параметр Tools->Flash size-3m (стоял 1m) и ESP не увидела SPIFFS вообще , соотв зайти в нее не удалось, пришлось снимать и идти прошивать на ББ. Большое спасибо за поддержку!!! PS. Ошибки идут иногда с DS18, с BME ни разу не замечал, а с DS18 раз в 5 мин проскакивает значение -127, хотя все соединения хорошие и кабель родной короткий прямо в ESP вставлен...
  21. Kitsum

    Метеостанция на ESP8266 от it4it.club

    Доброе время суток. Да конечно, но проверить работоспособность Вам придется самостоятельно. В первую очередь Вам понадобятся следующие библиотеки: OneWire https://github.com/PaulStoffregen/OneWire DallasTemperature https://github.com/milesburton/Arduino-Temperature-Control-Library Скачиваем и добавляем их в Arduino IDE. Первая необходима для реализации обмена данными через шину 1 wire, а вторая представляет из себя всю необходимую реализацию для работы с датчиками серии DS18. Теперь необходимо определиться с тем, какой порт мы задействуем под шину 1 wire, это важно т.к в проекте уже задействовано много портов, а ESP8266 очень в них ограничена. Из свободных и безопасных остался только GPIO16 (D0 на платах NodeMCU) но с ним могут быть проблемы, в любом случае это стоит проверить. Если вдруг не получится, то придется задействовать один из портов, используемых для управления нагрузкой, например, GPIO14 (D5 на платах NodeNCU). Ранее мы использовали его для управления нагрузкой по разности показаний между двумя датчиками BME280. ВАЖНО: если с GPIO16 не получится и придется использовать GPIO14, то в основном файле программы закомментируйте вызов функции инициализации данного порта // gpio_14(); Все необходимое для работы с DS18B20 будем описывать в файле users_bme280_x2.h т.к по всей видимости именно им Вы и пользуетесь в работе с двумя датчиками BME280. Подключаем дополнительные библиотеки. #include <OneWire.h> #include <DallasTemperature.h> Следом можно объявить все необходимые объекты для работы с шиной и датчиками. Я сразу укажу варианты для разных портов. DallasTemperature ds18b20(new OneWire(16)); // GPIO16 (D0) // DallasTemperature ds18b20(new OneWire(14)); // GPIO14 (D5) Теперь доработаем функцию sensors_config так, чтобы в ней появились следующие дополнительные строки void sensors_config() { /* тут описан код других датчиков */ ds18b20.begin(); cron.add(cron::time_5s, [&](){ ds18b20.requestTemperatures(); }, true); sensors.add(T, device::in, "ds18b20_s0", [&](){ return ds18b20.getTempCByIndex(0); }); sensors.add(T, device::in, "ds18b20_s1", [&](){ return ds18b20.getTempCByIndex(1); }); } Пару слов о том, что мы добавили в эту функцию. Инициализация шины 1 wire ds18b20.begin(); Добавляем в планировщик новое задание которое будет отвечать за рассылку телеграммы по шине с целью запроса температуры у всех имеющихся датчиков. Последний параметр (true) заставит задачу отработать сразу при добавлении в планировщик. cron.add(cron::time_5s, [&](){ ds18b20.requestTemperatures(); }, true); Далее описываем каким способом собирать данные с датчиков sensors.add(T, device::in, "ds18b20_s0", [&](){ return ds18b20.getTempCByIndex(0); }); sensors.add(T, device::in, "ds18b20_s1", [&](){ return ds18b20.getTempCByIndex(1); }); В данном представлении датчики объявлены как внутренние - device::in (можете объявить их как внешние device::out), и имеют идентификаторы в системе ds18b20_sX, где X это индекс датчика найденного библиотекой DallasTemperature. Эта информация будет полезна если появится необходимость вывода данных с этих датчиков на общий график. В теории все должно заработать. Отпишитесь пожалуйста о своих результатах.
  22. alex0127

    Метеостанция на ESP8266 от it4it.club

    Доброго время суток! Уважаемый Автор, большое спасибо за проект , есть чему поучиться!!! можно ли написать краткую инструкцию по подключению 2-х ds18b20, к имеющимся 2 BME280 а то самому что-то только сломать все пока получается
  23. Kitsum

    Метеостанция на ESP8266 от it4it.club

    @Сергій Артеменко доброе время суток. Это возможно. Один из вариантов, это добавить в планировщик задач новое задание, которое будет, например, раз в час перезаписывать определенный файл во Flash памяти и сохранять туда данные по всем точкам графика. Сами данные хранить в формате JSON. При старте микроконтроллера читать этот файл, разбирать JSON и заполнять массив в оперативной памяти. В принципе это не сложная задача, практически все необходимое уже реализовано в коде. Из минусов можно отметить следующее: При перезагрузке точки на графике могут сдвинуться на время равное тому интервалу времени пока контроллер был выключен. Чем дольше не было питания, тем больше будет рассогласование. Это связано с тем, что контроллер не хранит отметки времени для точек на графике, отсчет идет от последней сохраненной точки с известными интервалами времени опираясь на время устройства с которого просматривается график. Это сделано для того, чтобы отказаться от учета реального времени на микроконтроллере. Любая Flash память имеет ограничение на количество циклов перезаписи, ESP8266 не исключение и число циклов составляет примерно 100000. Если перезаписывать Flash раз в час, то срок жизни будет составлять примерно чуть более 11 лет.
  24. Сергій Артеменко

    Метеостанция на ESP8266 от it4it.club

    Добрый день, возможно как-то хранить данные графика во SPIFFS чтобы после перезагрузки модуля они не исчезали?
  25. Просмотреть файл [esp8266] Библиотека smartBlink, реализует умное управление штатным светодиодом, что позволяет добавить индикацию состояния вашей программы или микроконтроллера. Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер. Подключение библиотеки #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации. smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода. Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом. #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать. smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду. led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько. led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код. С библиотекой идут несколько примеров. Автор Kitsum Добавлен 10.12.2018 Категория Библиотеки  
  26. Версия 1.0

    3 скачивания

    Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер. Подключение библиотеки #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации. smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода. Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом. #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать. smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду. led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько. led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код. С библиотекой идут несколько примеров.
  27. Просмотреть файл [esp8266] Библиотека Cron, реализует планировщик задач для периодического выполнения пользовательских функций. Основная задача библиотеки, это вызов пользовательских функций через установленный интервал времени. Библиотека работает по схожему принципу с широко известной программой Cron распространяемой в составе UNIX систем. От этой утилиты библиотека и унаследовала название. Библиотека работает исходя из принципов однопоточного выполнения кода в микроконтроллере. Когда обработчик библиотеки получает процессорное время, он проверяет список всех пользовательских задач в поиске задач, которые необходимо выполнить, основываясь на установленном интервале времени для каждой задачи. Данная библиотека предоставляет следующий функционал Позволяет добавлять большое количество пользовательских заданий в виде функций. Количество задач ограничено только их сложностью и свободной памятью микроконтроллера. Предоставляет возможность холодного старта задачи. Дает возможность вызова задачи при старте микроконтроллера с последующим выполнением задачи через установленный интервал времени. Поиск задачи по лексическому идентификатору. Получение время последнего вызова задачи. Обнуление интервала вызова задачи или установку нового интервала в мс. Останавливать задачу на неопределенный срок. Проверять активность задачи. Подключение библиотеки #include <cron.h> Пример добавление задачи, которая вызывает функцию blink_f каждую секунду cron.add(1000, blink_f); Добавление этой же задачи в режиме холодного старта cron.add(1000, blink_f, true); Добавление задачи и присвоение ей человек понятного идентификатора cron.add(1000, blink_f, "Blink"); Добавление задачи с холодным стартом и присвоением ей человек понятного идентификатора cron.add(1000, blink_f, "Blink", true); В качестве временного интервала вызова задачи необходимо указывать количество миллисекунд. Но можно воспользоваться готовыми константами. Фундаментальные константы cron::second cron::minute cron::hour cron::day Самые распространенные значения cron::time_1s cron::time_5s cron::time_10s cron::time_15s cron::time_30s cron::time_1m cron::time_5m cron::time_10m cron::time_15m cron::time_30m cron::time_1h cron::time_5h cron::time_10h cron::time_12h cron::time_1d С константами можно производить арифметические операции чтобы получить необходимые временные интервалы. cron.update("Blink", cron::time_1s); cron.update("Blink", cron::time_1s * 12); cron.update("Blink", cron::time_30s + 500); и т.д В функции loop должна находится команда вызова обработчика. void loop() { cron.handleEvents(); } Поиск задачи по установленному ранее идентификатору cron.find("Blink"); В ответ возвращается объект типа cronEvent который содержит все данные задачи или 0 если задача не была найдена. Можно использовать в качестве простой проверки. if (cron.find("Blink")) { /* … */ } Следующий метод позволяет получить время последнего вызова задачи uint32_t time = cron.lastRun("Blink"); В качестве параметра можно передать идентификатор с типом cronEvent полученный с помощью метода поиска задачи. Перезапуск таймера задачи производится следующим образом cron.update("Blink"); А так можно установить новый интервал вызова задачи cron.update("Blink", cron::time_10m); Остановка выполнения задачи cron.stop("Blink"); Проверка активности задачи bool active = cron.isActive("Blink"); С библиотекой идут несколько примеров. Автор Kitsum Добавлен 09.12.2018 Категория Библиотеки  
  1. Загрузить больше активности
×