Подключение датчика AHT20 + BMP280 к Arduino UNO
Введение
Сегодня расскажу о комбинированном датчике AHT20 + BMP280, позволяющем одновременно измерять температуру, влажность воздуха и атмосферное давление (Дешевая замена BME280). Этот модуль широко применяется в метеорологических станциях, экологическом мониторинге, интеллектуальных системах управления домом и зданиями.

Технические характеристики
- Напряжение питания: 3,3В;
- Ток потребления: 1мА;
- Диапазон измерения и погрешность измерения: 0 — 100 % влажности (погрешность ±2%); — 40…+8585°C (погрешность ±0.3°C), 300…1100 гПа (погрешность ±1 гПа);
- Максимальная частота I2C: 400кГц;
- Габаритные размеры: 15 х 15 х 2 мм;
- Вес: 2 грамма
Описание
Модуль оснащен двумя датчиками: AHT20 и BMP280. Первый датчик, AHT20, обеспечивает точное измерение относительной влажности воздуха в диапазоне от 0% до 100%, а также фиксирует температуру окружающей среды в пределах от −40°C до +85°C. Второй датчик, BMP280, позволяет измерять атмосферное давление в интервале от 300 гПа до 1100 гПа и дополнительно определяет температуру в аналогичном температурном диапазоне.

Обмен данными с модулем осуществляется посредством протокола I²C, который позволяет подключать модуль к микроконтроллеру Arduino или другим контроллерам.
Назначение контактов
► VCC — питание модуля 3.3В;
► SDA — линия данных I²C;
► GND — земля;
► SDA — линия тактирования I²C.
Подключение модуля AHT20 и BMP280 к Arduino UNO
Приведу пример схемы подключения модуля AHT20+BMP280 к плате Arduino UNO, а также напишу простейший скетч, позволяющий выводить значения температуры, влажности и атмосферного давления непосредственно в последовательный интерфейс Arduino.
Необходимые детали
- Контроллер Arduino UNO R3 x 1 шт.
- Провода DuPont, 2,54 мм, 20 см x 1 шт.
- Модуль измерения давления, температуры и влажности BMP280 и AHT20 x 1 шт.
Подключение
Подключение довольно простое и осуществляется посредством протокола I²C. Для этого соедините контакты A5 и A4 платы Arduino UNO соответственно с выводами SCL и SDA обоих датчиков AHT20 и BMP280. Далее обеспечьте подачу питания, подключив выводы VCC и GND модуля к соответствующим контактам +5В и GND Arduino UNO. Обратите внимание, что уровень напряжения выхода логики Arduino UNO составляет 5В, тогда как сам модуль рассчитан на работу от 3,3В. Желательно применять преобразователь логических уровней, однако в данном примере мы пренебрегаем этим требованием. Проверяем еще раз схему и приступаем к загрузке скетча.

Установка библиотеки
Для работы, будем использовать библиотеки «Adafruit_BMP280» и «Adafruit_AHTX0» скачать можно используя интегрированную среду разработки Arduino IDE», для этого откройте «Скетч → Подключение библиотеки → Менеджер библиотек…», так же выложу библиотеки в конце статьи.
Установка «Adafruit_BMP280»

Для работы библиотеки необходимо установить зависимые библиотеки, нажимаем «Установить все»

Установка «Adafruit_AHTX0»

Для работы библиотеки необходимо установить зависимые библиотеки, нажимаем «Установить все»

Программа
Открываем среду разработки Arduino IDE и загружаем первую программу в Arduino UNO.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <Adafruit_BMP280.h> // Подключаем библиотеку для работы с датчиком BMP280 #include <Adafruit_AHTX0.h> // Подключаем библиотеку для работы с датчиком AHT20 Adafruit_BMP280 bmp; // Создаем объект для работы с датчиком BMP280 Adafruit_AHTX0 aht; // Создаем объект для работы с датчиком AHT20 void setup() { Serial.begin(9600); // Инициализируем последовательного порт на скорости 9600 if (!bmp.begin()) { // Инициализация BMP280 Serial.println("BMP280 sensor not found!"); while (1); // Останавливаемся, если датчик не обнаружен } if (!aht.begin()) { // Инициализация AHT20 Serial.println("AHT20 sensor not found!"); while (1); // Останавливаемся, если датчик не обнаружен } Serial.println("Sensors initialized."); } void loop() { sensors_event_t tempEvent, humidEvent; // Запрашиваем обновление показаний температуры и влажности aht.getEvent(&tempEvent, &humidEvent); float temperature = tempEvent.temperature; // Читаем данные температуры с AHT20 float humidity = humidEvent.relative_humidity; // Читаем данные влажности с AHT20 float pressure = bmp.readPressure() / 133.3F; // Читаем данные давления с BMP280 // Выводим результаты в сериал-порт Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C"); Serial.print("Humidity: "); Serial.print(humidity); Serial.println("%"); Serial.print("Pressure: "); Serial.print(pressure); Serial.println(" mm"); delay(2000); // Пауза перед следующим чтением } |
Если все правильно сделали при открытия мониторинга порта увидим показания с датчиков

Описание программы:
Сначала подключаются необходимые библиотеки для работы с датчиками BMP280 и AHT20.
1 2 |
#include <Adafruit_BMP280.h> #include <Adafruit_AHTX0.h> |
Создаются объекты для работы с датчиками.
1 2 |
Adafruit_BMP280 bmp; Adafruit_AHTX0 aht; |
В функции setup, инициализируем последовательного порта со скорость 9600 бит/с., затем производим проверку доступности датчиков BMP280 и AHT20. Если датчик не найден, выводится сообщение об ошибке.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Serial.begin(9600); if (!bmp.begin()) { Serial.println("BMP280 sensor not found!"); while (1); } if (!aht.begin()) { Serial.println("AHT20 sensor not found!"); while (1); } Serial.println("Sensors initialized."); |
В основном цикле программы (loop) данные температуры и влажности запрашиваются методом aht.getEvent() и помещаются в структуру типа sensors_event_t. Полученные значения сохраняются в переменных temperature и humidity. Далее считываются показания давления, которые затем делятся на коэффициент 133.3 для перевода полученных показаний в миллиметры ртутного столба (мм рт. ст.).
1 2 3 4 5 6 7 |
sensors_event_t tempEvent, humidEvent; aht.getEvent(&tempEvent, &humidEvent); float temperature = tempEvent.temperature; float humidity = humidEvent.relative_humidity; float pressure = bmp.readPressure() / 133.3F; |
Далее, все показания отправляем в последовательный порт.
1 2 3 4 5 6 7 8 9 10 11 |
Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C"); Serial.print("Humidity: "); Serial.print(humidity); Serial.println("%"); Serial.print("Pressure: "); Serial.print(pressure); Serial.println(" mm"); |
