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

Forester

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

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

  • Посещение

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

    2

Сообщения, опубликованные пользователем Forester


  1. 2 часа назад, Kitsum сказал:

    Что выводиться в Serial монитор при отправке данных?

    services: send data to MQTT server
    answer: CONNECTED

    P.S. Вручную забил в Корневой путь espWeatherStation, после этого заработало.

    Может, кто подскажет, как отправить по MQTT текст? Т.е. мне нужно отправить URL. Если воспользоваться mqttPublish, при компиляции получаю что-то типа:  cannot convert 'const char*' to 'float' for argument '2' to 'bool mqttPublish(String, float)'


  2. В 09.02.2018 в 05:52, AlexDerBK сказал:

    Спасибо! Пользуюсь программой Fing, так что нет сомнения что ESP нет в сети. Но про перемычку я что то упустил.

    Может быть, не совсем в тему, но опишу забавный случай. У меня есть реле Sonoff Base, на котором я провожу периодически тестирование разных прошивок. Последний раз тестировал ESPEasy. И в процессе тестирования обнаружился аппаратный брак. Если плату вынести на холод (примерно -10 градусов), то через некоторое время она теряет wifi роутер и уходит в бесконечный реконнект. Заносишь в дом, нагревается, и уже минуты через две нормально коннектится к точке. Я предполагаю, что проблема в бракованном кварцевом резонаторе, у которого уплывает частота при охлаждении.Просто была уже подобная проблема с клоном Arduino UNO. Только там наоборот плата нормально работала только в холодильнике, а принагреве зависала)) Поменял резонтатор - отлично работает уже не один год. Вот такие поделки иногда приходят с али. Либо во втором случае присутствует какая-то микротрещина на плате.


  3.   Удалось мне реализовать свою идею, которую я описывал в этом посте  (про визуализацию скорости изменения давления). Так как программирование веб-интерфейса для меня даже не темный лес, а что-то типа области за горизонтом событий черной дыры, решил использовать для этого протокол MQTT и андроид-приложение с возможностью получения URL картинки и отображения этой самой картинки в интерфейсе. Код получился такой (программистам с расшатанными нервами смотреть не рекомендуется!):

    Скрытый текст
    
    
    /*
    Добавленные переменные для расчета двухчасовой разности давления
    */
    unsigned long timerPressureDinamic = 0;   // таймер для двухчасового сравнения показания давления
    double oldPress = 0;                       // предыдущее значение давления
    double deltaPress = 0;                     // разница в показаниях давления через два часа
    bool firstMessurePressureOld = true;       // переменная-флаг для записи первого измерения давления при старте
    
    
    
    /* 
    Запоминаем первое измерение давления для дальнейшего по-двухчасового сравнения
    */
    if (firstMessurePressureOld){
      oldPress = pressure.data;
      firstMessurePressureOld = false;
      }
    
    
    
    /*  
    Если прошло 2 часа, вычисляем дельту давления
    */
    if (millis() - timerPressureDinamic > 7200000 or timerPressureDinamic > millis()) pressureDinamic();
    
    
        
    /*
    Отправка URL по MQTT в зависимости от дельты давления. Пришлось добавить лишний метод mqttPublishURL(), так как через существующий mqttPublish() не получилось отправить строковую URL. Понимаю, что, наверное, глупость. Поправьте сами для оптимизации.
    */
          
    //если дельта в этом диапазоне, отправляем URL картинки "null" (атмосферное давление без значительных возмущений)
    if((deltaPress >= 0)&(deltaPress < 0.75)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69feb/yxLX0-GRlJk.jpg");
          
    //если дельта в этом диапазоне, отправляем URL картинки "up1"  (давление растет со скоростью 1 гПа/2ч.)
    if((deltaPress >= 0.75)&(deltaPress < 1.5)) mqttPublishURL("deltapressure",    "https://pp.userapi.com/c840120/v840120983/69ff2/i6mLvwA8HRE.jpg"); 
          
    //если дельта в этом диапазоне, отправляем URL картинки "up2"  (давление растет со скоростью 2 гПа/2ч.)
    if((deltaPress >= 1.5)&(deltaPress < 2.25)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69ff9/gr2cpPuA6Kc.jpg"); 
          
    //если дельта в этом диапазоне, отправляем URL картинки "up3"  (давление растет со скоростью 3 гПа/2ч.)
    if((deltaPress >= 2.25)&(deltaPress < 3)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/6a000/HYXjKndhFEY.jpg"); 
    
    //если дельта в этом диапазоне, отправляем URL картинки "up4"  (давление растет со скоростью 4 и более гПа/2ч.)
    if(deltaPress >= 3) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/6a007/qKjGWt5er4M.jpg"); 
    
    //если дельта в этом диапазоне, отправляем URL картинки "null" (атмосферное давление без значительных возмущений)
    if((deltaPress <= 0)&(deltaPress > -0.75))  mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69feb/yxLX0-GRlJk.jpg"); 
          
    //если дельта в этом диапазоне, отправляем URL картинки "down1"  (давление падает со скоростью 1 гПа/2ч.)
    if((deltaPress <= -0.75)&(deltaPress > -1.5)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69fcf/bp48SOXx_G8.jpg"); 
          
    //если дельта в этом диапазоне, отправляем URL картинки "down2"  (давление падает со скоростью 2 гПа/2ч.)
    if((deltaPress <= -1.5)&(deltaPress > -2.25)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69fd6/jnoRojvlQ88.jpg"); 
          
    //если дельта в этом диапазоне, отправляем URL картинки "down3"  (давление падает со скоростью 3 гПа/2ч.)
    if((deltaPress <= -2.25)&(deltaPress > -3)) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69fdd/0qlgQqKPzto.jpg");
           
    //если дельта в этом диапазоне, отправляем URL картинки "down4"  (давление падает со скоростью 4 и более гПа/2ч.)
    if(deltaPress <= -3) mqttPublishURL("deltapressure", "https://pp.userapi.com/c840120/v840120983/69fe4/IhtWJ_sCgmw.jpg");
    
    
    
    /*
    Негуманный код для отправки URL по MQTT
    */
    bool mqttPublishURL(String topic, String data) {
      if (config.mqtt_path.length()) topic = config.mqtt_path + "/" + topic;
      return mqtt.publish(topic.c_str(), String(data).c_str(), true);
    }
    
    
    
    
    /*
    Вычисление разницы в давлении каждые два часа
    */
    
    void pressureDinamic() {
      timerPressureDinamic = millis();
      deltaPress = pressure.data - oldPress;
      oldPress =  pressure.data;
    }
    
        
        
     
    
    

     

    Если кому-то интересно,  файлик ESP8266_WS_iT4iT.CLUB.ino со своими изменениями прикрепил. Понимаю, что грамотный человек реализует все гораздо правильней, взяв уже готовые данные из таблицы для графика. Но моих знаний для этого не хватает. Так что как-то так)) Для отображения показаний сваял в фотошопе на первое время вот такой манометр. В MQTT клиенте это пока выглядит так:

    Screenshot_20180203-154417.png

    ESP8266_WS_iT4iT.CLUB.zip

    • Like 1

  4. 2 часа назад, zenone сказал:

    Пробовал другой роутер, результат тот же

    Ну тогда подозрение падает на ESP. Либо у вас качество сигнала по какой-то причине ухудшается (расстояние, помехи), либо какая-то аппаратная особенность конкретно этого ESP модуля. Попробовать другой модуль.


  5. В 15.01.2018 в 03:52, Kitsum сказал:

    Чтобы график не содержал пустых элементов в первые сутки работы микроконтроллера, необходимо строить его из динамического числа точек.

    А если заполнить массив не нулями а примерно средними значениями? Ну, например, для давления 730 мм.рт.ст.... Тогда, наверное, масштабирование будет адекватным с самого начала построения графика?


  6. 17 минут назад, zenone сказал:

    Скорее всего дело не в настройках интернета

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


  7. 12 часов назад, zenone сказал:

    как лечить?

    Ну пока умные люди ничего не ответили, попробуйте поменять в этой строке 600000 на 300000, чтобы данные отправлялись каждые пять минут, а не 10. Вдруг что-то изменится) Но, скорее всего, в настройках вашего интернета надо разбираться.

     

    Скрытый текст

    Снимок.JPG

      Еще я б попробовал (как советуют здесь https://esp8266.ru/forum/threads/primer-otpravki-na-narodmon-ru.917/ ) в этой строчке заменить narodmon.ru на IP адрес 94.142.140.101

    Скрытый текст

    image.thumb.png.2b307eb20f7813a742eb27711038e71d.png

     


  8. 1 час назад, ololonly сказал:

    Заметил также, что иконка все же как-то загрузилась. Вообще ума не приложу, как так, соединение есть, а страницу грузить не хочет.

    Может, сохранить страницу как .html на компе, который открывает нормально. Перенести сохраненный файл и папку на проблемный комп и попробовать это открыть? Проблема то ведь не в соединении, а в каких-то параметрах винды (которые используют все установленные браузеры). Чего там может быть... джаву обновить?


  9. 2 часа назад, RusD сказал:

    Верно ли поступил?

    Имхуется мне, что что-то с выводами SDA и SCL напутано. Раз BME280 перестал определяться. Смотрите, где-то ваш код переназначает SDA и SCL на другие пины. Если оставить только ваш код, дисплей нормально работает именно на тех пинах, к которым подключен датчик?

    • Thanks 1

  10. 9 часов назад, Alex_DIY сказал:

    Так значит так, раз и японцы подобное заложили в свои часы. А количество стрелочек говорит о чем ? То есть пойдет дождь,  будет ясное небо?

    Да, мы наконец то поняли друг друга. Если быть точным, японцы не закладывали в часы сравнение двух показаний. В часах CASIO просто идет построение графика изменения давления на матричном ЖКИ. И каждая следующая точка на индикаторе "зажигается" через два часа после предыдущей. Нас интересует первая производная от этого грубого графика. Если давление изменяется менее чем на 1 гПа, следующая точка загорается на одном уровне с предыдущей. Изменилось на +/- 1 гПа (0,03 дюйма.рт.ст или 0,75 мм.рт.ст.) - загорается на один уровень выше или ниже относительно предыдущей. И так далее. То есть, я в своем "барометре" ввел пять уровней изменения атмосферного давления. Каждый следующий уровень отличается от предыдущего на 1 гПа. Свои выводы сделал после многолетних наблюдений за графиком японских часов. Разницу между соседними точками на графике более чем на 4 уровня я ни разу не видел. Ну, возможно, в других уголках планеты такое бывает. Но это в любом случае очень сильные изменения давления. Я тут поднял инструкции снова от часов. И понял, что, во-первых, в инструкции допущена ошибка (вместо 0,05 дюймов.рт.ст. нужно было написать 0,03 дюйма.рт.ст.). Наверное, при переводе инструкции на русский допустили опечатку. Во-вторых, я в своем коде тоже неправильно указал диапазоны для сравнения. наверное перенес эту опечатку, начав рассчитывать от 0,05 дюймов, а не от гектопаскаля. Пересчитав заново, получаются такие цифры (если ошибся, поправьте):

    0.   0,00 <  ΔP <  0,75 мм.рт.ст. (1 гПа) - стабильное атмосферное давление
    1.   0,75  ΔP  1,50 мм.рт.ст. (1 гПа) - легкие возмущения атм. давления
    2.   1,50 ⩽ ΔP 2,25 мм.рт.ст. (2 гПа) - к перемене погоды 
    3.   2,25 ⩽ ΔP  3,00 мм.рт.ст. (3 гПа) - к резкой перемене погоды
    4.   3,00  ΔP             мм.рт.ст. (4 гПа) - к концу света

    Так же в отрицательную сторону. Промежуток между измерениями 2 часа.

     

    Снимок.JPG


  11. Понял причину бага, из-за которого у меня ESP не реконнектится к роутеру после перезагрузки роутера. Если в роутере настроен невидимый SSID, то ESP не видит точку доступа и соответственно не пытается к ней подключиться. Не знаю, можно ли такое реализовать...Но надо, видимо, не искать SSID в эфире, а потом к ней подключаться. А просто пытаться к ней подключиться.


  12. 5 часов назад, Alex_DIY сказал:

    Вам  надо держать в памяти 3599 предыдущих значений

    Нет. Я держу в памяти только два значения, остальные отбрасываю. То есть все измеренные значения выводятся на экран, но для сравнения выбираются только два с разницей в два часа (такой алгоритм заложен в часах CASIO).  Сравнение происходит не с каждым измерением, а раз в два часа. Этого достаточно.  Около года тестирую такой алгоритм. Ардуина адекватно повторяет своими стрелками на экране "крутизну" графика на часах CASIO. В данном проекте самый простой вариант, наверное, - подсвечивать шкалу давления четырьмя разными цветами. Ну например: зеленый - давление стабильное; желтый - первая скорость изменения давления; оранжевый - вторая; красный - третья; черный - четвертая. А падение или рост обозначать какой-то стрелкой. Ну это мои соображения. У кого-то всегда найдутся идеи получше))


  13. 50 минут назад, Alex_DIY сказал:

    А у Вас  приведён код только касательно отображения скорости изменения давления, а вот где Вы данные двухчасовой давности получаете и как - не указываете.

    Если интересно, вот полный код https://yadi.sk/d/B0x4Thf73RSUvH


  14. 35 минут назад, Alex_DIY сказал:

    а Вы отпрашиваете датчик давления раз в 2 часа?

    Нет. Опрашивать можно сколько угодно раз. Но запоминать одно значение, а второе через два часа. И сравнивать их. Я не программист и свой страшный код даже боюсь показывать здесь. В моем случае код простой. Опрос датчиков каждые две секунды с инкрементом переменной и сбросом ее в ноль через 3599 циклов (через два часа). Если переменная равна нулю, запоминаем первое значение давления. Если переменная равна 3599 - запоминаем второе.


  15. Может быть, в проекте приживется идея с индикацией скорости изменения атм. давления? Ведь, как правило, интересно именно это значение, а не абсолютное. Например, на дисплее HD44780 я реализовал это в виде четырех стрелок, указывающих либо вверх, либо вниз. Диапазоны для скорости изменения взял с часов CASIO ProTrek PRG-40. Получился такой код. Отлично работает. Очень информативно получается. Видишь на экране две-три стрелки - жди изменения погоды. Четыре - еще не видел ни разу ни на часах CASIO, ни на своей поделке.  Первые два часа вместо стрелок выводится слово "wait".  В общем, такой вариант отображения информации с барометра (на мой взгляд!) несет гораздо больше смысла, чем абсолютное значение. И даже крутизну графика давления оценить гораздо сложнее, чем четыре стрелки или, например, четыре цветовых уровня... Как уж это реализовать в интерфейсе - вопрос вкуса. Думаю, что в данном проекте это получилось бы красиво. 

       if(((Q2 - Q1) >= 0.64)&((Q2 - Q1) < 1.27)){             //Если разность между измерениями давления с интервалом в 2 часа от 0.64 до 1.27 мм.рт.ст.
               Press[0] = '\1';                                        //Зажигаем ОДНУ стрелку ВВЕРХ
               Press[1] = ' ';
               Press[2] = ' ';
               Press[3] = ' ';
               }
               if(((Q2 - Q1) >= 1.27)&((Q2 - Q1) < 2.54)){            //Если разность между измерениями давления с интервалом в 2 часа от 1.27 до 2.54 мм.рт.ст.
               Press[0] = '\1';                                       //Зажигаем ДВЕ стрелки ВВЕРХ
               Press[1] = '\1';
               Press[2] = ' ';
               Press[3] = ' ';
               }
               if(((Q2 - Q1) >= 2.54)&((Q2 - Q1) < 3.81)){           //Если разность между измерениями давления с интервалом в 2 часа от 2.54 до 3.81 мм.рт.ст.
               Press[0] = '\1';                                      //Зажигаем ТРИ стрелки ВВЕРХ
               Press[1] = '\1';
               Press[2] = '\1';
               Press[3] = ' ';
               }
               if((Q2 - Q1) >= 3.81){                                 //Если разность между измерениями давления с интервалом в 2 часа от 3.81 мм.рт.ст.  и более
               Press[0] = '\1';                                       //Зажигаем ЧЕТЫРЕ стрелки ВВЕРХ
               Press[1] = '\1';
               Press[2] = '\1';
               Press[3] = '\1';
               }
    
               if(((Q2 - Q1) <= -0.64)&((Q2 - Q1) > -1.27)){          //Если разность между измерениями давления с интервалом в 2 часа от -0.64 до -1.27 мм.рт.ст.
               Press[0] = '\2';                                       //Зажигаем ОДНУ стрелку ВНИЗ
               Press[1] = ' ';
               Press[2] = ' ';
               Press[3] = ' ';
               }
               if(((Q2 - Q1) <= -1.27)&((Q2 - Q1) > -2.54)){          //Если разность между измерениями давления с интервалом в 2 часа от -1.27 до -2.54 мм.рт.ст.
               Press[0] = '\2';                                       //Зажигаем ДВЕ стрелки ВНИЗ
               Press[1] = '\2';
               Press[2] = ' ';
               Press[3] = ' ';
               }
               if(((Q2 - Q1) <= -2.54)&((Q2 - Q1) > -3.81)){          //Если разность между измерениями давления с интервалом в 2 часа от -2.54 до -3.81 мм.рт.ст.
               Press[0] = '\2';                                       //Зажигаем ТРИ стрелки ВНИЗ
               Press[1] = '\2';
               Press[2] = '\2';
               Press[3] = ' ';
               };
               if((Q2 - Q1) <= -3.81){                                //Если разность между измерениями давления с интервалом в 2 часа от -3.81  мм.рт.ст.  и более
               Press[0] = '\2';                                       //Зажигаем ЧЕТЫРЕ стрелки ВНИЗ
               Press[1] = '\2';
               Press[2] = '\2';
               Press[3] = '\2';
               };
    
               if(((Q2 - Q1) < 0.64)&((Q2 - Q1) > -0.64)){             //Если разность между измерениями давления с интервалом в 2 часа от 0.64 до -0.64 мм.рт.ст.
               Press[0] = ' ';                                         //Не зажигаем ни одной стрелки  
               Press[1] = ' ';
               Press[2] = ' ';
               Press[3] = ' ';
               }

     

    c-RQrT_EXB8.jpg

    • Like 1
    • Thanks 1

  16. По-моему, помимо отсутствия автоматического реконнекта к роутеру после перезагрузки последнего, еще проблема с давлением на BME280. За несколько часов абсолютно не отклонилось от величины 740 мм.рт.ст. Вроде как, не бывает такого. В narodmon то же самое отправляет. 

    P.S. Прошу прощения. С давлением разобрался. Вроде бы, всё в порядке. просто первое показание записалось как "0". Отсюда соответственное масштабирование графика было. В narodmon можно удалить это ошибочное показание. А как быть с графиком в веб-интерфейсе ESP? У меня там тоже первое значение давления равно нулю. И график поэтому в неправильном масштабе (прямая линия).

    P.S.S. Да, с BME280 проблема: первое показание равно нулю. Нужно исключить его в коде.

     

     

    sqTohf6AmHU.jpg


  17. 1 час назад, Kitsum сказал:

    Скачайте и проверьте ушли ли Ваши проблемы

    Да, проблема ушла. Спасибо. Но у себя обнаружил другую большую проблему. Если роутер перезагружается, ESP переходит в режим точки доступа. И обратно коннектится к роутеру , только после ручной перезагрузки... Или необходимо подождать?


  18. 2 минуты назад, RusD сказал:

    Да нет же... ) Там все просто. Заместо строки 

    Ну... я имею ввиду, что мне не понятно абсолютно, что там происходит))) Это программирование не для средних умов. А я просто приколхозил чего-то) Интуитивно.


  19. 4 минуты назад, RusD сказал:

    Добрый вечер. Я тоже столкнулся с данной проблемой. Решение нашел в данной теме по адресу 

     

    Спасибо за быстрый ответ =) Но там решение такое сложное... Я, как настоящий дуремар, решил проблему таким способом:

     

     #ifdef TG_BME_280_I2C_H
        BME280I2C::Settings settings;
        //settings.bme280Addr = 0x76; // 0x76 0x77
        BME.setSettings(settings);
        Wire.beginTransmission(0x76);
        if (Wire.endTransmission() == 0) {
          temperature.status = humidity.status = pressure.status = BME.begin();
        }
      #endif

    Строки с BMP180 все закомментировал.


  20. Не могу связать с датчиком BME280. Если раскомментировать строчки 

    //#include <BME280I2C.h>
    //BME280I2C BME;

    Arduino IDE ругается:

    Цитата

     

    C:\****************ESP8266_WS_iT4iT.CLUB\ESP8266_WS_iT4iT.CLUB\ESP8266_WS_iT4iT.CLUB.ino: In function 'void setup()':

    ESP8266_WS_iT4iT.CLUB:257: error: invalid conversion from 'int' to 'BME280I2C::I2CAddr' [-fpermissive]

    exit status 1
    invalid conversion from 'int' to 'BME280I2C::I2CAddr' [-fpermissive]

     

    А если оставить, как есть, то ESP находит датчик по адресу 0х76, но данные с датчика на главную страницу не выводит.

×
×
  • Создать...