Skip to content

AHT20 + BMP280 — цифровая метеостанция

Два независимых датчика на одной шине I2C: AHT20 измеряет температуру и влажность, BMP280 — температуру и атмосферное давление.

AHT20 + BMP280 — цифровая метеостанция на I2C

Два независимых датчика на одной шине I2C, на одной плате-модуле:

ДатчикЧто измеряетI2C-адрес
AHT20температура, влажность воздуха0x38 (фиксированный)
BMP280температура, атмосферное давление, высота над уровнем моря0x76 или 0x77

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

Файлы компонента

ФайлНазначение
include/Aht20Driver.h / src/Aht20Driver.cppДрайвер AHT20
include/Bmp280Driver.h / src/Bmp280Driver.cppДрайвер BMP280
src/main.cppТестовый стенд: опрос обоих датчиков раз в 2 секунды, вывод в Serial
THEORY.mdКак физически работают датчики, откуда берутся формулы
WIRING.mdСхема подключения к ESP32
PREZ.mdКороткая презентация проекта (5 слайдов-тезисов)

Про сборку/прошивку/монитор через PlatformIO CLI — см. корневой README, команды одинаковы для всех компонентов репозитория.

API драйверов

Оба драйвера следуют одному и тому же паттерну:

Aht20Driver aht20(Wire);           // Dependency Injection: шина I2C передаётся в конструктор
Bmp280Driver bmp280(Wire);

aht20.begin(I2C_SDA, I2C_SCL);     // true, если датчик отозвался на шине
bmp280.begin(I2C_SDA, I2C_SCL);

aht20.update();                    // опросить датчик, вернёт true при успехе
const Aht20Driver::Data &d = aht20.getData();   // d.temperatureC, d.humidityPercent

aht20.isAlive();                   // false, если давно не было успешного обмена (обрыв шины/датчика)

Bmp280Driver::Data дополнительно содержит pressurePa (давление в Паскалях, СИ) и altitudeM (оценочная высота, м — по барометрической формуле, требует корректного setSeaLevelPressureHpa()). Разбор физики и формул — в THEORY.md.

Почему два класса, а не один

AHT20 и BMP280 — разные чипы с разными датащитами и разными адресами I2C, которые просто физически напаяны на одну плату. Разделение на Aht20Driver/Bmp280Driver позволяет использовать любой из них отдельно (например, только BMP280 в проекте высотомера) без притаскивания второго. src/main.cpp — единственное место, где они используются вместе.