• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 E12 + BME280 - не показывает влажность

Alex255

New member
Здравствуйте.

Подключил к ESP8266 E12 датчик BME280. Отлично возвращает температуру и давление, но влажность - постоянно 0.00%

Temperature = 21.69 *C
Pressure = 1000.89 hPa
Approx. Altitude = 103.46 m
Humidity = 0.00 %

Что самое интересное, на OrangePi Zero возвращает и влажность.

Протестировал уже два датчика - все тоже самое.

Код:
/***************************************************************************
  This is a library for the BME280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BME280 Breakout
  ----> http://www.adafruit.com/products/2650

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required
  to interface. The device's I2C address is either 0x76 or 0x77.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
***************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

void printValues();

void setup() {
    Serial.begin(9600);
    Serial.println(F("BME280 test"));

    bool status;
  
    // default settings
    status = bme.begin(0x76);
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring!");
        while (1);
    }
  
    Serial.println("-- Default Test --");
    delayTime = 1000;

    Serial.println();
}


void loop() {
    printValues();
    delay(delayTime);
}


void printValues() {
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);
    Serial.println(" hPa");

    Serial.print("Approx. Altitude = ");
    Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
    Serial.println(" m");

    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");

    Serial.println();
}

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

Юрий Ботов

Moderator
Команда форума
Если почитать вот это: http://ru.mouser.com/ds/2/621/BST-BME280_DS001-09-521021.pdf становится понятно что датчик влажности изначально банально выключен и его нужно включить (5.4.3. Register 0xF2 “ctrl_hum”). Я не знаю какими вы пользуетесь именно библиотеками, но по всей видимости та что на OrangePI - его включает, а та которая на ESP - нет. Возможно там есть специальная команда на включение, ну или другую библиотеку поищите, ну или просто пошлите по i2c нужную команду: записать в 0xf2 значение 1 вместо 0


Посмотрел адафрутовскую библиотеку там даже стоит комментарий:
// you must make sure to also set REGISTER_CONTROL after setting the
// CONTROLHUMID register, otherwise the values won't be applied (see DS 5.4.3)
Так что тупо включайте вручную или ищите другую библиотеку
 
Последнее редактирование:

Alex255

New member
Если почитать вот это: http://ru.mouser.com/ds/2/621/BST-BME280_DS001-09-521021.pdf становится понятно что датчик влажности изначально банально выключен и его нужно включить (5.4.3. Register 0xF2 “ctrl_hum”). Я не знаю какими вы пользуетесь именно библиотеками, но по всей видимости та что на OrangePI - его включает, а та которая на ESP - нет. Возможно там есть специальная команда на включение, ну или другую библиотеку поищите, ну или просто пошлите по i2c нужную команду: записать в 0xf2 значение 1 вместо 0
Нашел константу SAMPLING_X16. Задал 1 (было 5), но так и не включается. Согласно даташиту, она как раз и отвечает за усиление и функция write8(BME280_REGISTER_CONTROLHUMID, _humReg.get()) пишет по адресу 0xF2 (константа BME280_REGISTER_CONTROLHUMID=0xF2)

Уже пробовал Sparkfun library и BME by Tylen Glenn.
 
Последнее редактирование:

Юрий Ботов

Moderator
Команда форума
Добавьте это куда нибудь в setup()
Код:
_humReg.osrs_h = 1;   
bme.setSampling(Adafruit_BME280::MODE_FORCED,
                    Adafruit_BME280::SAMPLING_X1, // temperature
                    Adafruit_BME280::SAMPLING_X1, // pressure
                    Adafruit_BME280::SAMPLING_X1, // humidity
                    Adafruit_BME280::FILTER_OFF   );
 

Юрий Ботов

Moderator
Команда форума
Так понимаю, что вот эта строка
отвечает за влажность?
эта строка пишет в регистр F2 bme280 текущее значение _humReg.osrs_h. А там пока вы ничего не присвоили - живет ноль. Собственно это я выше и сделал - присвоил 1 и перезапустил функцию.
 

Alex255

New member
эта строка пишет в регистр F2 bme280 текущее значение _humReg.osrs_h. А там пока вы ничего не присвоили - живет ноль. Собственно это я выше и сделал - присвоил 1 и перезапустил функцию.
Ради эксперимента распаковал новый датчик. Работает! (и на Orange Pi Zero и на ESP E12). Старый так не запустился. Распаковал еще один - ни там ни там не работает. Или брак или продавцы дурят - непонятно. Спасибо за помощь!
 

IvanKurtti

New member
Тут не совсем понятная проблема
в основном проблема в обмане продавцов BMP/BME см. спойлер
причём продавец мне давал разные BMP280 на обмен и результат почему то отличался (обычно показывает >0<, но был, который показывал показания отличные от нуля (во общем мусор)).
Объяснить можно только так "China неликвидус" т.е. не прошедшие тестирование.

В этом случае датчик точно BME280 (если фото его) и ответ может быть наверное один :
этот производитель нарушил технологию (если технология вообще была, а не наколенная пайка паяльной станцией с флюсом), а затем всю плату промывал.
Если в отверстие на датчике попал флюс или ещё чего нибудь - получите этот результат.
Температура (через корпус датчика) меряется, давление (плёнка пластичного "флюса" внутри продавливается) меряется, а вот с влажностью извините, не всё так просто (как повезёт).

Сам думал об этом, может подольше в УЗ ванне промывать, чёрт знает промоет (ли) или датчик убьет?
P.S. Тестировал разные датчики на одной и той же ESPке и прошивку не изменял. (а тестировать на разных платформах (не гуд), к неисправностям датчиков добавляются недостатки (ошибки) кода.
Разве не у кого не было с не подключенными датчиками показаний?
 

Вложения

Последнее редактирование:
Сверху Снизу