Датчик почвенной влажности soil-1 + второй релейный модуль под fan-1

По фото: у нас два одинаковых 2-канальных релейных модуля (не один) —
второй закрывает fan-1 по-настоящему (GPIO18), больше не "пока не куплено".

Добавлен soil-1: компараторный модуль почвенной влажности, читаем A0 через
ADC (GPIO34, input-only), публикуем sensor_type=soil_moisture в процентах.
Raw->% калибруется через SOIL_RAW_DRY/SOIL_RAW_WET в config.h — заводские
значения приблизительные, точную калибровку раньше сделать было нельзя (не
было физического доступа к датчику), нужно измерить на месте.

soil-1 в Postgres/Laravel платформы ещё не заведён (не трогаем
home_automatization) — телеметрия будет идти в ClickHouse, но в Laravel UI
устройство не появится до отдельной регистрации device_type/devices-записи.

Веб-интерфейс и /api/state дополнены полем "soil".
This commit is contained in:
2026-08-18 12:57:49 +05:00
parent 0456d4e447
commit 6a7d512b22
5 changed files with 127 additions and 44 deletions
+18 -4
View File
@@ -14,8 +14,14 @@
// --- Зона и устройства ---
// zone_id — id зоны "Гроубокс" в Postgres (laravel-app, таблица zones).
// device_id должны совпадать с devices.external_id, засеянными в Laravel.
// soil-1 — новое устройство, в Laravel/Postgres платформы ещё не заведено
// (device_type "sensor_soil_moisture" + строка в devices нужно добавить
// отдельно, это в this репозитории не трогаем) — до тех пор его телеметрия
// просто не будет ни к чему привязана на стороне платформы, ingest-service
// это переживёт (zone_id едет прямо в payload).
#define ZONE_ID "1"
#define DEVICE_ID_SENSOR "sensor-1"
#define DEVICE_ID_SOIL "soil-1"
#define DEVICE_ID_LIGHT "light-1"
#define DEVICE_ID_PUMP "pump-1"
#define DEVICE_ID_FAN "fan-1"
@@ -23,14 +29,22 @@
// --- Пины (ESP32 DevKitC) ---
// На 30-контактных платах GPIO16/17 часто подписаны на шёлкографии как
// RX2/TX2 (пины UART2), а не номерами — это те же GPIO, см. README.md.
#define PIN_DHT22 4
#define PIN_RELAY_LIGHT 16
#define PIN_RELAY_PUMP 17
#define PIN_RELAY_FAN 18
#define PIN_DHT22 4
#define PIN_SOIL_MOISTURE 34 // ADC1_CH6, input-only — годится для чистого аналогового чтения
#define PIN_RELAY_LIGHT 16
#define PIN_RELAY_PUMP 17
#define PIN_RELAY_FAN 18
// Большинство дешёвых реле-модулей активны по LOW (сигнал LOW = реле включено).
#define RELAY_ACTIVE_LOW true
// Калибровка компараторного модуля почвенной влажности (analogRead 0-4095):
// значение на воздухе (сухо) и в воде (максимально мокро). Заводские числа
// ниже — грубая оценка, откалибровать по месту и подставить свои — иначе
// проценты будут врать. Смотреть Serial-лог telemetryTick() (печатает raw).
#define SOIL_RAW_DRY 3200
#define SOIL_RAW_WET 1300
// --- Телеметрия ---
#define TELEMETRY_INTERVAL_MS 30000UL