Jump to content
iT4iT.CLUB

post125

Members
  • Content Count

    89
  • Joined

  • Last visited

  • Days Won

    9

post125 last won the day on July 23 2019

post125 had the most liked content!

Community Reputation

16 Good

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Положите его в морозилку, результат будет доступен быстрее
  2. Если будет кому-то необходимо подключить NRF к ESP не напрямую, а через ардуино про мини по I2C, попробую сформулировать это в одном посте, что бы не искать по всему форуму. Всё работает отлично, только пришлось отключить накопление статистики по большинству датчиков, т.к. у ESP не хватает оперативки. В данный момент работают две метеостанции. Хочу отметить, поскольку не разобрался со страничной передачей данных по I2C, у меня на одной метеостации 2 NRFки и на другой 3 NRFки. Каждая NRFка может принимать данные от пяти NRFок, но передаёт на ESP только 16 параметров INT. Структура датчиков в приложенном PDFе. Данные пока сбрасываю только на народный монитор. MQTT работает, проверял, нет времени подключить окончательно комп. метеостанция ESP8266 структура_int 12-7-19.xlsx.pdf
  3. Добрый день! А сделать , как у меня с Вашей помощью получилось, через slave-ардуину по I2C чем плохо? порты дополнительные не нужны, прерывания не нужны, лишняя библиотека не нужна, NRFке никто не мешает принимать данные и они не теряются. Небольшая проблема в нехватке оперативки у ESP8266 при большом количестве датчиков, так эта же проблема проявится и при подключении по SPI. Стоимость ардуино pro mini в районе 100р, что не сильно повысит общую стоимость.
  4. Спасибо! Будем пробовать, лишь бы не слетели ардуины slave. А ESP32 на горизонте не виднеется?
  5. если это северная сторона , летом всё будет ок; зимой будут показания завышаться
  6. Я впаивал в ESP память и 8 и 16 МБ и соответственно менял конфигурации а Arduini IDE - никакого смысла в этом нет, работает совершенно так же , как и с 4 МБ. И начальная загрузка дольше, особенно с 8 МБ. И на большом количестве датчиков точно также перестает строить тренды.
  7. эти указания не очевидны. не надо отвечать вопросом на вопрос. и еще раз озвучу, что на Про Мини скетч работал и из беззнаковых получались знаковые без проблем.
  8. Добрый день! Магнитометр 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 Диаграммы создаются, но значения совсем не похожи на данные и не меняются. Подскажите, пожалуйста. **************************** почему-то заработало - полтергейст какой-то
  9. проблема с работоспособностью этого скетча на ЕСП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)
  10. Добрый день! Хочу прикрутить к метеостанции магнитометр 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.
  11. обертывание в фольгу такого экрана для датчика как у den48rus только усугубит проблему с перегревом датчика, т.к. уменьшит воздухообмен. Плюс к этому расположение датчика на стене, освещенной солнцем очень плохое решение, даже если повесить на стену настоящую будку Стивенсона - стена сильно нагревается и передает тепло в окружающее простанство.
  12. скетч ардуины, принимающей данные с орегонов INT_oregon-arduino_wind_rain_1_3_4_temp_slave1_7-7-19.zip
  13. Добрый день! У меня все внешние датчики подключаются к ESP через ардуины про мини, подключенные по шине i2c как slave. Данные от датчиков Орегон считываются одной из таких ардуин с приемником на 433МГц. Принимаю данные от 1-го датчика ветра WGR800, 1-го датчика осадков PCR800 и трёх термогигрометров THGR810. Данные всех пяти датчиков принимаются со статусом питания, если его не читать, можно еще добавить два термогигрометр. Полный скетч в приложении. Там еще добавлен экран nextion. Его можно не подключать, без него работает нормально. скетч до конца не отработан. Проверен вебсервер ESP и народный мониторинг. MQTT знаю, что работает, но на всех датчиках еще не проверил. INT_Meteo_D_4slaves_nextion4x16_mqtt_10-7-19.zip
  14. CCS811 измеряет не только СО2 , но и другие летучие в-ва, которые косвенно то же будут влиять на показания СО2, отсюда точность по СО2 может уплывать. Его удобно использовать для мониторинга качества воздуха в помещении и организации проветривания. MH-Z19 - инфракрасный датчик только для СО2, к летучим органическим в-вам он нечувствителен, он у меня стоит в теплице для "научного мониторинга"
×
×
  • Create New...