NodeMcu V3 и BMe280 -> Температура, влажность, давление: значение nan
Я только начал экспериментировать с NodeMcu V3 и Датчик BME280.
проводка
VCC -> 3.3V
GND -> GND
SCL -> D1 (GPIO5)
SDA -> D2 (GPIO4)
Я попробовал этот скетч/сканер I2C: он находит BME280 по адресу 0x76
#include <Wire.h>
// Установите шину I2C для использования: Wire, Wire1 и т. д.
#define WIRE Wire
void setup() {
WIRE.begin();
Serial.begin(9600);
while (!Serial)
delay(10);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// i2c_scanner использует возвращаемое значение
// Write.endTransmission, чтобы проверить,
// устройство подтвердило адрес.
WIRE.beginTransmission(address);
error = WIRE.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // ждем 5 секунд для следующего сканирования
}
Затем я применил библиотеку BMx280I2C к этому скетчу:
#include <Wire.h>
#include <BMx280I2C.h>
BMx280I2C bmx280(0x76);
void setup() {
Serial.begin(9600);
// Настройка BMx280
Wire.begin();
bmx280.begin();
bmx280.resetToDefaults();
bmx280.writeOversamplingPressure(BMx280I2C::OSRS_P_x16);
bmx280.writeOversamplingTemperature(BMx280I2C::OSRS_T_x16);
bmx280.writeOversamplingHumidity(BMx280I2C::OSRS_H_x16);
}
void loop() {
// измерения T,P,H
bmx280.measure();
do{
delay(100);
Serial.println("No value, yet!");
} while (!bmx280.hasValue());
Serial.print("Pressure ");
Serial.println(bmx280.getPressure());
Serial.print("Temperature ");
Serial.println(bmx280.getTemperature());
Serial.print("Humidity ");
Serial.println(bmx280.getHumidity());
delay(1000);
}
вывод всегда и только:
-> No value, yet! -> Pressure nan -> Temperature nan -> Humidity nan
Почему? Как мне понять причину проблемы?Спасибо!
@Massimo Variolo, 👍-1
Обсуждение1 ответ
Лучший ответ:
▲ 0
Решено с помощью библиотеки Adafruit
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
void setup() {
Serial.begin(9600);
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
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.println();
delay(2000);
}
,
@Massimo Variolo
Смотрите также:
- Проблемы с подключением I2C на ESP8266 — 12F, какие контакты использовать?
- NODEMCU 1.0 HX711 Тензодатчик читает странный текст
- Сервер Nodemcu с несколькими датчиками
- Использование датчика воды с NodeMCU делает его менее чувствительным?
- ESP8266 NodeMCU 3v3 ток для датчика отпечатков пальцев
- Как выбрать датчик с использованием чипа 74HC138 на Wemos D1 Mini?
- NodeMCU V2 ESP8266 — используйте 5VIN в качестве питания для нагревателя датчика MQ-9.
- NodeMCU и SDS011
Вы запустили [пример скетча BMx280_I2C](https://github.com/christandlg/BMx280MI/blob/master/examples/BMx280_I2C/BMx280_I2C.ino)? Правильно ли оно работало>, @StarCat
Для [ESP8266](https://github.com/esp8266/Arduino/blob/master/libraries/Wire/Wire.h#L56) вам нужно вызвать Wire.begin(D2, D1); или Wire .begin(4, 5);
вместо
Wire.begin()`., @hcheung@hcheung set Wire.begin(D2,D1); но такое же поведение, @Massimo Variolo
Метод
begin()
вBMx280I2C
возвращает индикатор того, был ли он успешным или нет. Вам следует это проверить. Также CSB должен быть подключен к VCC, чтобы принудительно использовать интерфейс I2C., @romkey@StarCat тот же результат 21:31:30.943 -> Давление: нан 21:31:30.943 -> Давление (64 бит): nan 21:31:30.977 -> Температура: нан 21:31:30.977 -> Влажность: нан, @Massimo Variolo
С помощью этой библиотеки https://github.com/Erriez/ErriezBMX280 (пример на той же странице) я получаю значения! Но всегда одни и те же... Например, всегда Температура: -142,46., @Massimo Variolo
Вы проверяете наличие ошибок при использовании этой библиотеки? Код, который вы опубликовали, этого не делает., @romkey