BMP280 возвращает 0

Я подключил датчик температуры/давления BMP280 к Arduino Uno, как здесь:

разводка BMP280+Arduino Uno

и использовали пример кода, предоставленный библиотекой Adafruit BMP280. Однако значения температуры и давления возвращают 0,00 на последовательном мониторе. Что может быть причиной этого? Я настроил его в режиме I2C и удалил строки, отвечающие за соединения SPI.

    /***************************************************************************
  This is a library for the BMP280 humidity, temperature & pressure sensor

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

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required 
  to interface.

  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_BMP280.h>

#define BMP_SCK 13 // удалил следующие 4
#define BMP_MISO 12
#define BMP_MOSI 11 
#define BMP_CS 10

Adafruit_BMP280 bme; // I2C
// и следующие 2 строки:
//Adafruit_BMP280 bme(BMP_CS); // аппаратный SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

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

  if (!bme.begin()) {  
    Serial.println("Could not find a valid BMP280 sensor, check wiring!");
    while (1);
  }
}

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

    Serial.print("Pressure = ");
    Serial.print(bme.readPressure());
    Serial.println(" Pa");

    Serial.print("Approx altitude = ");
    Serial.print(bme.readAltitude(1013.25)); // это должно быть настроено на ваш локальный forcase
    Serial.println(" m");

    Serial.println();
    delay(2000);
}

, 👍2

Обсуждение

Да, в техпаспорте производителя написано, что есть один встроенный (120 Ом), @ahemmetter

Что ж, я следовал этому руководству http://www.instructables.com/id/How-to-Use-the-Adafruit-BMP280-Sensor-Arduino-Tuto/step2/The-Circuit/. Где на схеме разместить такой резистор?, @ahemmetter


4 ответа


Лучший ответ:

1

I2C должен иметь подтягивающие резисторы на линиях данных, иначе он просто не работает.

Быстро найдите правильное значение, но мне в голову не приходит 4,7 тыс.

Вы должны поместить резистор от линий SDA и SCK к +5V, и вдруг он оживет. (Надеюсь)

,

Я подозреваю, что на прорыве уже есть подтягивания; нет смысла их не включать. Кроме того, если бы не было подтягиваний, begin() не удалось бы, и было бы другое сообщение об ошибке., @SoreDakeNoKoto

Рекомендуемое значение 10k, согласно документации. Когда я подключаю по одному из них между выводом данных и V+, я все равно получаю на выходе 0, @ahemmetter


1

У меня была та же проблема, и я решил ее, изменив адрес I2C с 0x77 на 0x76 в Adafruit_BMP280.h

,

Хороший ответ, и было бы лучше, если бы у вас также было объяснение, @dhimaspw


1

причина изменения адреса I2C с 0x77 на 0x76 заключается в том, что у вас отключен SD0.

Если к SD0 на BMP280 ничего не подключено, адрес устройства по умолчанию 0x77.

,

2

Недавно я купил bmp280, который не является устройством Adafruit, и подключил его к esp32, и попытался загрузить код из тестовых примеров, но я получил ошибку: не найден действительный bmp 280, я искал в Google и нашел https://www.circuitschools.com/interfacing -bmp280-с-esp-32-на-i2c-с-ошибками-и-решениями/ я прочитал об ошибках адресов i2c, затем оттуда я скопировал код для сканера i2c и запустил его, чтобы получить правильный адрес i2c. Я проверил адрес I2c и заменил шестнадцатеричный адрес i2c в строке инициализации BMP.

Затем датчик сработал и показал температуру, давление и приблизительную высоту. Спасибо

,