Jump to content
iT4iT.CLUB

post125

Members
  • Content Count

    83
  • Joined

  • Last visited

  • Days Won

    9

post125 last won the day on July 23

post125 had the most liked content!

Community Reputation

14 Good

Recent Profile Visitors

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

  1. эти указания не очевидны. не надо отвечать вопросом на вопрос. и еще раз озвучу, что на Про Мини скетч работал и из беззнаковых получались знаковые без проблем.
  2. Добрый день! Магнитометр 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 Диаграммы создаются, но значения совсем не похожи на данные и не меняются. Подскажите, пожалуйста. **************************** почему-то заработало - полтергейст какой-то
  3. проблема с работоспособностью этого скетча на ЕСП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)
  4. Добрый день! Хочу прикрутить к метеостанции магнитометр 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.
  5. обертывание в фольгу такого экрана для датчика как у den48rus только усугубит проблему с перегревом датчика, т.к. уменьшит воздухообмен. Плюс к этому расположение датчика на стене, освещенной солнцем очень плохое решение, даже если повесить на стену настоящую будку Стивенсона - стена сильно нагревается и передает тепло в окружающее простанство.
  6. скетч ардуины, принимающей данные с орегонов INT_oregon-arduino_wind_rain_1_3_4_temp_slave1_7-7-19.zip
  7. Добрый день! У меня все внешние датчики подключаются к ESP через ардуины про мини, подключенные по шине i2c как slave. Данные от датчиков Орегон считываются одной из таких ардуин с приемником на 433МГц. Принимаю данные от 1-го датчика ветра WGR800, 1-го датчика осадков PCR800 и трёх термогигрометров THGR810. Данные всех пяти датчиков принимаются со статусом питания, если его не читать, можно еще добавить два термогигрометр. Полный скетч в приложении. Там еще добавлен экран nextion. Его можно не подключать, без него работает нормально. скетч до конца не отработан. Проверен вебсервер ESP и народный мониторинг. MQTT знаю, что работает, но на всех датчиках еще не проверил. INT_Meteo_D_4slaves_nextion4x16_mqtt_10-7-19.zip
  8. CCS811 измеряет не только СО2 , но и другие летучие в-ва, которые косвенно то же будут влиять на показания СО2, отсюда точность по СО2 может уплывать. Его удобно использовать для мониторинга качества воздуха в помещении и организации проветривания. MH-Z19 - инфракрасный датчик только для СО2, к летучим органическим в-вам он нечувствителен, он у меня стоит в теплице для "научного мониторинга"
  9. это я невнимательно посмотрел, на алиэкспрессе увидел неправильный перевод описания датчика CCS8111. Там было указано угарный газ (CO). я себе для мониторинга CO2 поставил MH-Z19, поэтому с CCS8111 не знакомился.
  10. а угарный газ где есть необходимость контроллировать? в котельной?
  11. Добрый день! Отключил логи датчиков в "sensors.add" и ESPшка вздохнула полной грудью (тем более когда много датчиков треки всё равно не строятся). Теперь при трёх параметрах от BME280 , трёх программных датчиках и 64 параметров от 4-х slave ардуин занято памяти 55952, свободно 25964. Теперь возможности прошивки соответствуют железу, которое собрал. Конечно, 70 диаграмм на одной странице - это каша. Можно ли как-то сделать не 2 закладки как сейчас "out" и "in" , а хотя бы 4-5. Заранее благодарен за ответ.
  12. Подключить можно, но нет смысла, т.к. датчики по i2c не рекомендуется подключать проводом длиннее 1,5 метров- могут глючить. А вот DS18B20 аполне можно подключать длинными проводами. Народ в сети заявлял об удачном подключении витой парой до 100 метров. Не проверял, но надежнее использовать экранированный кабель. УФ датчик еще не добавил себе, но буду делать вместе с датчиком освещенности температуры воздуха и грунта, влажности, пыли. У меня только все внешние данные передаются через NRF24 и орегоновские датчики ветра и осадков и температуры по своему протоколы на 433МГц.
  13. Благодарю за ответ. Включение консоли отгрызает еще порядка 2,5к ОЗУ. Загрузил, пишет: free ram: 11496 при попытке открыть веб странцу пишет: free ram: 10672 http: 10.185.19.74 /index.htm, 304 http: 10.185.19.74 /jquery.min.js.gz, 304 http: 10.185.19.74 /jquery.knob.min.js.gz, 304 http: 10.185.19.74 /md5.js.gz, 304 http: 10.185.19.74 /highcharts.js.gz, 304 http: 10.185.19.74 /favicon.ico, 304 free ram: 11496 веб страница, естественно не открывается, на синем фоне крутится стандартное колесо из белых точек. я не знаю чего не хватает, нет квалификации, чтобы что-то утверждать, но , как выяснил, при занятой памяти более 69к, веб страница уже не открывается. Все датчики со slave ардуин добавляются идентично: sensors.add(S3_0, device::out, 0x01, "out_3_0", out_3_0, true); sensors.add(S3_1, device::out, 0x01, "out_3_1", out_3_1, true); sensors.add(S3_2, device::out, 0x01, "out_3_2", out_3_2, true); sensors.add(S3_3, device::out, 0x01, "out_3_3", out_3_3, true); sensors.add(S3_4, device::out, 0x01, "out_3_4", out_3_4, true); sensors.add(S3_5, device::out, 0x01, "out_3_5", out_3_5, true); sensors.add(S3_6, device::out, 0x01, "out_3_6", out_3_6, true); и так далее наверное, в моей ситуации 29 параметров со slave ардуин + 3 програмных + 3 с BME280 и без консоли - это предел для ESP8266.
  14. Добрый день! Дерзну ответить. У меня сделано так: 1. В файле с датчиками (по умолчанию "users_bme280_x2.h") после строки "knob_t *H = new knob_t( 0, 100, ".01", "Влажность", "%");" вставляете: knob_t *DP = new knob_t(-50, 100, ".01", "точка_росы", "°C"); (это будет круговая диаграмма с точкой росы) 2. перед строкой "void sensors_config() {" вставляете: float dewPointFast(float celsius, float humidity) { float a = 17.271; float b = 237.7; float temp = (a * celsius) / (b + celsius) + log(humidity*0.01); float Td = (b * temp) / (a - temp); return Td; } (это функция расчета точки росы) 3. после строки " sensors.add(T, device::out, 0x76, "out_temperature", out_init, out_temp, true);" вставляете : sensors.add(DP, device::out, "dewpoint", [&](){ return dewPointFast(out_temp(), out_hum()); }, true); (это добавление програмного датчика точки росы для уличного датчика) 4. заливаете прошивку и точка росы должна появиться в веб-интерфейсе
×
×
  • Create New...