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

Devilisimo

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

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

  • Посещение

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

    2

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


  1. 29.09.2018 в 19:56, Kitsum сказал:

    Доброе время суток

    Обратите внимание, что используемые Вами порты для SoftwareSerial уже задействованы под управление нагрузкой при превышение определенных показаний. Найти их можно в файле gpio.h и в настройках web интерфейса, раздел "Контроль состояния GPIO". Для начала уберите управление нагрузкой с этих портов, закомментируйте в основном файле программы вызов функции

    
    gpio_12_13();

    Далее я порекомендую проконтролировать что приходит в ответ на запрос данных с сенсоров. Для этого в браузере откройте режим разработчика и загрузите страницу метеостанции. Смотрите на запрос "sensors". Выглядеть это должно примерно так.

     

    Можно вывести в консоль данные о поэтапной работе функции чтения данных с сенсора mh-z19

    
    readCO2();

    Также можно упростить инициализацию датчика CO2 и выбросить лямбда-выражение указав в качестве последнего аргумента функцию чтения данных с сенсора.

    
    sensors.add(PPM, device::in, "co2_ppm", readCO2);

     

    Спасибо за подробный ответ.

    Все сделал по рекомендациям. В режиме разработчика, ответ есть:

    {"in_temperature":22.50,"in_humidity":0.00,"in_pressure":744.82,"out_temperature":22.06,"out_humidity":43.84,"out_pressure":744.59,"co2_ppm":510.00,"rssi":-63.00,"out_absoluteHumidity":8.55}

    1. {in_temperature: 22.49, in_humidity: 0, in_pressure: 744.79, out_temperature: 22.07,…}
      1. co2_ppm: 512
      2. in_humidity: 0
      3. in_pressure: 744.79
      4. in_temperature: 22.49
      5. out_absoluteHumidity: 8.59
      6. out_humidity: 44.18
      7. out_pressure: 744.64
      8. out_temperature: 22.07
      9. rssi: -61

    Отображения нет на графике, подскажите куда копать.

    image.thumb.png.3dff4944f088f1cd704bda610ff88604.png

    Хотя беру свои слова обратно, отображение появилось после нескольких обновлений страницы!!!

    Спасибо.

    image.thumb.png.267f89af9bf850df96a3e22e68b2d334.png


  2. Добрый день.

    Еще раз выражу свое восхищение данным проектом.

    Если кто-то сможет, прошу подсказки. Добавил в данный проект датчик CO2 mh-z19, вроде все скомпилировалось, но данные не приходят с датчика.

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

     

    #ifndef USERS_H
    #define USERS_H
    #define MH_Z19_RX 13 // D7
    #define MH_Z19_TX 12 // D6

    #include <BME280I2C.h> // https://github.com/finitespace/BME280

    // SoftSerial for MH-Z19
    #include <SoftwareSerial.h>       // https://github.com/plerup/espsoftwareserial
    //#include <MHZ19.h>
    SoftwareSerial co2Serial(MH_Z19_RX, MH_Z19_TX); // define MH-Z19

    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);

    /* Параметры индикаторов web интерфейса для плагина Knob
                           Мин  Макс   Шаг    Заголовок      Ед. измер.
    |---------------------|----|------|------|--------------|---------| */
    knob_t *T = new knob_t( -40,   50, ".1", "Температура", "°C");
    knob_t *P = new knob_t(   0,   900, ".1", "Давление",    "mm");
    knob_t *H = new knob_t(   0,   100, ".1", "Влажность",   "%");
    knob_t *AH = new knob_t(  0,   100, ".1", "Влажность", "г/м&sup3;");
    knob_t *PPM = new knob_t(-400, 5000, ".1", "CO2",   "ppm");

    /* Функции, описывающие инициализацию датчиков */
    void out_init() { BME_OUT.begin(); }
    void in_init()  { BME_IN.begin(); }

    /* Функции, описывающие как получить от внешнего датчика те или иные данные */
    float out_temp() { return BME_OUT.temp(BME280::TempUnit_Celsius); } 
    float out_hum()  { return BME_OUT.hum(); }
    float out_pres() { return BME_OUT.pres(BME280::PresUnit_torr); }

    /* Функции, описывающие как получить от внутреннего датчика те или иные данные */
    float in_temp()  { return BME_IN.temp(BME280::TempUnit_Celsius); }
    float in_hum()   { return BME_IN.hum(); }
    float in_pres()  { return BME_IN.pres(BME280::PresUnit_torr); }

    float readCO2()
    {

      byte cmd[9] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
      // command to ask for data
      byte response[9]; // for answer

      co2Serial.write(cmd, 9); //request PPM CO2

      // The serial stream can get out of sync. The response starts with 0xff, try to resync.
      while (co2Serial.available() > 0 && (unsigned char)co2Serial.peek() != 0xFF) {
        co2Serial.read();
      }

      memset(response, 0, 9);
      co2Serial.readBytes(response, 9);

      if (response[1] != 0x86)
      {
        //Serial.println("Invalid response from co2 sensor!");
        return -1;
      }

      byte crc = 0;
      for (int i = 1; i < 8; i++) {
        crc += response;
      }
      crc = 255 - crc + 1;

      if (response[8] == crc) {
        int responseHigh = (int) response[2];
        int responseLow = (int) response[3];
        int ppm = (256 * responseHigh) + responseLow;
        return ppm;
      } else {
        //Serial.println("CRC error!");
        return -1;
      }
    }

    /* Добавление датчиков в систему */
    void sensors_config() {
      co2Serial.begin(9600); //Init sensor MH-Z19(14)
      Wire.begin(4, 5);
        sensors.add(AH, device::out, "out_absoluteHumidity", [&](){ return absoluteHumidity(out_temp(), out_hum()); }
      );
        sensors.add(new knob_t(-100, 0, "1", "RSSI", "dbm"), device::in, "rssi",[&](){ 
        return wifi.isConnected() ? WiFi.RSSI() : 0; 
      });
      
        sensors.add(PPM, device::in, "CO2 ppm",[&](){ 
        return readCO2(); 
      });
      /* Внешний датчик */
      sensors.add(P, device::out, 0x76, "out_pressure",    out_pres, true);
      sensors.add(H, device::out, 0x76, "out_humidity",    out_hum,  true);  
      sensors.add(T, device::out, 0x76, "out_temperature", out_init, out_temp, true);
      
      /* Внутренний датчик */
      sensors.add(P, device::in, 0x77, "in_pressure",    in_pres, true);
      sensors.add(H, device::in, 0x77, "in_humidity",    in_hum,  true);
      sensors.add(T, device::in, 0x77, "in_temperature", in_init, in_temp, true);
    }

    #endif

     

     

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