История о том, как микроконтроллер за 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, а затем значение стало опускаться в сторону нуля при последовательном высыхании датчика.

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

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

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
p0isk
Надолго датчика хватает? Он резистивный или ёмкостной?
sergyk2
это для побаловаца, когда сгниёт от удобрений, купит емкостной, поиграется, потом разработает свой.
strvv
да и емкостной тоже побаловаться, если достаточной глубины датчик, то при разной по слоям влажности будут одинаковые результаты. да и самому разработать - тот ещё квест - разрабатывал датчик уровня воды/топлива в закрытой емкости.
MaFrance351
Того, что в наборах для ардуино (текстолитовая "вилка" характерного вида), хватает на пару недель. Потом дорожки полностью растворяются до голого текстолита.
Встречал рекомендации не держать питание датчика постоянно поданным, а включать только в момент измерения. Но это тоже полумеры, которые лишь отсрочивают неизбежное гниение.