#include <Arduino.h>
#include "ld2420_radar.h"
/*
Главный файл примера использования первого сенсорного слоя LD2420.
Что делает этот пример:
- поднимает Serial для отладки
- создаёт и настраивает драйвер радара
- регулярно вызывает radar.update()
- печатает JSON состояния в монитор порта
Дальше этот же модуль можно будет встроить в твоё ядро умного дома,
где вместо Serial.println(json) будет:
- HTTP-ответ
- отправка на сервер
- публикация в MQTT
- включение в общий /status endpoint
*/
Ld2420Radar radar;
RadarConfig radar_config;
/*
Интервал печати JSON в монитор порта.
Слишком часто печатать не стоит, чтобы не засорять лог.
*/
static const uint32_t print_interval_ms = 500;
uint32_t last_print_ms = 0;
/*
Отдельный интервал печати короткой калибровочной строки.
Пока не обязателен, но полезен, если включить calibration_mode.
*/
static const uint32_t calibration_print_interval_ms = 250;
uint32_t last_calibration_print_ms = 0;
void setup_radar_config() {
/*
Под твою текущую схему подключения:
TX радара -> GPIO4 ESP (RX)
RX радара -> GPIO15 ESP (TX)
*/
radar_config.uart_rx_pin = 4;
radar_config.uart_tx_pin = 15;
radar_config.baud_rate = 115200;
/*
Удержание присутствия после исчезновения сырых сообщений.
*/
radar_config.presence_hold_ms = 1500;
/*
Если давно не было данных от радара, сенсор помечается stale.
*/
radar_config.stale_after_ms = 2000;
/*
Базовые фильтры.
*/
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.speed_epsilon_m_s = 0.08f;
/*
Границы валидных зон.
Пока задай широкий диапазон. Потом подрежешь под конкретный корпус,
геометрию комнаты и реальный рабочий сектор.
*/
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.enable_debug_unknown_lines = false;
}
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println();
Serial.println("ld2420 radar project start");
setup_radar_config();
radar.begin(Serial2, radar_config);
/*
Если нужен компактный лог для ручной калибровки,
можно включить так:
radar.set_calibration_mode(true);
Пока оставим выключенным, чтобы печатать JSON.
*/
radar.set_calibration_mode(false);
Serial.println("radar initialized");
}
void loop() {
radar.update();
uint32_t now_ms = millis();
/*
Обычный режим: печатаем JSON состояния.
Это как раз тот формат, который потом будет удобно отдать наружу
в твою систему умного дома.
*/
if (!radar.is_calibration_mode()) {
if (now_ms - last_print_ms >= print_interval_ms) {
last_print_ms = now_ms;
String json = radar.get_state_json();
Serial.println(json);
}
} else {
/*
Калибровочный режим:
печатаем короткую строку, чтобы можно было быстро ходить с рулеткой
и смотреть соответствие Range реальной дистанции.
*/
if (now_ms - last_calibration_print_ms >= calibration_print_interval_ms) {
last_calibration_print_ms = now_ms;
Serial.println(radar.get_calibration_line());
}
}
/*
Здесь не делаем delay(), чтобы update() вызывался максимально часто.
*/
}