• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP-01 и BME280

Доброго времени суток всем.
Решил сделать погодную станцию из ESP-01 и датчика BME280.
Соединил по интерфейсу I2C (GPIO0 -SCL, GPIO2 - SDA), для питания использовал миниатюрный БП HiLink 3.3V, поставил дополнительный фильтрующий конденсатор 50мкФ. В качестве библиотеки используется <BME280I2C.h>
Вот такой процеДурью читаются показания:

void ReadBME() {
rbme = tbme;
#if BME_ON
if (bmestate) {
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
BME280::presUnit presUnit(BME280::presUnit_Pa);
bme.read(pres, temp, hum, tempUnit, presUnit);
pres = pres / 133.33;
// Далее корректируем показания согласно поправок.
pres = pres + cpres;
temp = temp + ctemp;
hum = hum + chum;
} else {pres = 761.99; temp = 27.99; hum = 26.99;} // такие значения будут в случае неготовности или неисправности датчика
#else
pres = 760; temp = 26; hum = 25; // Либо добавляем тестовые значения.
#endif
}

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

esp340

Active member
У меня ESP-12F в связке с BME280 нормально работает. Использую Адафрутовскую библу. Как показывает практика чаще всего проблемы возникают из-за питания. Попробуйте добавить к электролиту еще керамику.
 

l15ar

Member
поставил дополнительный фильтрующий конденсатор 50мкФ.
Мало очень! нужно минимально 470мкф и керамика на 0.1мкф.
Как на счёт самой сети 220V? Там могут быть скачки-провалы напряжения.
Электролит на 1000-2000 мкф. х 6.3В (он копеечный) не помешает, по любому!
50мкф - очень мало!
 
Питание смотрел осциллографом - в пределах нормы. Так что проблема скорее всего не в этом. Хотя полагаю что может датчик "заводится" как микрофон и сам себе начинает мешать?
 
У меня ESP-12F в связке с BME280 нормально работает. Использую Адафрутовскую библу. Как показывает практика чаще всего проблемы возникают из-за питания. Попробуйте добавить к электролиту еще керамику.
Адафруит библа от стандартной Адруины или адаптированная для ESP?
 

nikolz

Well-known member
Доброго времени суток всем.
Решил сделать погодную станцию из ESP-01 и датчика BME280.
Соединил по интерфейсу I2C (GPIO0 -SCL, GPIO2 - SDA), для питания использовал миниатюрный БП HiLink 3.3V, поставил дополнительный фильтрующий конденсатор 50мкФ. В качестве библиотеки используется <BME280I2C.h>
Вот такой процеДурью читаются показания:

void ReadBME() {
rbme = tbme;
#if BME_ON
if (bmestate) {
BME280::TempUnit tempUnit(BME280::TempUnit_Celsius);
BME280::presUnit presUnit(BME280::presUnit_Pa);
bme.read(pres, temp, hum, tempUnit, presUnit);
pres = pres / 133.33;
// Далее корректируем показания согласно поправок.
pres = pres + cpres;
temp = temp + ctemp;
hum = hum + chum;
} else {pres = 761.99; temp = 27.99; hum = 26.99;} // такие значения будут в случае неготовности или неисправности датчика
#else
pres = 760; temp = 26; hum = 25; // Либо добавляем тестовые значения.
#endif
}

Так вот такая получается ситуация - может отработать час, может сутки, может неделю, но иногда контроллер зависает, иногда выдает всякую чушь. Менял BME280 - результат такой же - может нормально поработать и в ступор. Может библиотека глючная? Кто сталкивался с таким непотребством, подскажите решения.
если с паяльником дружите то рекомендую сделать глубокий сон для ESP-01 , когда не измеряете показания.
рекомендую соединить диодом шоттки а не к з , но можно и так.
В результате
1) уменьшите среднее потребление и соответственно нагрев всего хозяйства
2) ESP будет перезапускаться при просыпании
3) весьма вероятно сбои исчезнут.
----------------
4) поставьте подтяжки для SDA и SCL в 4.7к.
 

esp340

Active member
если с паяльником дружите то рекомендую сделать глубокий сон для ESP-01 , когда не измеряете показания.
nikolz, у меня создается впечатление что вы раздаете свои советы налево и направо не читая поставленных вопросов по принципу лишь бы пер**ть при этом ни разу не показав своего программного решения. Вот скажите, накуя при питании от сети спящий режим? Что там сохранять?
 

l15ar

Member
nikolz, у меня создается впечатление что вы раздаете свои советы налево и направо не читая поставленных вопросов по принципу лишь бы пер**ть при этом ни разу не показав своего программного решения. Вот скажите, накуя при питании от сети спящий режим? Что там сохранять?
Сохранять там нечего совсем, правда!
Имелось ввиду, что постоянный перезапуск ESP сведёт на нет все проблемы.
С тем же успехом, можно использовать ватчдог-таймер.
С тем же успехом, можно выполнять периодический сброс устройства, программой!
Думаю, причины такого поведения именно у ESP-01 чисто конструктивные - внешние наводки!
Потому что, ESP-12F сделано более добротно, есть экранирование!
Думать нечего! Использовать копеечный модуль, и ожидать хорошего результата - нет смысла, совсем!
:\
 
Поставил библу , открыл пример bme280_unified компилирую и получаю
class Adafruit_Sensor' has no member named 'printSensorDetails'
на строке bme_humidity->printSensorDetails(); и аналогичных на температуру и давление ...
Пример не рабочий? Если у вас есть какой нють гарантированно рабочий кусок кода, приведите плиз...
 
Сохранять там нечего совсем, правда!
Имелось ввиду, что постоянный перезапуск ESP сведёт на нет все проблемы.
С тем же успехом, можно использовать ватчдог-таймер.
С тем же успехом, можно выполнять периодический сброс устройства, программой!
Думаю, причины такого поведения именно у ESP-01 чисто конструктивные - внешние наводки!
Потому что, ESP-12F сделано более добротно, есть экранирование!
Думать нечего! Использовать копеечный модуль, и ожидать хорошего результата - нет смысла, совсем!
:\
Начну с последнего - в качестве испытательной базы пользовал ESP12E - результ аналогичный. Так что не в цене и качестве по ходу дело...
Испольовать ватчдог таймер - пробовал - ему посрать по барабану. Тут либо дело в датчике, либо в коде. Кстати в режиме эмуляции датчика все работает отлично и не виснет (2 недели!!!) Другой момент как разделить что глючит - хард или софт (библиотеки) - вот основной вопрос!
 

esp340

Active member
Поставил библу , открыл пример bme280_unified компилирую и получаю
class Adafruit_Sensor' has no member named 'printSensorDetails'
на строке bme_humidity->printSensorDetails(); и аналогичных на температуру и давление ...
Пример не рабочий? Если у вас есть какой нють гарантированно рабочий кусок кода, приведите плиз...
У меня этот пример нормально компилится
 

l15ar

Member
Начну с последнего - в качестве испытательной базы пользовал ESP12E - результ аналогичный. Так что не в цене и качестве по ходу дело...
Испольовать ватчдог таймер - пробовал - ему посрать по барабану. Тут либо дело в датчике, либо в коде. Кстати в режиме эмуляции датчика все работает отлично и не виснет (2 недели!!!) Другой момент как разделить что глючит - хард или софт (библиотеки) - вот основной вопрос!
может понизить частоту шины i2c? скажем до 100КГц(или меньше).
Вообще то, в документации(esp8266) написано, что макс. частота 100КГц, по факту, многие работают на частоте 400КГц. Странно очень!
Может кто нибудь прояснить этот вопрос?
 
Народ, тут главная задача такая, чтобы как-то диагностировать датчик это или библиотека. Думаю проще начать с библиотек, но установил адафрутовскую и в примере она мне матюкается. Плиз если есть возможность приведите гарантированно рабочий код - так будет вразы проще.
 
может понизить частоту шины i2c? скажем до 100Кгц(или меньше).
Вообще то, в документации написано, что макс. частота 100Кгц, по факту многие работают на 400Кгц. Странно очень!
Как это сделать? Я ее специально никак не задавал - даже не умею такого на данный момент.
 
Сверху Снизу