/*********************************************************************
* sensor.ino
*
* Проект «Radar + BH1750 + BME/BMP280» – полный пример.
* В нём используется новый класс Ld2420Radar (файлы ld2420_radar.h/.cpp).
*********************************************************************/
#include <Arduino.h>
/* ---------- СТАНДАРТНЫЕ БИБЛИОТЕКИ ДЛЯ ИНТЕРФЕЙСОВ ------------- */
#include "ld2420_radar.h" // радар LD‑2420 (2.1)
#include "bh1750_sensor.h" // BH1750 – датчик освещённости
#include "bme280_sensor.h" // BME280/BMP280 – климатический датчик
/* --------------------- ГЛОБАЛЬНЫЕ ОБЪЕКТЫ ---------------------- */
Ld2420Radar radar;
RadarConfig radar_config;
Bh1750Sensor light_sensor;
Bh1750Config light_config;
Bme280Sensor climate_sensor;
Bme280Config climate_config;
/* ----------------- Отдельные I2C‑шины (ESP32) ------------------- */
TwoWire i2c_climate = TwoWire(1); // шина для BME/BMP280
/* ----------------- Интервал печати состояния ------------------- */
static const uint32_t print_interval_ms = 500;
uint32_t last_print_ms = 0;
/* ------------------------------------------------------------------ */
/* --------------------- Конфигурация радара ----------------------*/
/* ------------------------------------------------------------------ */
void setup_radar_config() {
/* Пины UART2 (по умолчанию GPIO4 – OT1, GPIO15 – RX) */
radar_config.uart_rx_pin = 4;
radar_config.uart_tx_pin = 15;
radar_config.baud_rate = 115200;
radar_config.presence_hold_ms = 1500; // как долго держать presence
radar_config.stale_after_ms = 2000; // если не пришло данных – offline
radar_config.median_window_size = 5;
radar_config.max_zone_step_per_sample = 4;
radar_config.distance_ema_alpha = 0.35f;
radar_config.speed_ema_alpha = 0.25f;
radar_config.min_valid_zone = 1;
radar_config.max_valid_zone = 200;
radar_config.zone_to_meter_k = 0.7f; // калибровка зоны → м
radar_config.zone_to_meter_b = 0.0f;
radar_config.activity_min_speed_m_s = 0.03f;
radar_config.activity_max_speed_m_s = 1.20f;
radar_config.enable_debug_unknown_lines = false;
}
/* ------------------------------------------------------------------ */
/* --------------------- Конфигурация BH1750 ----------------------*/
/* ------------------------------------------------------------------ */
void setup_light_config() {
light_config.sda_pin = 16; // SDA
light_config.scl_pin = 17; // SCL
light_config.i2c_address = 0x5C;
light_config.measurement_mode = 0x10; // Continuous High Resolution
light_config.stale_after_ms = 2000;
light_config.read_interval_ms = 200;
light_config.lux_ema_alpha = 0.25f;
}
/* ------------------------------------------------------------------ */
/* --------------------- Конфигурация BME/BMP280 -------------------*/
/* ------------------------------------------------------------------ */
void setup_climate_config() {
climate_config.sda_pin = 18; // SDA
climate_config.scl_pin = 19; // SCL
climate_config.i2c_address = 0x76; // адрес при подключении к GND
climate_config.stale_after_ms = 3000;
climate_config.read_interval_ms = 1000;
climate_config.temperature_ema_alpha = 0.25f;
climate_config.pressure_ema_alpha = 0.20f;
climate_config.humidity_ema_alpha = 0.20f;
}
/* ------------------------------------------------------------------ */
/* --------------------- Инициализация устройств -----------------*/
/* ------------------------------------------------------------------ */
void init_radar() {
setup_radar_config();
radar.begin(Serial2, radar_config);
Serial.println("Radar initialized");
}
void init_light_sensor() {
setup_light_config();
if (light_sensor.begin(light_config)) {
Serial.println("BH1750 initialized");
} else {
Serial.println("BH1750 init failed");
}
}
void init_climate_sensor() {
setup_climate_config();
if (climate_sensor.begin(i2c_climate, climate_config)) {
Serial.print("Climate sensor initialized: ");
Serial.println(climate_sensor.get_sensor_type_string());
} else {
Serial.println("Climate sensor init failed");
}
}
/* ------------------------------------------------------------------ */
/* --------------------------- SETUP --------------------------------*/
/* ------------------------------------------------------------------ */
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("\nRadar + BH1750 + BME/BMP280 project start");
init_radar();
init_light_sensor();
init_climate_sensor();
}
/* ------------------------------------------------------------------ */
/* --------------------------- LOOP --------------------------------*/
/* ------------------------------------------------------------------ */
void loop() {
/* Обновляем каждое устройство */
radar.update();
light_sensor.update();
climate_sensor.update();
uint32_t now_ms = millis();
if (now_ms - last_print_ms >= print_interval_ms) {
last_print_ms = now_ms;
Serial.println(radar.get_state_json());
Serial.println(light_sensor.get_state_json());
Serial.println(climate_sensor.get_state_json());
}
}