Датчик BME280 - не отобржается влажность и выстоа отрицательная.

Master_G
Offline
Зарегистрирован: 04.07.2019

Добрый вечер уважаемые знатоки! Купил себе вот такой вот датчик BME280
https://www.ebay.com/itm/Breakout-Temperature-Humidity-Barometric-Pressu...

Изначально не выводилось ничего. В библиотеке сменил адрес датчика по I2C на 0х76. И еще закоментировал //return false; в библиотеке как паказанно вот тут http://davidstein.cz/2017/09/30/arduino-bme280-could-not-find-a-valid-bme280-sensor-solved/

После этого стала отображаться температура и атмосферное давление. Но высота некорректно отображается и влажность 0%. В чем мoжет быть проблема?

Temperature = 23.21 *C
Pressure = 1026.81 hPa
Approx. Altitude = -112.28 m
Humidity = 0.00 %

/***************************************************************************
  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
  See the LICENSE file for details.
 ***************************************************************************/

#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 setup() {
  
 
    Serial.begin(9600);
    while(!Serial);    // time to get serial running
    Serial.println(F("BME280 test"));

    unsigned status;
    
    // default settings
    status = bme.begin();  
    // You can also pass in a Wire library object like &Wire2
    // status = bme.begin(0x76, &Wire2)
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
        Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
        Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
        Serial.print("        ID of 0x60 represents a BME 280.\n");
        Serial.print("        ID of 0x61 represents a BME 680.\n");
        while (1) delay(10);
    }
    
    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()); // bme280.readHumidity()
    Serial.println(" %");

    Serial.println();
}

Помогите пожалуйста разобрться уже 3 день ищу, думаю что нетак.

 

Genri5
Offline
Зарегистрирован: 31.05.2016

Этот модуль еще нужно правильно подключить.

 

Master_G
Offline
Зарегистрирован: 04.07.2019

Доброго дня. Модуль вроде бы подключен правильно. Так как I2C scaner выводит адрес 0х76 да и температура с атм. давлением отображается корректно. 

GND -->земля
VCC --> +3.3V
SCL --> контакт 22 (ESP32 Devkit V1   SCL)
SDA --> контакт 21 (ESP32 Devkit V1   SDA)

Скорее всего что то в библиотеке не так. Но что?

 

b707
Онлайн
Зарегистрирован: 26.05.2017

А высоту над уровнем моря вы правильно считаете? - уверены, что в параметр SEALEVELPRESSURE_HPA нужно заносить 760 мм рт ст?

По смыслу этот датчик показывает ИЛИ давление ИЛИ высоту над уровнем моря, но не оба параметра разом. Чтобы вычислить высоту надо знать текушее давление на уровне моря - и именно это текущее давление нужно занести в параметр SEALEVELPRESSURE_HPA, а вовсе не "идеальную" цифру в 760 мм ртст...

-NMi-
Offline
Зарегистрирован: 20.08.2018

b707 пишет:

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

А как же BMP180 кажет и то и то???

b707
Онлайн
Зарегистрирован: 26.05.2017

-NMi- пишет:

А как же BMP180 кажет и то и то???

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

-NMi-
Offline
Зарегистрирован: 20.08.2018

Вот мой чо кажет в протеусе. В реале в железе то-же что и на смартфоне и гисметео.

Библиотека естественно самописная, нет такой в инете.

b707
Онлайн
Зарегистрирован: 26.05.2017

-NMi- пишет:

Вот мой чо кажет в протеусе.

вы физику учили в школе? :)

ответьте, каким образом этот датчик измеряет высоту над уровнем моря... и сами все поймете

sadman41
Offline
Зарегистрирован: 19.10.2016

#define SEALEVELPRESSURE_HPA (1013.25)

Почему 760-то?

Master_G
Offline
Зарегистрирован: 04.07.2019

b707 пишет:
А высоту над уровнем моря вы правильно считаете? - уверены, что в параметр SEALEVELPRESSURE_HPA нужно заносить 760 мм рт ст?

Живу над уровнем моря) И показатель атм. давления меня пока не смущают. Этот вопрос легче, я решу его позже. Меня больше интересует влажность почему всегда 0.

Тут мои библиотеки. Так как на форуме я не нашел как вложить файлы.

http://alexandroupoli.orgfree.com/bme280_lib.rar

Следовал по инструкции в youtube https://www.youtube.com/watch?v=3zMI1eun-_k

Посмотрите пожалуйста что я не так делаю или что упустил?

b707
Онлайн
Зарегистрирован: 26.05.2017

sadman41 пишет:

#define SEALEVELPRESSURE_HPA (1013.25)

Почему 760-то?

1013,25 ГПа - это и есть 760 мм. рт. ст - нормальное атмосферное давление на уровне моря

sadman41
Offline
Зарегистрирован: 19.10.2016

А, простите. Я на метеостанциях только КПа вижу, что-то мне в голову даже не пришло пересчитывать.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Вроде почти всё сходится.

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Master_G пишет:

Живу над уровнем моря)

это не имеет значения, все равно в этот параметр нужно заносить не идеальное давление 760 мм. а текущее на уровне моря. То есть для вас - ту самую цифру, что СЕЙЧАС! показывает барометр. И тогда датчик совершенно точно покажет высоту 0 м :)

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

sadman41
Offline
Зарегистрирован: 19.10.2016

...и эта высота будет кажный день разная, если не будет корректироваться Zero Point ;)

b707
Онлайн
Зарегистрирован: 26.05.2017

sadman41 пишет:

...и эта высота будет кажный день разная, если не будет корректироваться Zero Point ;)

именно так.

Более правильно было бы назвать ее не "высотой над уровнем моря", а "разностью высот от занесенной в скетч точки"

Master_G
Offline
Зарегистрирован: 04.07.2019

А как насчет влажности ? Влажность то не имеет никокого отношения к нормальному атмосферному давлению на уровне моря..

Master_G
Offline
Зарегистрирован: 04.07.2019

Скажите пожалуйста а какая разница между этими датчиками для обеих пишут продавцы как BME280. Мой второй. Может это всетаки BMP280 а не BME280?

BME280

sadman41
Offline
Зарегистрирован: 19.10.2016

Чтобы узнать это - нужно считать ChipID с сенсора.

Master_G
Offline
Зарегистрирован: 04.07.2019

ok. как прочитать ?

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

чтобы совсем правильно - задействовать GPS

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Master_G пишет:

ok. как прочитать

Адафруктовая библиотека проверяет ID когда вызывается Init. И то что 

Цитата:
И еще закоментировал //return false; 

Говорит о том, что ID не соответствует BME280. Та где ты закоментировал добавь печать _sensorID в сериал порт.

 

Master_G
Offline
Зарегистрирован: 04.07.2019

Всем спасибо разобрался! У меня Serial.println(bme.sensorID(),16);  выводит 58. Датчик мне подсунули BMP280 вместо BME280.

Stenly766
Offline
Зарегистрирован: 05.05.2020
 

Можно получить этот файл для протеуса?

Stenly766
Offline
Зарегистрирован: 05.05.2020

[quote=-NMi-]

Вот мой чо кажет в протеусе. В реале в железе то-же что и на смартфоне и гисметео.

Библиотека естественно самописная, нет такой в инете.

Можно получить этот файл для протеуса?

-NMi-
Offline
Зарегистрирован: 20.08.2018

Канешно. Литр Деду и литр мне.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

мне можно пол (литра). 

-NMi-
Offline
Зарегистрирован: 20.08.2018

Тада рокировка меняцца, Деду поллитра, мне полтора.