Не получается добиться нормальной совместной работы BME280 и AHT20, может кто сталкивался?
Для BME280 используется последняя библиотека GyverBME280
Для AHT20 последняя с гитхаба https://github.com/enjoyneering/AHTxx
При подключении BME280 и AHT20 на этой прошивке, BME280 выдаёт какуюто дичь
------ AHT20 -------
DEMO 1: read 12-bytes
Temperature...: 23.26 +-0.3C
Humidity......: 21.80 +-2%
------ AHT20 -------
DEMO 2: read 6-byte
Temperature: 23.26 +-0.3C
Humidity...: 21.69 +-2%
------ BME280 -------
Temperature: 0.00 *C
Humidity: 22.21 %
Pressure: 693.67 hPa , 520.30 mm Hg
Altitide: 3084.02 m
При работе BME280 с отдельной прошивкой всё нормально, но единственное для моей локации ошибается в высоте над уровнем моря более чем на половину.
------ BME280 -------
Temperature: 23.40 *C
Humidity: 16.25 %
Pressure: 1009.56 hPa , 757.23 mm Hg
Altitide: 30.78 m
Для BME280 используется последняя библиотека GyverBME280
Для AHT20 последняя с гитхаба https://github.com/enjoyneering/AHTxx
При подключении BME280 и AHT20 на этой прошивке, BME280 выдаёт какуюто дичь
------ AHT20 -------
DEMO 1: read 12-bytes
Temperature...: 23.26 +-0.3C
Humidity......: 21.80 +-2%
------ AHT20 -------
DEMO 2: read 6-byte
Temperature: 23.26 +-0.3C
Humidity...: 21.69 +-2%
------ BME280 -------
Temperature: 0.00 *C
Humidity: 22.21 %
Pressure: 693.67 hPa , 520.30 mm Hg
Altitide: 3084.02 m
При работе BME280 с отдельной прошивкой всё нормально, но единственное для моей локации ошибается в высоте над уровнем моря более чем на половину.
------ BME280 -------
Temperature: 23.40 *C
Humidity: 16.25 %
Pressure: 1009.56 hPa , 757.23 mm Hg
Altitide: 30.78 m
Код прошивки BME280 и AHT20:
// #include <Wire.h>
#include <AHTxx.h>
#include <Arduino.h>
#include <GyverBME280.h> // Подключение библиотеки
GyverBME280 bme; // Создание обьекта bme
float ahtValue; // to store T/RH result
AHTxx aht20(AHTXX_ADDRESS_X38, AHT2x_SENSOR); // sensor address, sensor type
void setup()
{
aht20.begin();
Serial.begin(9600); // Запуск последовательного порта
// while (aht20.begin() != true)
// {
// Serial.println(F("AHT2x not connected or fail to load calibration coefficient")); //(F()) save string to flash & keeps dynamic memory free
delay(5000);
// }
// Serial.println(F("AHT20 OK"));
bme.begin(); // Если доп. настройки не нужны - инициализируем датчик
}
void bme280()
{
Serial.println("");
Serial.println(F("------ BME280 -------"));
Serial.print("Temperature: ");
Serial.print(bme.readTemperature()); // Выводим темперутуру в [*C]
Serial.println(" *C");
Serial.print("Humidity: ");
Serial.print(bme.readHumidity()); // Выводим влажность в [%]
Serial.println(" %");
float pressure = bme.readPressure(); // Читаем давление в [Па]
Serial.print("Pressure: ");
Serial.print(pressure / 100.0F); // Выводим давление в [гПа]
Serial.print(" hPa , ");
Serial.print(pressureToMmHg(pressure)); // Выводим давление в [мм рт. столба]
Serial.println(" mm Hg");
Serial.print("Altitide: ");
Serial.print(pressureToAltitude(pressure)); // Выводим высоту в [м над ур. моря]
Serial.println(" m");
Serial.println("");
delay(5000);
}
void printStatus()
{
switch (aht20.getStatus())
{
case AHTXX_NO_ERROR:
Serial.println(F("no error"));
break;
case AHTXX_BUSY_ERROR:
Serial.println(F("sensor busy, increase polling time"));
break;
case AHTXX_ACK_ERROR:
Serial.println(F("sensor didn't return ACK, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"));
break;
case AHTXX_DATA_ERROR:
Serial.println(F("received data smaller than expected, not connected, broken, long wires (reduce speed), bus locked by slave (increase stretch limit)"));
break;
case AHTXX_CRC8_ERROR:
Serial.println(F("computed CRC8 not match received CRC8, this feature supported only by AHT2x sensors"));
break;
default:
Serial.println(F("unknown status"));
break;
}
}
void AHT20_func()
{
/* DEMO - 1, every temperature or humidity call will read 6-bytes over I2C, total 12-bytes */
Serial.println();
Serial.println(F("------ AHT20 -------"));
Serial.println(F("DEMO 1: read 12-bytes"));
ahtValue = aht20.readTemperature(); // read 6-bytes via I2C, takes 80 milliseconds
Serial.print(F("Temperature...: "));
if (ahtValue != AHTXX_ERROR) // AHTXX_ERROR = 255, library returns 255 if error occurs
{
Serial.print(ahtValue);
Serial.println(F(" +-0.3C"));
}
else
{
printStatus(); // print temperature command status
if (aht20.softReset() == true)
Serial.println(F("reset success")); // as the last chance to make it alive
else
Serial.println(F("reset failed"));
}
delay(2000); // measurement with high frequency leads to heating of the sensor, see NOTE
ahtValue = aht20.readHumidity(); // read another 6-bytes via I2C, takes 80 milliseconds
Serial.print(F("Humidity......: "));
if (ahtValue != AHTXX_ERROR) // AHTXX_ERROR = 255, library returns 255 if error occurs
{
Serial.print(ahtValue);
Serial.println(F(" +-2%"));
}
else
{
printStatus(); // print humidity command status
}
delay(2000); // measurement with high frequency leads to heating of the sensor, see NOTE
/* DEMO - 2, temperature call will read 6-bytes via I2C, humidity will use same 6-bytes */
Serial.println();
Serial.println(F("------ AHT20 -------"));
Serial.println(F("DEMO 2: read 6-byte"));
ahtValue = aht20.readTemperature(); // read 6-bytes via I2C, takes 80 milliseconds
Serial.print(F("Temperature: "));
if (ahtValue != AHTXX_ERROR) // AHTXX_ERROR = 255, library returns 255 if error occurs
{
Serial.print(ahtValue);
Serial.println(F(" +-0.3C"));
}
else
{
printStatus(); // print temperature command status
}
ahtValue = aht20.readHumidity(AHTXX_USE_READ_DATA); // use 6-bytes from temperature reading, takes zero milliseconds!!!
Serial.print(F("Humidity...: "));
if (ahtValue != AHTXX_ERROR) // AHTXX_ERROR = 255, library returns 255 if error occurs
{
Serial.print(ahtValue);
Serial.println(F(" +-2%"));
Serial.println("");
}
else
{
printStatus(); // print temperature command status not humidity!!! RH measurement use same 6-bytes from T measurement
}
delay(10000); // recomended polling frequency 8sec..30sec
}
void loop()
{
AHT20_func();
bme280();
}