За вечір можна зібрати ESP32 метеостанцію з OLED дисплеєм та інтегрувати її з Home Assistant (HA), отримуючи дані про температуру, вологість, атмосферний тиск та інші параметри в реальному часі.
Контекст і проблема
Сучасні розумні будинки потребують локальних сенсорів для забезпечення надійності та мінімізації залежності від хмарних сервісів. Підключення сенсорів до HA вручну – тривалий процес, що займає до 4 годин на один пристрій. Використання ESP32 дозволяє автоматизувати збір даних і передачу їх до HA через MQTT, скорочуючи час налаштування до 30 хвилин.
Практична реалізація
Для реалізації проекту нам знадобиться ESP32 плата, датчик BME280 (температура, вологість, тиск), OLED дисплей (128×64), резистори, дроти та прошивка. Підключення датчика BME280 до ESP32 здійснюється за стандартною схемою: VCC до 3.3V, GND до GND, SDA до D2, SCL до D1.
#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);
const char* mqtt_server = "your_mqtt_server";
const char* mqtt_topic = "homeassistant/sensor_data";
void setup() {
Serial.begin(115200);
Serial.println(F("BME280 test!"));
if (!bme.begin(0x76)) { // I2C address
Serial.println(F("Could not find BME280 sensor!"));
while (1);
}
u8g2.begin();
u8g2.setFont(u8g2_font_6x10);
}
void loop() {
float tempC = bme.readTemperature();
float humidity = bme.readHumidity();
float pressure = bme.readPressure() / 100.0F;
u8g2.clearBuffer();
u8g2.drawStr(0, 10, "Temp: ");
u8g2.drawStr(0, 25, String(tempC).c_str());
u8g2.drawStr(0, 40, "Humidity: ");
u8g2.drawStr(0, 55, String(humidity).c_str());
u8g2.drawStr(0, 70, "Pressure: ");
u8g2.drawStr(0, 85, String(pressure).c_str());
u8g2.send();
Serial.print("Temp: "); Serial.print(tempC); Serial.print(" C, ");
Serial.print("Humidity: "); Serial.print(humidity); Serial.print(" %, ");
Serial.print("Pressure: "); Serial.print(pressure); Serial.println(" hPa");
delay(5000); // Затримка 5 секунд
}
Цей код ініціалізує датчик BME280 та OLED дисплей, зчитує дані та виводить їх на дисплей та в Serial Monitor. Для передачі даних в HA необхідно додати MQTT клієнт та налаштувати відповідні компоненти в HA конфігурації.
Типові помилки
- Неправильний I2C адрес: Датчик BME280 може мати різні I2C адреси (0x76 або 0x77). Перевірте адрес за допомогою I2C сканера.
- Відсутність бібліотек: Переконайтеся, що встановлено необхідні бібліотеки Adafruit_Sensor, Adafruit_BME280 та U8g2lib через Arduino IDE Library Manager.
- Неправильне підключення OLED дисплея: Переконайтеся, що OLED дисплей правильно підключений до ESP32 (VCC, GND, SCL, SDA). Помилкове підключення може призвести до пошкодження дисплея або ESP32.
Результат
Після налаштування, ESP32 метеостанція з OLED дисплеєм буде передавати дані в HA кожні 5 секунд, що дозволить автоматизувати моніторинг параметрів мікроклімату. Налаштування займає приблизно 30 хвилин, включаючи прошивання, налаштування MQTT та додавання сенсорів в HA. Спробуйте зараз підключити датчик BME280 до ESP32 і запустити код!