История о том, как микроконтроллер за 500 рублей помог вырастить клубнику ранней весной, и почему важно знать «анатомию» чипа
Пролог: Когда руки тянутся к земле, а за окномь уже вроде и весна, но все еще случается минус 10
Живу в обычной квартире. Места мало, света ещё меньше. Но хочется своего — без пестицидов, свеженького. Решил организовать домашнюю ферму на подоконнике: клубника, базилик, салат, щавель, лук.
Если более глобально: в Мире наблюдается перенасыщение людьми, еды на всех не хватит, Дальний Восток от Москвы далеко, а ездить за 80 км от МКАД очень часто ну точно неохота. Если летом можно использовать балкон, где много натурального солнца, то зимой и в переходные периоды (весна и осень) есть совсем маленький клочок на территории квартиры, где то ли горизонтальную ферму делать, то ли вообще вертикальную. Или гибрид вертикальной и горизонтальной.

Есть еще нюанс — 4-5 прямоугольных горшков, как показал мой опыт, Вам явно не хватит. Но этого уже будет достаточно, чтобы было некоторое количество урожая к Вашему столу. Не лучше ли закупать микрозелень и клубнику в магазина, где ее «везут с Краснодара»? Ну есть проблема — в этом капитализме нас повсюду обманывают: искусственное дозревание, пестициды и дешевые эффективные добавки, не лучшее качество воздуха при выращивании в теплице и так далее.
Поэтому если бумеры и поколение X ненавидели городское фермерство за то, что в загазованных условиях ты пытаешься что-то ростить, то сегодня все сложно. В небоскребе на 63 этаже вообще может быть воздух чище, чем на загородном участке в 3 метрах от забора. Все ситуативно, но на помощь приходят инструменты и средства Умного Дома и Интернета вещей. Именно сегодня наиболее актуально автоматизировать и роботизировать домашние фермы.
Если подоконник маленький, вообще кому-то актуальнее может быть сделать такое:

А, начиная с этой точки, уже думать, снизить ли расход электричества на освещение путем меньшего светового потока, использования солнечных элементов или же отраженных солнечных лучей.
Учитывая, что в прошлом я не только Главный специалист по робототехнике из Кванториума Мосгормаш, я нашел в этом явную золотую жилу, которую можно интересно и своеобразно решить в техническом плане. А также относительно последовательно, то есть я лично устал от этих инженерных «ставь задачу и цель, пиши ТЗ, делай расчет приход/расход, проектируй и, затем, разрабатывай». Я пошел по пути «есть освещение, идем дальше к поливу… есть полив – думаем о том, что и почему погибает…». Ну и тут должна быть дальнейшая логическая цепочка вплоть до сравнения нейросетью совокупности данных с разных ферм с учетом значений, получаемых с датчиков. Чтобы понять, почему у хорошего фермера компостные бананы спасают урожай, а у начинающего любителя единственная клубничка вообще перестала плодоносить.
Если собрать полный набор датчиков, то в итоге можно очень четко и конкретно выявить отличия между успешным урожаем и еле живыми ростками.
Купил самые обычные лампы и холодного, и теплого оттенков, грунт накопал просто на улице, нашел под это дело горшки. Посадил. И начался детектив:
Почему один куст растёт как на дрожжах, а другой чахнет?
Хватает ли света?
Не перелил ли я?
Может, температура ночью падает критически?
Реально надо удобрять раз в 2 недели? Чем? Дорогим покупным удобрением, либо же бананами из миксера?

Рукой не пощупаешь — растения не говорят. А если и говорят, то слишком поздно — когда уже желтеют листья или растение просто медленно и бесповоротно умирает за 3-4 дня.
Идея: а что если поставить «сторожа», который 24/7 будет следить за условиями и писать отчёты?

То есть освещение сделано быстро на умной розетке, полив тоже дело легкое — оросительная система + водяная помпа с достаточным создаваемым давлением. Если течет слабо — нужно либо более пробивную помпу, либо параллелить водные каналы, что также я решил сделать. Старый 3D-принтер пока молча курит в сторонке и разрешил нацепить на себя лампочку, вот он – настоящий киберпанк, который мы заслужили.

Знакомьтесь: ESP32 — мой новый агроном
Выбрал ESP32 по трём причинам:
Дешёвый — около $3-6
С Wi-Fi — может отправлять данные прямо на сервер
С аналоговыми входами — можно подключить датчики
Что я подключил :
Датчик |
Что измеряет |
Зачем |
|---|---|---|
FC-28 (влажность почвы) |
Сопротивление грунта |
Не пересушить и не залить |
BH1750 (освещённость) |
Люксы |
Хватает ли света от фитолампы |
DHT22 (температура/влажность воздуха) |
°C и %RH |
Комфортный микроклимат |
Фоторезистор (через ADC) |
Интенсивность света |
Дублирующая проверка освещения |
Первый успех: данные пошли!
Написал скетч. Подключил датчики. Запустил.
В Serial Monitor побежали цифры:
Влажность почвы: 1842 (1490 mV) — норма Освещённость: 4500 lux — маловато Температура: 23.5°C — отлично Влажность воздуха: 58% — суховато
Отлично! Теперь я вижу невооружённым глазом:
Базилик стоит при 1200 mV — земля сухая, пора поливать
Ночью температура падает до 18°C при открытии форточки — растения в стрессе
Когда я выключаю мощную лампу, то в определенных точках получается всего 3000 lux при норме 10000+
Кстати, для увлажнения воздуха достаточно открыть окно, либо поставить увлажнитель, но с этим как раз и надо экспериментировать. Я заметил, что когда открываю окно, то растениям становится плохо. Сначала я думал, что это именно вредители, но помогла не обработка растворенным в воде нашатырным спиртом, а попытка не открывать окно некоторое время и понаблюдать за итогами роста.
Результат за неделю:
Урожайность выросла на 40% (субъективно, но листья жирнее и выше)
Перестал заливать растения (датчик влажности не врал)
Перенёс ферму ближе к окну + добавил вторую лампу
Кстати, невооруженным глазом, конечно, видно, что растения у окна быстрее растут ввысь. Возможно, это потому, что я взял не лампы полного спектра, а самые обычные. Лампы надо ставить на расстоянии 20-30 см от растений.
Шаг второй: отправляем данные в облако
Но смотреть в Serial Monitor неудобно. Хочется графиков, уведомлений, истории.
Добавил в код Wi-Fi и отправку данных на свой сервер:
WiFi.begin("MeurchWiFi", "cooltheBestpass");// ... отправка GET-запроса на iot.tfeya.ru
Теперь каждые 5 секунд ESP32 шлёт пакет:
/sensorData.php?login=eug&sensor_id=1&val=1842&json=1
На сервере — PHP-скрипт, который пишет в базу. А я вижу красивые графики в браузере: как меняется влажность почвы в течение дня, когда включается лампа, какая динамика роста.
И тут всё сломалось. Вернее, «замолчало»
Добавил Wi-Fi. Запустил. И вместо живых данных увидел:
ADC: 0 (0 mV) ADC: 0 (0 mV) ADC: 0 (0 mV)
Шок. Датчики на месте. Провода не трогал. Код тот же (почти).
Расследование: оказалось, я использовал GPIO2 для фоторезистора. А это — ADC2, который блокируется при включённом Wi-Fi.
Анатомия проблемы: почему ESP32 — это не «просто Arduino»
ESP32 — мощный чип. Но у него есть архитектурная особенность:
ADC1 (6 пинов: 32-39) — работает всегда
ADC2 (10 пинов: 0, 2, 4, 12-15, 25-27) — отключается, когда работает Wi-Fi или Bluetooth
Почему? Радиомодуль использует ADC2 для внутренней калибровки и не делится им с пользователем.
Мораль: если используешь Wi-Fi — забудь про пины 0, 2, 4, 12-15, 25-27 для аналоговых датчиков.
Решение: переезд на «безопасную территорию»
Заменил в коде одну строчку:
// Было const int analogPin = 2; // GPIO2 — ADC2 — мёртв с Wi-Fi// Стало const int analogPin = 34; // GPIO34 — ADC1 — жив и здоров!
Переcтавил провод с пина 2 на пин 34. Загрузил. И — о чудо:
ADC: 1842 (1490 mV) Connected to server Data sent successfully
Всё заработало. Данные пошли на сервер. Графики рисуются.

Что я получил в итоге
1. Объективные данные вместо догадок
Раньше: «Кажется, суховато, полью-ка я».
Теперь: «Влажность почвы 980 mV — критически сухо, включаю автополив».
2. Историю изменений
Вижу, что:
Ночью влажность воздуха падает до 40% — растения в стрессе
После полива датчик показывает 2100 mV, через 3 дня — 800 mV
Фитолампа работает 14 часов, даёт стабильные 8000 lux
3. Уведомления
Настроил на сервере простой скрипт: если влажность почвы < 1000 mV — Telegram-бот шлёт сообщение: «Пора поливать базилик!».
4. Экономию времени и нервов
Больше не бегаю с гигрометром. Не гадаю. Не переливаю. Растения говорят сами — через датчики.
Практические советы для вашего умного подоконника
1. Выбирайте правильные пины
Безопасные (ADC1): GPIO32, 33, 34, 35, 36(VP), 39(VN) Опасные (ADC2): GPIO0, 2, 4, 12, 13, 14, 15, 25, 26, 27
2. Калибруйте датчики
Воткните датчик влажности в сухой грунт — запишите значение (например, 800 mV)
Воткните в воду — запишите (2200 mV)
Теперь знаете диапазон: 800 = сухо, 2200 = болото, 1500 = норма
3. Защищайте от влаги
ESP32 боится воды. Все соединения — в сухом боксе или залейте термоклеем.
4. Используйте внешнее питание
USB от ноутбука может не выдать ток для Wi-Fi + датчиков + ламп. Лучше — блок питания 5V/2A.
5. Локальный бэкап
Если Wi-Fi отвалился — данные не должны теряться. Используйте SPIFFS/LittleFS для записи в память, или отправляйте пачками при восстановлении связи.
Философский эпилог: растения учат терпению
За три месяца «умной фермы» я понял:
Технологии — не самоцель, а инструмент. Главное — не графики, а здоровые растения.
Данные дают уверенность. Когда видишь цифры, перестаёшь паниковать и делать лишние движения.
Природа сложнее, чем кажется. Даже с датчиками иногда растения «капризничают» по непонятным причинам. И это нормально.
Сейчас на моём подоконнике:
3 куста помидоров черри (уже собрали первый урожай!)
Базилик (растёт как сорняк)
Салат (срезаем листья каждую неделю)
Острый перец (ждём цветения)
И ESP32, который молча делает свою работу: измеряет, отправляет, напоминает.
Что нужно для старта (бюджет ~1000₽)
Компонент |
Цена |
Где купить |
|---|---|---|
ESP32 DevKit V1 |
300₽ |
AliExpress, Чип и Дип |
Датчик влажности почвы FC-28 |
100₽ |
AliExpress |
Датчик DHT22 |
250₽ |
AliExpress |
Фоторезистор + резистор 10кОм |
50₽ |
Любой радиомагазин |
Провода, макетка |
200₽ |
Местный магазин |
Итого |
~900₽ |
Заключение теоретической части
ESP32 — это не просто «ещё один микроконтроллер». Это мост между миром растений и миром данных.
Когда вы видите, как на графике растёт влажность после полива, или как скачет температура ночью — вы понимаете свои растения лучше. Вы говорите с ними на одном языке.
А если вдруг что-то «замолчит» — вспомните про ADC1 и ADC2. Иногда достаточно переставить один провод, чтобы всё заработало.
Растите с умом!
Практика, с которой предлагаю Вам начать
Посмотрим мой кейс в упрощенной конкретике на примере Water Sensor — датчика влаги. Этот датчик выдает 0, если он совсем сухой. Как только засовываешь его полностью специально созданной для этого металлизацией в воду — выдает 4096 в мониторе порта Arduino.

Если после того, как Вы окунули датчик воды, вы вытащите его, то на нем останется несколько капель, и этого будет достаточно, чтобы сигнал был не 4096 и не 0, а посередине между этих двух значений. Например, 3769.

Код для работы устройства:
#include <WiFi.h> #include <WiFiClientSecure.h> // WiFi credentials const char* ssid = "M....."; const char* password = "d....."; // Server settings const char* host = "iot.tfeya.ru"; const int httpsPort = 443; // Your API parameters (secret kept as provided) const char* login = "eug"; const char* sensor_id = "1"; const char* secret = "001......."; // ADC pin const int analogPin = 34; // GPIO2 / D2 // Certificate fingerprint (optional, see note below) // const char* fingerprint = "YOUR_CERT_FINGERPRINT_HERE"; WiFiClientSecure client; void setup() { Serial.begin(115200); // Set ADC resolution analogReadResolution(12); // Connect to WiFi Serial.print("Connecting to WiFi"); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\n WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // Configure SSL (for development: skip verification) client.setInsecure(); // Отключает проверку сертификата - только для тестов! // Для продакшена используйте: // client.setCACert(root_ca); или client.verify(fingerprint, host); } void loop() { // Read analog value int analogValue = analogRead(analogPin); int analogVolts = analogReadMilliVolts(analogPin); Serial.printf(" ADC: %d (%d mV)\n", analogValue, analogVolts); // Build URL with dynamic value String url = "/sensorData.php?login=" + String(login) + "&sensor_id=" + String(sensor_id) + "&secret=" + String(secret) + "&val=" + String(analogValue) + "&json=1"; // Send HTTP GET request if (client.connect(host, httpsPort)) { Serial.println(" Connected to server"); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); // Wait for response (optional: read and print it) unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 5000) { Serial.println(" Client timeout"); client.stop(); delay(5000); return; } } // Read response (first 500 chars for debug) Serial.println(" Response:"); int lines = 0; while (client.available() && lines < 20) { String line = client.readStringUntil('\n'); Serial.println(line); lines++; } client.stop(); Serial.println(" Data sent successfully\n"); } else { Serial.println(" Connection failed"); } // Wait 5 seconds before next send delay(5000); }
Этот код отправляет раз в 5 секунд данные на веб-сервер. После наблюдений за тем, как отработал код, получаем следующий график на веб-сервере:

Если посмотреть больший временной интервал, будет видно, как сначала были нулевые значения, потом датчик был погружен в стакан и получилось 4095, а затем значение стало опускаться в сторону нуля при последовательном высыхании датчика.

По рисунку можно понять, сколько раз датчик окунался в стакан за время наблюдения.

Комментарии (4)

beatleboy
19.04.2026 20:59
Тоже уже примерно год занимаюсь автоматизацией теплицы и полива газона
Во многом более простой и мощный способ привязать ESP32 к HomeAssistant. У него есть ряд несомненных плюсов, можно собирать данные с различных датчиков строить автоматизации как через UI так и через скрипты (нейросети неплохо пишут yaml конфиги автоматизаций под HA), графики с сенсоров это фича из коробки в HA
На данный момент сделал так, что все умные датчики, розетки и все что можно добавить я добавил в локальный HA.
Для теплицы сделал умное открывание окна для вентиляции в жаркую погоду, сценарий в HA смотрит реальную температуру теплицы, и если требуется начинает проветривание открывая окно, учитывается также погода на улице, например в дождь или в большой ветер окно не будет открываться на все 100%
Также для газона построил свой контроллер полива, на Raspberry PI Zero W2.
Контррллер полива имеет свой UI и бекенд и берет данные из HA, у меня есть два датчика влажности от Tuya в HA, и данные о погоде (яндекс погода для умного дома)
Раз в час через локальную LLM принимается решение о поливе, Нейронка видя все данные + прогноз на ближайшие 12 часов решает стоит включать полив или нет. Например если влажность почвы газона низкая и казалось бы нужно полить но через час начнется дождь то нейросеть не будет поливать а просто дождется дождя, после чего померит влажность и если потребуется то дольет
Также она не будет поливать в момент жары и сильного солнца, чтобы не пожечь траву, ну и т.д., условия задаются через промпт.
Пример решения по поливу газона от LLM

PoksPoks
19.04.2026 20:59Сначала ты просто хочешь вырастить базилик на подоконнике, а потом у тебя уже телеграм-бот, графики, сервер и микроконтроллер следит, не пересох ли щавель. Киберпанк действительно не подвёл

dsrk_dev
19.04.2026 20:59У меня zigbee датчики прокинуты в home assistant. Но по факту они не оч точные. Поливал всё сегодня, стоят на одном подоконнике, и данные сильно расходятся. Освещаю фито лентами подключенным через zigbee розетку, и это прям рабочая штука. Если освещение ниже 1000, свет включается, ниже выключается, в период с 10 утра до 10 вечера. Для полива купил wifi поливалку, но лениво стало заморачиваться, там всего пара выводов, надо как-то растения в группы организовывать, подбирать колво и частоту...

p0isk
Надолго датчика хватает? Он резистивный или ёмкостной?