За вечір можна зібрати ESP32 метеостанцію з OLED дисплеєм, що відправляє дані в Home Assistant (HA) для моніторингу температури, вологості та тиску.
Контекст і проблема
Моніторинг мікроклімату в теплиці, офісі або будинку часто вимагає даних, які важко отримати без спеціалізованого обладнання. Закупівля комерційних метеостанцій коштує від 150 до 500 доларів, а їхня інтеграція з системами розумного дому може бути ускладненою. Альтернативою є самостійна розробка на базі ESP32, що дозволяє заощадити кошти та отримати гнучкий інструмент.
Практична реалізація
Для проекту знадобиться ESP32 плата, датчик BME280 (температура, вологість, тиск), OLED дисплей (I2C), дроти з’єднувальні та USB кабель для живлення та програмування. Спочатку необхідно встановити Arduino IDE з підтримкою ESP32. Пізніше, встановіть бібліотеки для BME280 та OLED дисплея, використовуючи бібліотечний менеджер Arduino IDE.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <U8g2lib.h>
Adafruit_BME280 bme;
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8G2_RESET_PIN_NONE, /* clock=*/U8G2_EN_PIN_NONE);
float temperature, humidity, pressure;
void setup() {
Serial.begin(115200);
Serial.println(F("BME280 test"));
if (!bme.begin(0x76)) { // 0x76 - I2C address of the BME280 sensor
Serial.println(F("Could not find BME280 sensor!"));
while (1);
}
u8g2.begin();
}
void loop() {
bme.setSampling(Adafruit_BME280::SampleMode::MODE_FORCED,
Adafruit_BME280::Oversampling::OVERSAMPLE_16,
Adafruit_BME280::Oversampling::OVERSAMPLE_16,
Adafruit_BME280::Oversampling::OVERSAMPLE_1);
temperature = bme.readTemperature();
humidity = bme.readHumidity();
pressure = bme.readPressure();
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_6x10);
u8g2.drawStr(0, 10, "Temp: ");
u8g2.drawStr(0, 25, "Humidity: ");
u8g2.drawStr(0, 40, "Pressure: ");
u8g2.drawStr(70, 10, String(temperature, 2).c_str());
u8g2.drawStr(70, 25, String(humidity, 2).c_str());
u8g2.drawStr(70, 40, String(pressure / 1000.0, 2).c_str());
u8g2.send();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" *C, Humidity: ");
Serial.print(humidity);
Serial.print(" %, Pressure: ");
Serial.print(pressure);
Serial.println(" hPa");
delay(5000);
}
Код зчитує дані з датчика BME280, відображає їх на OLED дисплеї та виводить у Serial Monitor. Далі потрібно налаштувати MQTT сервер (наприклад, Mosquitto) на ESP32 або використовувати вже наявний MQTT брокер у вашій мережі HA.
Типові помилки
- Неправильний I2C адрес датчика: Якщо датчик не зчитується, перевірте I2C адрес (зазвичай 0x76 або 0x77) та правильність підключення проводів. Використовуйте I2C сканер для перевірки.
- Проблеми з бібліотеками: Переконайтеся, що бібліотеки встановлені правильно та сумісні з версією Arduino IDE. Оновіть бібліотеки до останньої версії.
- Неправильні підключення OLED дисплея: Переконайтеся, що OLED дисплей правильно підключений до I2C пінів ESP32 (SDA та SCL). Неправильне підключення призведе до відсутності зображення.
Результат
Після налаштування MQTT, дані з ESP32 метеостанції будуть надходити в Home Assistant, що дозволить створити автоматизації на основі цих даних (наприклад, автоматичне регулювання вологості в теплиці). Час збору та налаштування проекту становить приблизно 2-3 години, а вартість матеріалів – близько 20-30 доларів.