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

Devilisimo

Пользователи
  • Публикации

    29
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    2

Все публикации пользователя Devilisimo

  1. Devilisimo

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

    @Kitsum Снова прошу совета у более опытного Автора. D5 и D3 кнопки, при подтяжке программно кнопки не работают, у них есть некое сопротивление. Если идти по классическому варианту - подтянуть сопротивлением 10кОм на 3,3В, то какое-то время работает, но загрузка через USB не работает "error: espcomm_upload_mem failed". Подскажите как сделать правильно. Мой код для понимания.
  2. Devilisimo

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

    Да, спасибо. Сам понял свою ошибку. Не нужно переименовывать: out_pressure - in_temperature. И тогда будет счастье. Эти имена действительно завязаны с web-страницей.
  3. Devilisimo

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

    @Kitsum Вопрос у меня совсем не к оформлению, меня все устраивает)) Вопрос почему только данные освещенности отображаются на графике, мне нужны хотя бы стандартные - давление, влажность и температура. Может проблема в именование датчиков? Как их правильно назвать, что данные поттягивались?
  4. Devilisimo

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

    @Kitsum Соответственно хотел спросить такой вопрос. На суточном графике нет отображения всех параметров. Что на это влияет? Графики по каждому отдельно параметру отображаются без проблем.
  5. Devilisimo

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

    В проекте было активировано по сути два датчика - CCS811 и BME. Пробовал разное количество и комбинации. Конфигурация как таковая и до этого была, просто не были прописаны настройки . Settings Про Nano Вы совершенно правы. После добавления расширенных настроек все датчики стали исправно работать. В интернете читал про необходимость активации функций датчика, возможно это помогает.
  6. Devilisimo

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

    Добрый день. Очень долго мучался с данной проблемой, прям спать не мог. Почему-то решение пришло неожиданно, после проверки датчиков на nano. Добавил конфигурацию датчиков и все снова заработало, не знаю с чем бы это могло быть связано. До этого почему-то работало в упрощенном режиме без проблем. BME280I2C::Settings settings_out( BME280::OSR_X1, BME280::OSR_X1, BME280::OSR_X1, BME280::Mode_Forced, BME280::StandbyTime_1000ms, BME280::Filter_Off, BME280::SpiEnable_False, BME280I2C::I2CAddr_0x76 ), settings_in( BME280::OSR_X1, BME280::OSR_X1, BME280::OSR_X1, BME280::Mode_Forced, BME280::StandbyTime_1000ms, BME280::Filter_Off, BME280::SpiEnable_False, BME280I2C::I2CAddr_0x77 ); BME280I2C BME_OUT(settings_out), BME_IN(settings_in);
  7. Devilisimo

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

    Спасибо за совет. Пытаюсь вернуться к датчику BME280. Столкнулся с неопреодолимым сопротивлением. Показания на нулях. Датчик CCS811 и дисплей на шине работает исправно. Пробовал разные датчики, в т.ч. BH1750. Пробовал сброс и перепрошивку на старую, рабочую точно, версию. Не понимаю что происходит. {"out_light":-2.00,"CCS811_ppm":692.00,"CCS811_ppb":44.00,"BME280_in_temperature":0.00,"BME280_in_humidity":0.00,"BME280_in_pressure":0.00,"rssi":-62.00} Уже просто замкнутый круг.
  8. Devilisimo

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

    Добрый день спасибо за Ваши советы, но я хотел бы уточнить.
  9. Devilisimo

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

    Не совсем понимаю для чего это делать нужно. Я использую GPIO-0 и 14 для кнопок, они подтянуты функцией INPUT_PULLUP. На GPIO-15 почему-то кнопка не заработала, хотя как реле он работает. GPIO-12 и 13 я использую для управления реле, изначальная функция отключена. На GPIO-2 (D4) подключен датчик DHT22 , иногда почему-то показания падают на нули. Все работает почти стабильно, правда пришлось увеличить время опроса датчиков до 10с., но это не так важно. Функционал станции: датчики наружные BME280 и BH1750, показания буду отправлять на народный мониторинг; внутри датчик DHT22 и CCS811; по показаниям СО и TVOC при соблюдении внутренней температуры и влажности будет открываться окно для проветривания; с кнопок можно так же можно открыть/закрыть и через команду mqtt, например с телефона. Соответственно вопрос, как влияет функция индикации и что нужно подправить в изначальном коде, что бы не было мучительно больно?
  10. Devilisimo

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

    Kitsum Уважаемый автор. Благодарю за развернутые ответы. Прошу подсказать про Вашу функцию "индикация состояния". Если я правильно понимаю, то она задействует пины 0 и 2? Какие еще пины задействованы "неявно"? /* Индикация состояния контроллера */ class smartBlink { public: /* доступные порты */ typedef enum { gpio0 = 0, gpio2 = 2, // NodeMCU } port_t;
  11. Devilisimo

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

    @Kitsum Прошу помощь советом. Данный код для опроса управления GPIO. При планомерной работе все хорошо. Если включить подряд несколько выходов, подать команду. Происходит срабатывание только последнего выхода в списке команд. Может чем-то поможете.
  12. Devilisimo

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

    Kitsum подскажите пожалуйста. Прошил модуль nodemcu_integer_0.9.5_20150318 через nodemcu firmware programmer. Скетч заливается успешно и даже как-то работает. Но залить файлы в память не удается, ошибка SPIFFS Create Failed! В чем может быть причина? Прошивки AT20SDK93 и подобные не работают, сыпятся ошибки.
  13. Devilisimo

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

    Добрый день. Заказал на али плату Wavgat D1 mini, так понимаю это аналог Wemos D1 mini? Загрузить ничего на него не получается и файлы в флеш прошить тоже. Может подскажете что-то, раз имели практику работы.
  14. Devilisimo

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

    post125 библиотека: https://github.com/olikraus/U8g2_Arduino/archive/master.zip Kitsum Я разобрался c данной проблемой, ниже выкладываю код, вероятно он не идеален, но работает. Пока сделал функции для управления реле. В мыслях есть создание функций для управление нагрузкой через ШИМ на основе мосфетов. Какие модули можете посоветовать? https://ru.aliexpress.com/item/Milight-LS4-0-1-10/32852443849.html?spm=a2g0s.13010208.99999999.259.101e3c00l1IpCP https://ru.aliexpress.com/item/Mosfet-MOS/32878055897.html?spm=a2g0s.13010208.99999999.271.101e3c00l1IpCP https://ru.aliexpress.com/item/High-Current-MOSFET-Switch-Module-DC-Fan-Motor-LED-Strip-Driver-Steples/32661148624.html?spm=a2g0s.13010208.99999999.265.101e3c00l1IpCP // Универсальная подписка на выключатель в формате "switch/'имя нашего esp'/switch'№gpio'" void subgpio(byte gpio){ String strpath; strpath += "switch/"; strpath += conf.param("mqtt_path"); strpath += "/switch"; strpath += String(gpio); mqttAPI.subscribe(strpath.c_str()); } //Проверка выключателей по подписке boolean callswitch(String topic, String msg, byte gpio){ boolean sw; if (conf.param("mqtt_path").length()) { String strpath; strpath += "switch/"; strpath += conf.param("mqtt_path"); strpath += "/switch"; strpath += String(gpio); mqttPublish("switch/on",strpath); String sending; if ((topic == strpath) and ((msg == "on") or (msg == "ON") or (msg == "On"))) { sw = true; sending += "sw_status_"; sending += String(gpio); sending += "_send_GPIO"; mqttPublish("switch/on",sending); } else if ((topic == strpath) and ((msg == "off") or (msg == "OFF")) and sw == true) sw = false; } return sw; }
  15. Devilisimo

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

    ESP8266_WS_V2.0_iT4IT.CLUB.7z Если кому-то интересно выкладываю свою версию, она пока сырая, но работает. Начал строить свой "умный" дом, броккер установил на малинку, рулим всем через Node-red. Очень удобно. Пока допиливаю управление gpio через mqtt. Хотел спросить у автора - так понимаю реализована функция, что если нет вай-фая, то переходит в режим точки доступа. Соответственно все данные по старому подключению стираются? Если дома отключился свет или еще что-то. Если мы хотим только через одно подключение делать все, то надо жестко его будет прописать?
  16. Devilisimo

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

    Все супер, заработало. Еще нужна небольшая подсказка. Хочу сделать универсальную подписку: switch2 = "switch/" + conf.param("mqtt_path") + "sw2"; mqttAPI.subscribe(switch2); Ругается: no matching function for call to 'PubSubClient::subscribe(String&)' Какого типа должна быть переменная?
  17. Devilisimo

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

    Сделал по Вашем рекомендациям. void callback(char* topic, byte* payload, unsigned int length) { String msg = "M="; for (unsigned int i = 0; i < length; i++) msg += (char)payload[i]; char measurementa [12]; msg.toCharArray(measurementa, 12); u8g2.setFont(u8g2_font_inb19_mf); u8g2.drawStr((128 - u8g2.getStrWidth(measurementa))/2, u8g2.getAscent() - u8g2.getDescent(), measurementa); u8g2.sendBuffer(); #ifdef console console.println(F("services: callback data from MQTT server")); #endif } Пока сделал тупо для вывода на экран. Ничего не получилось, хотя данные на броккер отправляются. /* Список топиков на которые необходимо оформить подписку */ mqttAPI.subscribe("Odincovo/TVOC"); mqttAPI.subscribe("Odincovo/BME280_out_temp"); Еще вопрос как будут разделены данные при подписке на несколько топиков. /* Список топиков на которые необходимо оформить подписку */ mqttAPI.subscribe("weather_station/lcd/topic_name"); Почему Вы указываете название топика с двумя "/", т.е. может я как-то не так указываю адрес, хотя не телефоне все отображается?
  18. Devilisimo

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

    Добрый день. Все же не до конца понимаю. client.subscribe - функция по чтению или подписке на данные. Как сделать универсально для запроса данных. Сделал по Вашему научению так: void callback(char* topic, byte* payload, unsigned int length) { #ifdef console console.println(F("services: callback data from MQTT server")); #endif } void readDataFromMQTT() { // баг при прямой передаче значения (c_str) из конфига в setServer (не забыть поправить!) String server = conf.param("mqtt_server"); mqttAPI.setServer(server.c_str(), 14728); //1883 mqttAPI.connect(WiFi.hostname().c_str(), (conf.param("mqtt_login").length() ? conf.param("mqtt_login").c_str() : 0), (conf.param("mqtt_pass").length() ? conf.param("mqtt_pass").c_str() : 0) ); mqttAPI.setCallback(callback); if (!mqttAPI.connected() and wifi.transferDataPossible()) { if(mqttAPI.connect(WiFi.hostname().c_str())) { mqttAPI.subscribe("Odincovo/TVOC"); } } } cron.add(cron::time_5m, sendDataToMQTT); // Отправка данных MQTT брокеру cron.add(cron::time_5m, readDataFromMQTT); // Получение данных MQTT брокеру Нужно ли каждый раз передавать настройки сервера и сети? Можно ли сделать функцию числовую float readDataFromMQTT(string topic) Что чтение будет это понятно, не могу понять как вытащить данные и передать дальше?
  19. Devilisimo

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

    Прошу помощи по второму вопросу. Как реализовать функцию чтения данных с сервера MQTT, для дальнейшего вывода на дисплей.
  20. Devilisimo

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

    Беру свои слова обратно. Работает виноват китайский дисплей - SCL и SDA перепутаны.
  21. Devilisimo

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

    Добрый день. Появились еще глупые вопросы. Решил подключить к станции дисплей SSD1306 128x64 I2C. Позаимствовал часть кода создал функцию. void draw() { u8g2.clearBuffer(); // test const char pi[] {"HI pipi"}; u8g2.setFont(u8g2_font_6x12_mf); x = (128 - u8g2.getStrWidth(pi)) / 2; y = y + 2 + u8g2.getAscent() - u8g2.getDescent(); u8g2.drawStr(x, y, pi); // Cycle other meauserments String measurement {"..."}; const char degree {176}; // Switch every 3 seconds switch((millis() / 3000) % 3) { case 0: { measurement = "T: " + String(sensors.get("out_temperature")) + degree + "C"; } break; case 1: { measurement = "H: " + String(sensors.get("out_humidity")) + "%"; } break; default: { measurement = "P: " + String( sensors.get("out_pressure")) + " mmHg"; } } char measurementa [12]; measurement.toCharArray(measurementa, 12); u8g2.setFont(u8g2_font_9x18_mf); x = (128 - u8g2.getStrWidth(measurementa))/2; y = 64 + u8g2.getDescent(); u8g2.drawStr(x, y, measurementa); u8g2.sendBuffer(); } добавил // Init display u8g2.begin(); /* Добавление в планировщик заданий отрисовкe данных */ cron.add(cron::time_1m, draw); // Вывод на экран // GPIO Defines #define I2C_SDA 5 // D1 #define I2C_SCL 4 // D2 // Use U8g2 for i2c OLED Lib #include <SPI.h> #include <U8g2lib.h> U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, I2C_SCL, I2C_SDA, U8X8_PIN_NONE); Ну и как Вы наверное уже догадались у меня ничего не выходит на экран. Прошу по возможности помочь советом.
  22. Devilisimo

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

    Да, так все работает. Хотел уточнить по настройке mqtt // баг при прямой передаче значения (c_str) из конфига в setServer (не забыть поправить!) String server = conf.param("mqtt_server"); mqttAPI.setServer(server.c_str(), 1883); mqttAPI.connect(WiFi.hostname().c_str(), (conf.param("mqtt_login").length() ? conf.param("mqtt_login").c_str() : 0), (conf.param("mqtt_pass").length() ? conf.param("mqtt_pass").c_str() : 0) ); Решил воспользоваться сервером https://www.cloudmqtt.com/ Хотел уточнить что нужно исправить и где указать порт, так понимаю в программе порт 1883?
  23. Devilisimo

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

    Добрый день. Хотел спросить у автора. У Вас описана реализация датчика ccs811. Начал с ним работать и выяснил неприятный момент, даже два. Сначала он вообще не стал работать и утащил за собой bme680, при этом bme280 исправно давал данные. Начал копать и нашел тонкость - нужно добавить код: #if SENSOR_CCS811 #include <ccs811.h> //CCS811 ccs811; - так не работает CCS811 ccs811(D3); // nWAKE to D3 #endif Сначала я обрадовался, т.к. все заработало. Но потом показания пропадают примерно через минуту, так повторяется каждый раз при перезагрузке. Может Вы уже столкнулись и решили проблемы работы с данным датчиком? Чтение данных взято из Вашего примера: /* датчики CO2 CCS811 */ #if SENSOR_CCS811 sensors.add(C, device::in, 0x5A, "CCS811_ppm", [&](){ ccs811.begin(); ccs811.start(CCS811_MODE_1SEC); }, [&](){ uint16_t eco2, etvoc, errstat, raw; ccs811.read(&eco2, &etvoc, &errstat, &raw); return eco2; }, true); #endif В инструкции написано: Connect the WAKE pin to ground. Так работает.
  24. Devilisimo

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

    Еще раз благодарю за развернутый ответ. В связи с экспериментами с датчиками качества воздуха, в частности сейчас пробую BME680, встал вопрос как сделать строку с меняющимся значением не числовым. Например: knob_t *GAS = new knob_t( 0, 300, ".1", "Gas", CalculateIAQ(bme680.gas_resistance / 1000.0)); Компилятор ругается: 'CalculateIAQ' was not declared in this scope Хотя создал процедуру. String CalculateIAQ(float score){ String IAQ_text = "IAQ "; score = (100-score)*5; if (score >= 301) IAQ_text += "Hazardous"; else if (score >= 201 && score <= 300 ) IAQ_text += "Very Unhealthy"; else if (score >= 176 && score <= 200 ) IAQ_text += "Unhealthy"; else if (score >= 151 && score <= 175 ) IAQ_text += "Unhealthy for Sensitive Groups"; else if (score >= 51 && score <= 150 ) IAQ_text += "Moderate"; else if (score >= 00 && score <= 50 ) IAQ_text += "Good"; return IAQ_text; } Порекомендуйте красивое решение.
  25. Devilisimo

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

    Прошу подсказать автора о настройках страниц. Хотелось бы сделать несколько вкладок для разных комнат. Сейчас есть переключение наружные/внутренние датчики. В каком месте это настраивается?
×
×
  • Создать...