Умный подоконник: как ESP32 спас мой домашний огород (и что я узнал про «невидимые» пины). автополив.. автополив. агроферма.. автополив. агроферма. выращивание.. автополив. агроферма. выращивание. выращивание растений.. автополив. агроферма. выращивание. выращивание растений. датасеты.. автополив. агроферма. выращивание. выращивание растений. датасеты. Интернет вещей.. автополив. агроферма. выращивание. выращивание растений. датасеты. Интернет вещей. искусственный интеллект.. автополив. агроферма. выращивание. выращивание растений. датасеты. Интернет вещей. искусственный интеллект. клубника и земляника.. автополив. агроферма. выращивание. выращивание растений. датасеты. Интернет вещей. искусственный интеллект. клубника и земляника. Производство и разработка электроники.. автополив. агроферма. выращивание. выращивание растений. датасеты. Интернет вещей. искусственный интеллект. клубника и земляника. Производство и разработка электроники. умная ферма.. автополив. агроферма. выращивание. выращивание растений. датасеты. Интернет вещей. искусственный интеллект. клубника и земляника. Производство и разработка электроники. умная ферма. Умный дом.. автополив. агроферма. выращивание. выращивание растений. датасеты. Интернет вещей. искусственный интеллект. клубника и земляника. Производство и разработка электроники. умная ферма. Умный дом. умный подоконник.. автополив. агроферма. выращивание. выращивание растений. датасеты. Интернет вещей. искусственный интеллект. клубника и земляника. Производство и разработка электроники. умная ферма. Умный дом. умный подоконник. Электроника для начинающих.

История о том, как микроконтроллер за 500 рублей помог вырастить клубнику ранней весной, и почему важно знать «анатомию» чипа


 Пролог: Когда руки тянутся к земле, а за окномь уже вроде и весна, но все еще случается минус 10

Живу в обычной квартире. Места мало, света ещё меньше. Но хочется своего — без пестицидов, свеженького. Решил организовать домашнюю ферму на подоконнике: клубника, базилик, салат, щавель, лук.

Если более глобально: в Мире наблюдается перенасыщение людьми, еды на всех не хватит, Дальний Восток от Москвы далеко, а ездить за 80 км от МКАД очень часто ну точно неохота. Если летом можно использовать балкон, где много натурального солнца, то зимой и в переходные периоды (весна и осень) есть совсем маленький клочок на территории квартиры, где то ли горизонтальную ферму делать, то ли вообще вертикальную. Или гибрид вертикальной и горизонтальной.

Концепция вертикальных ферм на крыше небоскреба

Концепция вертикальных ферм на крыше небоскреба

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

Поэтому если бумеры и поколение X ненавидели городское фермерство за то, что в загазованных условиях ты пытаешься что-то ростить, то сегодня все сложно. В небоскребе на 63 этаже вообще может быть воздух чище, чем на загородном участке в 3 метрах от забора. Все ситуативно, но на помощь приходят инструменты и средства Умного Дома и Интернета вещей. Именно сегодня наиболее актуально автоматизировать и роботизировать домашние фермы.

Если подоконник маленький, вообще кому-то актуальнее может быть сделать такое:

Вертикальная, но горизонтальная ферма

Вертикальная, но горизонтальная ферма

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

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

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

Купил самые обычные лампы и холодного, и теплого оттенков, грунт накопал просто на улице, нашел под это дело горшки. Посадил. И начался детектив:

  • Почему один куст растёт как на дрожжах, а другой чахнет?

  • Хватает ли света?

  • Не перелил ли я?

  • Может, температура ночью падает критически?

  • Реально надо удобрять раз в 2 недели? Чем? Дорогим покупным удобрением, либо же бананами из миксера?

Моя версия фермы, с которой я начал

Моя версия фермы, с которой я начал

Рукой не пощупаешь — растения не говорят. А если и говорят, то слишком поздно — когда уже желтеют листья или растение просто медленно и бесповоротно умирает за 3-4 дня.

Идея: а что если поставить «сторожа», который 24/7 будет следить за условиями и писать отчёты?

Салат растет нормально. Лук и в бутылке бы рос нормально

Салат растет нормально. Лук и в бутылке бы рос нормально

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

Сосуд с помпой внутри для автополива

Сосуд с помпой внутри для автополива

 Знакомьтесь: ESP32 — мой новый агроном

Выбрал ESP32 по трём причинам:

  1. Дешёвый — около $3-6

  2. С Wi-Fi — может отправлять данные прямо на сервер

  3. С аналоговыми входами — можно подключить датчики

Что я подключил :

Датчик

Что измеряет

Зачем

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


 Философский эпилог: растения учат терпению

За три месяца «умной фермы» я понял:

  1. Технологии — не самоцель, а инструмент. Главное — не графики, а здоровые растения.

  2. Данные дают уверенность. Когда видишь цифры, перестаёшь паниковать и делать лишние движения.

  3. Природа сложнее, чем кажется. Даже с датчиками иногда растения «капризничают» по непонятным причинам. И это нормально.

Сейчас на моём подоконнике:

  • 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.1rn" +
                 "Host: " + host + "rn" +
                 "Connection: closernrn");
    
    //  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 successfullyn");
  } else {
    Serial.println(" Connection failed");
  }
  
  //  Wait 5 seconds before next send
  delay(5000);
}

Этот код отправляет раз в 5 секунд данные на веб-сервер. После наблюдений за тем, как отработал код, получаем следующий график на веб-сервере:

По мере высыхания датчика значение, полученное с него, снижается

По мере высыхания датчика значение, полученное с него, снижается

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

Видно,  сколько раз датчик опускался в стакан с водой

Видно, сколько раз датчик опускался в стакан с водой

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

Подключение датчика влаги к ESP32 DEVKIT

Подключение датчика влаги к ESP32 DEVKIT

Автор: technofeya

Источник