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

post125

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

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

  • Посещение

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

    9

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


  1. Добрый день! Кто в курсе, подскажите, пожалуйста, можно ли использовать Планировщик задач из этого проекта (cron.h) с Mega2560. Пробую сделать себе контроллер теплицы, при компиляции ругается:

    In file included from /var/folders/1j/57_hl_vj3fxdlg7wc55tb8pr0000gn/T/arduino_modified_sketch_575968/tepl_motor4.ino:7:0:
    sketch/cron.h: At global scope:
    cron.h:54:49: error: 'cronEvent::cronUserFunction_t' has not been declared
         void add(unsigned long interval, cronEvent::cronUserFunction_t fn, const char *id);
                                                     ^
    cron.h:55:49: error: 'cronEvent::cronUserFunction_t' has not been declared
         void add(unsigned long interval, cronEvent::cronUserFunction_t fn, bool coldStart, const char *id);
                                                     ^
    cron.h:91:51: error: 'cronEvent::cronUserFunction_t' has not been declared
     void cron::add(unsigned long interval, cronEvent::cronUserFunction_t fn, const char *id = 0) {
                                                       ^
    cron.h:97:51: error: 'cronEvent::cronUserFunction_t' has not been declared
     void cron::add(unsigned long interval, cronEvent::cronUserFunction_t fn, bool coldStart, const char *id = 0) {
                                                       ^
    sketch/cron.h: In member function 'void cron::add(long unsigned int, int, bool, const char*)':
    cron.h:99:21: error: 'fn' cannot be used as a function
       if (coldStart) fn();
                         ^
    sketch/cron.h: In member function 'void cron::handleEvents()':
    cron.h:108:23: error: 'class cronEvent' has no member named 'function'
             currentEvent->function();
                           ^
    exit status 1
    'function' in namespace 'std' does not name a template type

    на ESP компилируется, но там пинов слишком мало - не выйдет реализовать задуманное

    Заранее благодарен за помощь


  2. 4 минуты назад, Aleksey I сказал:

    Пароль просто буквы без символов. А вот точка достума со знаком _

    По имени не помню, по спецсимволам в пароле была проблема; попробуйте имя проще сделать. То ли $, то ли & не проходили


  3. 16.05.2020 в 00:06, Kitsum сказал:

    я не могу ручаться за достоверность всех описанных действий т.к не проверял их на практике

    Всё супер работает, благодарю. Иконки, правда, какие-то корявые получаются - надо с ними поэкспериментировать. Еще один вопрос, можно ли один и тот же датчик отображать на нескольких страницах?


  4. Добрый день! Можно ли добавить закладки в web-интерфейсе помимо "in" и "out".  У меня 39 датчиков на одной странице, трудно ориентироваться, хотелось бы распределить на 3-4 страницы. На форуме решения не нашел. Заранее благодарен за ответ


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

    @post125 да, подключение через контроллер посредник будет самым выгодным. На сколько мне помнится, Вы уже скидывали в эту тему свои наработки. Вот бегло нашел первый пост https://it4it.club/topic/55-meteostanciya-na-esp8266-ot-it4itclub/?do=findComment&comment=1203, начиная с него можно почитать о Вашем опыте. Но хоть это больше про I2C, думаю заинтересованным будет интересно.

     

    Если будет кому-то необходимо подключить  NRF к ESP не напрямую, а через ардуино про мини по I2C, попробую сформулировать это в одном посте, что бы не искать по всему форуму. Всё работает отлично, только пришлось отключить накопление статистики по большинству датчиков, т.к. у ESP не хватает оперативки. В данный момент работают две метеостанции. Хочу отметить,  поскольку не разобрался со страничной передачей данных по I2C, у меня на одной метеостации 2 NRFки и на другой 3 NRFки. Каждая NRFка может принимать данные от пяти NRFок, но передаёт на ESP только 16 параметров INT. Структура датчиков в приложенном PDFе. Данные пока сбрасываю только на народный монитор. MQTT работает, проверял, нет времени подключить окончательно комп.

    метеостанция ESP8266 структура_int 12-7-19.xlsx.pdf


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

    подключается она по SPI, а это значит, что потребуется много портов

    Добрый день! А сделать , как у меня с Вашей помощью получилось, через slave-ардуину по  I2C чем плохо? порты дополнительные не нужны, прерывания не нужны, лишняя библиотека не нужна, NRFке никто не мешает принимать данные и они не теряются. Небольшая проблема в нехватке оперативки у ESP8266 при большом количестве датчиков, так эта же проблема проявится и при подключении по SPI. Стоимость ардуино pro mini в районе 100р, что не сильно повысит общую стоимость.

    • Like 2

  7. 08.12.2019 в 19:49, Андрей Иванов сказал:

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

    если это северная сторона , летом всё будет ок;  зимой будут показания завышаться


  8. 11.11.2019 в 06:57, Neon сказал:

    Обратил внимание , что в Ардуино IDE при в плате esp можно выбрать 8 и 16 мегабайт

    Я впаивал в ESP память и 8 и 16 МБ и соответственно менял конфигурации а Arduini IDE - никакого смысла в этом нет, работает совершенно так же , как и с 4 МБ. И начальная загрузка дольше, особенно с 8 МБ. И на большом количестве датчиков точно также перестает строить тренды.


  9. 8 минут назад, Василий Залукаев сказал:

    Так я тебе тут показал куда копать.

    эти указания не очевидны. не надо отвечать вопросом на вопрос. и еще раз озвучу, что на Про Мини скетч работал и из беззнаковых получались знаковые без проблем.


  10. 08.10.2018 в 12:04, Kitsum сказал:

    Конечно есть нюансы, но они будут всегда.

    Добрый день!

    Магнитометр QRM3100 корректно работает на ESP8266 c данным скетчем:

    #include <Wire.h>
    float xхх, yyy, zzz;
    
    void setup() {
      Serial.begin(9600);
      Wire.begin();
      writeRegister(0b0000001,0b01110001); 
    }
    
    void loop() {
    
    delay(500); 
    
    while ((readRegister(0x34) & 0x80) != 0x80) {} 
      int8_t mx2 = readRegister(0x24);
      uint8_t mx1 = readRegister(0x25);
      uint8_t mx0 = readRegister(0x26);
      int8_t my2 = readRegister(0x27);
      uint8_t my1 = readRegister(0x28);
      uint8_t my0 = readRegister(0x29);
      int8_t mz2 = readRegister(0x2A);
      uint8_t mz1 = readRegister(0x2B);
      uint8_t mz0 = readRegister(0x2C);
    
      xxx = ((int32_t)(mx2 * 256 * 256) | (mx1 * 256) | mx0);
      yyy = ((int32_t)(my2 * 256 * 256) | (my1 * 256) | my0);
      zzz = ((int32_t)(mz2 * 256 * 256) | (mz1 * 256) | mz0);
    
    
      Serial.print("M:  X\t");
      Serial.print(xxx);
      Serial.print("\t   Y\t");
      Serial.print(yyy);
      Serial.print("\t   Z\t");
      Serial.print(zzz);
      Serial.println("");
      delay(500);  
      
    }
    
    uint8_t readRegister(uint8_t address){  // функция чтения регистра
      uint8_t output;
    
      Wire.beginTransmission(0x23);
      Wire.write(address);
      Wire.endTransmission();
    
      delayMicroseconds(2);
    
      Wire.requestFrom(0x23, 1);
      while(Wire.available())
      {
      output = Wire.read();
      }
      return output;
    }
    
    void writeRegister(uint8_t address, uint8_t value){ // функция записи в регистр
      Wire.beginTransmission(0x23);
      Wire.write(address);
      Wire.write(value);
      Wire.endTransmission();
    }

    но никак не получается на его основе в метеостанции создать новые сенсоры, не видит нкакие данные от QRM3100. Может что-то конфликтует?

    вставляю в user_sensor след. образом:

    #ifndef USERS_H
    #define USERS_H
    float MAG[3];
    ...
    knob_t *MAG_X = new knob_t(-10000, 10000, ".01", "mag_X", "nG");
    knob_t *MAG_Y = new knob_t(-10000, 10000, ".01", "mag_Y", "nG");
    knob_t *MAG_Z = new knob_t(-10000, 10000, ".01", "mag_Z", "nG");
    ...
    
    uint8_t readRegister(uint8_t address){  // функция чтения регистра
      uint8_t output;
    
      Wire.beginTransmission(0x23);
      Wire.write(address);
      Wire.endTransmission();
    
      delayMicroseconds(2);
    
      Wire.requestFrom(0x23, 1);
      while(Wire.available())
      {
      output = Wire.read();
      }
      return output;
    }
    
    void writeRegister(uint8_t address, uint8_t value){ // функция записи в регистр
      Wire.beginTransmission(0x23);
      Wire.write(address);
      Wire.write(value);
      Wire.endTransmission();
    }
    void getMAG() {
    
    while ((readRegister(0x34) & 0x80) != 0x80) {} 
      writeRegister(0b0000001,0b01110001); 
    
      int8_t mx2 = readRegister(0x24);
      uint8_t mx1 = readRegister(0x25);
      uint8_t mx0 = readRegister(0x26);
      int8_t my2 = readRegister(0x27);
      uint8_t my1 = readRegister(0x28);
      uint8_t my0 = readRegister(0x29);
      int8_t mz2 = readRegister(0x2A);
      uint8_t mz1 = readRegister(0x2B);
      uint8_t mz0 = readRegister(0x2C);
    
      MAG[0] = ((int32_t)(mx2 * 256 * 256) | (mx1 * 256) | mx0);
      MAG[1] = ((int32_t)(my2 * 256 * 256) | (my1 * 256) | my0);
      MAG[2] = ((int32_t)(mz2 * 256 * 256) | (mz1 * 256) | mz0);
    
    }
    
    ...
    float getmag_x() { return MAG[0]; }
    float getmag_y() { return MAG[1]; }
    float getmag_z() { return MAG[2]; }
    ...  
      
    void sensors_config() {
    cron.add(cron::time_10s, getMAG, true);
    ...
      sensors.add(MAG_X, device::out,  "mag_x", getmag_x, true);
      sensors.add(MAG_Y, device::out,  "mag_y", getmag_y, true);
      sensors.add(MAG_Z, device::out, "mag_z", getmag_z, true);
    ...
    }
    #endif

    Диаграммы создаются, но значения совсем не похожи на данные и не меняются.

    Подскажите, пожалуйста.

    ****************************

    почему-то заработало - полтергейст какой-то


  11. 23 часа назад, post125 сказал:

    Скетч работает на ProMini, но не хочет на ESP8266

    проблема с  работоспособностью этого скетча на ЕСП8266 решена:

     int8_t mx2 = readRegister(0x24);
      uint8_t mx1 = readRegister(0x25);
      uint8_t mx0 = readRegister(0x26);
      int8_t my2 = readRegister(0x27);
      uint8_t my1 = readRegister(0x28);
      uint8_t my0 = readRegister(0x29);
      int8_t mz2 = readRegister(0x2A);
      uint8_t mz1 = readRegister(0x2B);
      uint8_t mz0 = readRegister(0x2C);

    так корректно  отображаются отрицательные значения. (помогли братья с форума esp8266)


  12. 08.10.2018 в 12:04, Kitsum сказал:

    Конечно есть нюансы, но они будут всегда.

    Добрый день!

    Хочу прикрутить к метеостанции магнитометр QRM3100 для отслеживания изменения магнитного поля.

     

    #include <Wire.h>
    float x, y, z;
    byte QRM3100_I2C_ADDRESS =0x23;
    
    void setup() {
      Serial.begin(9600);
      Wire.begin();
      writeRegister(0b0000001,0b01110001); 
    }
    
    void loop() {
    
    delay(500); 
    
    while ((readRegister(0x34) & 0x80) != 0x80) {} 
      uint8_t mx2 = readRegister(0x24);
      uint8_t mx1 = readRegister(0x25);
      uint8_t mx0 = readRegister(0x26);
      uint8_t my2 = readRegister(0x27);
      uint8_t my1 = readRegister(0x28);
      uint8_t my0 = readRegister(0x29);
      uint8_t mz2 = readRegister(0x2A);
      uint8_t mz1 = readRegister(0x2B);
      uint8_t mz0 = readRegister(0x2C);
    
      x = ((int32_t)(mx2 * 256 * 256) | (mx1 * 256) | mx0);
      y = ((int32_t)(my2 * 256 * 256) | (my1 * 256) | my0);
      z = ((int32_t)(mz2 * 256 * 256) | (mz1 * 256) | mz0);
    
    
      Serial.print("M:  X\t");
      Serial.print(x);
      Serial.print("\t   Y\t");
      Serial.print(y);
      Serial.print("\t   Z\t");
      Serial.print(z);
      Serial.println("");
      delay(500);  
      
    }
    
    uint8_t readRegister(uint8_t address){  // функция чтения регистра
      uint8_t output;
    
      Wire.beginTransmission(QRM3100_I2C_ADDRESS);
      Wire.write(address);
      Wire.endTransmission();
    
      delayMicroseconds(2);
    
      Wire.requestFrom(QRM3100_I2C_ADDRESS, 1);
      while(Wire.available())
      {
      output = Wire.read();
      }
      return output;
    }
    
    void writeRegister(uint8_t address, uint8_t value){ // функция записи в регистр
      Wire.beginTransmission(QRM3100_I2C_ADDRESS);
      Wire.write(address);
      Wire.write(value);
      Wire.endTransmission();
    }

    Скетч работает на ProMini, но не хочет на ESP8266. Насколько я понимаю, проблема в разрядности процессоров. ESP не хочет делать отрицательные "int". Пробовал методом "научного тыка" менять типы переменных, ничего хорошего не получается.

    Ардуино выдает:   X    475.00       Y    -1268.00       Z    3557.00

    ESP выдает: X    593.00       Y    16775842.00       Z    3409.00

    т.е. положительные значения похожи, а с отрицательными беда.

    Работающей библиотеки для датчика QRM3100 не нашел, нарыл только такой код простой записи и чтения регистров датчика. Поскажите, пожалуйста, как его подружить с ESp8266.

     


  13. 31 минуту назад, pvspec сказал:

    решит ли обертывание в фольгу? 

    обертывание в фольгу такого экрана для датчика как у den48rus только усугубит проблему с перегревом датчика, т.к. уменьшит воздухообмен. Плюс к этому расположение датчика на стене, освещенной солнцем очень плохое решение, даже если повесить на стену настоящую будку Стивенсона - стена сильно нагревается и передает тепло в окружающее простанство.


  14. 07.04.2018 в 19:50, Maks Crezi сказал:

    Подскажите, куда запилить библиотечку для приема радиодатчиков Орегон

    Добрый день!

    У меня все внешние датчики подключаются к ESP через ардуины про мини, подключенные по шине i2c как slave. Данные от датчиков Орегон считываются одной из таких ардуин с приемником на 433МГц. Принимаю данные от 1-го датчика ветра WGR800, 1-го датчика осадков PCR800 и трёх термогигрометров THGR810. Данные всех пяти датчиков принимаются со статусом питания, если его не читать, можно еще добавить два термогигрометр.

    Полный скетч в приложении. Там еще добавлен экран nextion. Его можно не подключать, без него работает нормально. скетч до конца не отработан. Проверен вебсервер ESP и народный мониторинг. MQTT знаю, что работает, но на всех датчиках еще не проверил.

    INT_Meteo_D_4slaves_nextion4x16_mqtt_10-7-19.zip

    • Like 1
    • Thanks 1

  15. 40 минут назад, den48rus сказал:

    обо датчика измеряют CO2

    CCS811 измеряет не только СО2 , но и другие летучие в-ва, которые косвенно то же будут влиять на показания СО2, отсюда точность по СО2 может уплывать. Его удобно использовать для мониторинга качества воздуха в помещении и организации проветривания.  MH-Z19 - инфракрасный  датчик только для СО2, к летучим органическим в-вам он нечувствителен, он у меня стоит в теплице для  "научного мониторинга"

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