Датчики CJMCU BME680 и AHT20+BMP280 на Arduino: обзор, подключение и примеры кода
Перед прошивкой моей ESP32-C3 под управление Matter через ESP-IDF захотелось проверить правильность сборки принципиальной схемы на макетной плате, а также понять минимальный функционал возможностей тех или иных компонентов. Поэтому была создана мини-серия статей для Arduino на два датчика CJMCU BME680 и AHT20+BMP280, светодиодное кольцо CJMCU-2812B, а также на сенсорную кнопку TTP223.
Данная часть 1/3 посвящена двум датчикам — их техническим характеристикам, подключению к ESP32-C3 и примерам кода для Arduino IDE.
Содержание статьи
1. Датчик CJMCU BME680
BME680 — это цифровой датчик «4 в 1» от Bosch. Он объединяет в себе измерение температуры, влажности, барометрического давления и качества воздуха (VOC).
📊 Технические характеристики
| Параметр | Значение |
|---|---|
| Напряжение питания | 3.3 В |
| Интерфейсы | I2C и SPI |
| Диапазон температур | -40 … +85 °C (±1.0 °C) |
| Диапазон влажности | 0 … 100% (±3%) |
| Диапазон давления | 300 … 1100 кПа (±0.6 кПа) |
| Газовый сенсор | Оксид металла (MOX), ЛОС, ~320°C нагрева |
| I2C Адрес | 0x76 (по умолчанию) или 0x77 |
📊 Шкала качества воздуха IAQ (индекс качества воздуха)
| IAQ | Статус | Описание |
|---|---|---|
| 0 ~ 50 | ✅ Хорошо | Качество воздуха удовлетворительное, опасности практически нет |
| 51 ~ 100 | ⚠️ Умеренный | Некоторые загрязнители могут представлять угрозу для чувствительных людей |
| 101 ~ 150 | ⚠️ Вредно для чувствительных групп | Некоторые люди могут испытывать проблемы со здоровьем |
| 151 ~ 200 | ⚠️ Вредно для здоровья | Воздействие на здоровье может начаться у всех |
| 201 ~ 300 | 🛑 Очень вредно | Предупреждение об опасности |
| 301 ~ 500 | 🛑 Опасный | Особо опасное состояние для здоровья |
🔌 Подключение к ESP32-C3 (I2C)
| CJMCU-680 | ESP32-C3 (Zero) |
|---|---|
| VCC (3.3V) | 3.3V |
| GND | GND |
| SDA (I2C Data) | GPIO8 (SDA) |
| SCL (I2C Clock) | GPIO9 (SCL) |
| SDO | GND |
| CS | VCC (3.3V) |
- SDO → GND — фиксирует I2C адрес датчика на 0x76 (по умолчанию). Если подключить SDO к питанию (VCC), адрес сменится на 0x77.
- CS → VCC — переводит датчик в режим I2C (хотя на данном модуле он выбран по умолчанию, для гарантии корректной работы рекомендуется подтянуть CS к питанию).
Установка библиотек:
- Откройте Arduino IDE → Скетч → Включить библиотеку → Управление библиотеками
- В строке поиска введите
Adafruit BME680 - Найдите библиотеку Adafruit BME680 Library (автор Adafruit) и нажмите Установить
- Вместе с ней автоматически установится зависимость — Adafruit Unified Sensor
💻 Пример кода для BME680
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME680.h>
#define BME_SDA 8
#define BME_SCL 9
Adafruit_BME680 bme;
void setup() {
Serial.begin(115200);
delay(3000); // Задержка для стабилизации USB на ESP32-C3
Wire.begin(BME_SDA, BME_SCL);
if (!bme.begin(0x76)) {
Serial.println("BME680 не найден!");
while (1);
}
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320°C на 150 мс
}
void loop() {
if (!bme.performReading()) {
Serial.println("Ошибка чтения BME680!");
return;
}
Serial.print("Температура = ");
Serial.print(bme.temperature);
Serial.println(" *C");
Serial.print("Давление = ");
Serial.print(bme.pressure * 0.00750062);
Serial.println(" mm Hg");
Serial.print("Влажность = ");
Serial.print(bme.humidity);
Serial.println(" %");
Serial.print("Газ (ЛОС) = ");
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(" КОhms");
Serial.println("---");
delay(10000);
}
2. Датчик AHT20+BMP280
Комбинированный модуль на базе датчика влажности/температуры AHT20 и высокоточного датчика давления и температуры BMP280.
📊 Технические характеристики
| Параметр | Значение |
|---|---|
| Напряжение питания | 3.3V |
| Интерфейс | I2C |
| Датчик AHT20 (Влажность) | 0 … 100% RH (±2% точность) |
| Датчик AHT20 (Температура) | -40 … +85°C (±0.5°C точность) |
| Датчик BMP280 (Давление) | 300 … 1100 hPa (±1 hPa точность) |
| Датчик BMP280 (Температура) | -40 … +85°C (±0.3°C точность) |
| I2C адреса | AHT20: 0x38, BMP280: 0x77 или 0x76 |
🔌 Подключение к ESP32-C3
| AHT20+BMP280 | ESP32-C3 (Zero) |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SDA | GPIO8 (SDA) |
| SCL | GPIO9 (SCL) |
Установка библиотек:
- Откройте Arduino IDE → Скетч → Включить библиотеку → Управление библиотеками
- Установите
Adafruit BMP280 Library(автор Adafruit) - Установите
Adafruit AHTX0(автор Adafruit)
💻 Пример кода (средняя температура)
#include <Wire.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_AHTX0.h>
#define I2C_SDA 8
#define I2C_SCL 9
Adafruit_BMP280 bmp;
Adafruit_AHTX0 aht;
void setup() {
Serial.begin(115200);
delay(3000);
Wire.begin(I2C_SDA, I2C_SCL);
bmp.begin(0x77);
aht.begin();
}
void loop() {
float bmpTemp = bmp.readTemperature();
float pressurePa = bmp.readPressure();
sensors_event_t humidity, temp;
aht.getEvent(&humidity, &temp);
float ahtTemp = temp.temperature;
float avgTemp = (bmpTemp + ahtTemp) / 2.0;
float pressureMmHg = pressurePa * 0.00750062;
Serial.println("=== ТЕЛЕМЕТРИЯ ===");
Serial.print("AHT20: ");
Serial.print(ahtTemp, 1);
Serial.println(" °C");
Serial.print("BMP280: ");
Serial.print(bmpTemp, 1);
Serial.println(" °C");
Serial.print("Средняя: ");
Serial.print(avgTemp, 1);
Serial.println(" °C");
Serial.print("Давление: ");
Serial.print(pressureMmHg, 1);
Serial.println(" mmHg");
Serial.println();
delay(1000);
}