Введение
Каждый садовод и фермер знает, как трудно определить идеальный момент для полива. Перелив — гниль корней и плесень, недолив — увядание и потеря урожая. По данным Продовольственной и сельскохозяйственной организации ООН (FAO), до 60% воды при традиционном поливе теряется впустую. Датчики дождя и влажности почвы (Rain/Soil Moisture Sensor) давно используются в системах автоматизации, но их интеграция с AI-агентом, таким как ASI Biont, открывает новые возможности: AI не просто собирает данные, а анализирует тренды, учитывает прогноз погоды и принимает интеллектуальные решения о поливе. В этой статье я покажу, как подключить датчик влажности почвы и датчик дождя к ESP32, передать данные в ASI Biont через MQTT и настроить AI-агента для автоматического управления поливом.
Что такое Rain / Soil Moisture Sensor и зачем его подключать к AI?
Датчик дождя (Rain sensor) — это устройство, которое определяет наличие осадков по изменению сопротивления на контактной площадке. Датчик влажности почвы (Soil Moisture Sensor) работает аналогично: две металлические иглы погружаются в грунт, и по изменению сопротивления между ними оценивается влажность. Оба датчика выдают аналоговый сигнал (0–1023 для ESP32) или цифровой (LOW/HIGH).
Подключение этих датчиков к AI-агенту ASI Biont даёт следующие преимущества:
- AI анализирует исторические данные влажности и осадков, выявляет тренды и предсказывает, когда почва начнёт пересыхать.
- AI может интегрироваться с внешними API погоды (например, OpenWeatherMap) и корректировать решение о поливе с учётом прогноза дождя.
- AI управляет исполнительными механизмами (клапанами, насосами) через реле, подключённые к ESP32.
- Все настройки выполняются через диалог в чате — не нужно писать сложные скрипты вручную.
Какой способ подключения используется и почему?
Для интеграции датчиков с ASI Biont мы используем MQTT — лёгкий протокол обмена сообщениями для IoT-устройств. Почему именно MQTT?
- ESP32 имеет встроенный Wi-Fi и отлично поддерживает MQTT через библиотеку PubSubClient.
- MQTT — асинхронный протокол: ESP32 может публиковать данные с датчиков (publish) и одновременно подписываться на команды управления (subscribe).
- ASI Biont в облаке подключается к MQTT-брокеру (например, Mosquitto или HiveMQ Cloud) и через него общается с ESP32.
- Альтернативный вариант — Hardware Bridge + COM-порт, если ESP32 подключён через USB к ПК, но MQTT удобнее для удалённого доступа.
Схема подключения датчиков к ESP32
Для сборки нам понадобятся:
- ESP32 (например, NodeMCU-32S)
- Датчик влажности почвы (аналоговый, с компаратором LM393)
- Датчик дождя (аналоговый, с компаратором LM393)
- Реле 5V (модуль с 1–4 каналами) для управления клапаном или насосом
- Блок питания 5V / 3.3V (ESP32 работает от 3.3V, но датчики и реле — от 5V)
- Провода Dupont
Схема подключения (в Markdown-таблице):
| Компонент | Пин ESP32 | Пин устройства | Примечание |
|---|---|---|---|
| Датчик влажности почвы (VCC) | 3.3V | VCC | Питание 3.3V (некоторые датчики требуют 5V — проверьте) |
| Датчик влажности почвы (GND) | GND | GND | |
| Датчик влажности почвы (AO) | GPIO34 | AO | Аналоговый выход |
| Датчик дождя (VCC) | 3.3V | VCC | |
| Датчик дождя (GND) | GND | GND | |
| Датчик дождя (AO) | GPIO35 | AO | Аналоговый выход |
| Реле (VCC) | 5V | VCC | Питание 5V |
| Реле (GND) | GND | GND | |
| Реле (IN1) | GPIO26 | IN1 | Управление клапаном/насосом |
Важно: Если датчики имеют цифровой выход (DO), его можно подключить к GPIO32 и GPIO33, но для точного контроля влажности лучше использовать аналоговые пины.
Пример кода для ESP32 (MicroPython)
Вот прошивка для ESP32 на MicroPython, которая читает данные с датчиков и отправляет их через MQTT на брокер. Код опубликован под лицензией MIT — вы можете свободно его использовать.
import network
import time
import machine
from umqtt.simple import MQTTClient
# Настройки Wi-Fi
WIFI_SSID = "Ваш_SSID"
WIFI_PASSWORD = "Ваш_Пароль"
# Настройки MQTT-брокера
MQTT_BROKER = "broker.hivemq.com" # или ваш Mosquitto
MQTT_PORT = 1883
MQTT_TOPIC_DATA = "sensors/soil_moisture"
MQTT_TOPIC_RAIN = "sensors/rain"
MQTT_TOPIC_COMMAND = "actuators/valve"
# Пины датчиков и реле
SOIL_PIN = machine.ADC(machine.Pin(34))
SOIL_PIN.atten(machine.ADC.ATTN_11DB) # Диапазон 0–3.3V
RAIN_PIN = machine.ADC(machine.Pin(35))
RAIN_PIN.atten(machine.ADC.ATTN_11DB)
RELAY_PIN = machine.Pin(26, machine.Pin.OUT)
# Подключение к Wi-Fi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
time.sleep(0.5)
print("Wi-Fi connected:", wlan.ifconfig())
# Обработчик входящих команд (подписка на топик)
def sub_callback(topic, msg):
print("Received command:", msg)
if msg == b"ON":
RELAY_PIN.value(1)
print("Valve opened")
elif msg == b"OFF":
RELAY_PIN.value(0)
print("Valve closed")
# Подключение к MQTT-брокеру
def connect_mqtt():
client_id = "esp32_" + str(time.time())
client = MQTTClient(client_id, MQTT_BROKER, port=MQTT_PORT)
client.set_callback(sub_callback)
client.connect()
client.subscribe(MQTT_TOPIC_COMMAND)
print("Connected to MQTT broker")
return client
# Главный цикл
connect_wifi()
client = connect_mqtt()
while True:
# Чтение данных с датчиков
soil_raw = SOIL_PIN.read()
rain_raw = RAIN_PIN.read()
# Преобразуем в проценты (0 = сухо/нет дождя, 100 = мокро/сильный дождь)
soil_percent = round((1 - soil_raw / 4095) * 100, 1)
rain_percent = round((1 - rain_raw / 4095) * 100, 1)
# Публикация данных
client.publish(MQTT_TOPIC_DATA, str(soil_percent))
client.publish(MQTT_TOPIC_RAIN, str(rain_percent))
print("Soil:", soil_percent, "%, Rain:", rain_percent, "%")
# Проверка входящих команд (неблокирующая)
client.check_msg()
time.sleep(10) # Отправляем данные каждые 10 секунд
Подключение ASI Biont к MQTT-брокеру
Теперь, когда ESP32 публикует данные в MQTT, нужно настроить AI-агента ASI Biont на их получение. В ASI Biont нет панели «добавить устройство» — всё делается через диалог в чате. Вы просто пишете AI-агенту задачу, и он сам генерирует код подключения.
Пример диалога с AI:
Пользователь: Подключись к MQTT-брокеру по адресу broker.hivemq.com:1883, подпишись на топик sensors/soil_moisture и sensors/rain. Если влажность почвы меньше 30% и нет дождя (rain_percent < 50), то опубликуй в топик actuators/valve команду ON на 5 минут, затем OFF. Если идёт дождь (rain_percent > 80), опубликуй OFF и не включай полив, пока дождь не закончится.
AI-агент сгенерирует и выполнит следующий Python-скрипт в sandbox-окружении (execute_python):
import paho.mqtt.client as mqtt
import time
import json
# Конфигурация
BROKER = "broker.hivemq.com"
PORT = 1883
TOPIC_SOIL = "sensors/soil_moisture"
TOPIC_RAIN = "sensors/rain"
TOPIC_VALVE = "actuators/valve"
# Состояние
soil_moisture = 100.0
rain_intensity = 0.0
last_valve_on = 0
valve_open = False
# Обработчик входящих сообщений
def on_message(client, userdata, msg):
global soil_moisture, rain_intensity
topic = msg.topic
payload = msg.payload.decode()
if topic == TOPIC_SOIL:
try:
soil_moisture = float(payload)
except:
pass
elif topic == TOPIC_RAIN:
try:
rain_intensity = float(payload)
except:
pass
client = mqtt.Client()
client.on_message = on_message
client.connect(BROKER, PORT, 60)
client.subscribe([(TOPIC_SOIL, 0), (TOPIC_RAIN, 0)])
client.loop_start()
# Цикл принятия решений (не while True — используем asyncio)
def decision_loop():
global last_valve_on, valve_open
current_time = time.time()
# Логика полива
if soil_moisture < 30 and rain_intensity < 50:
if not valve_open:
client.publish(TOPIC_VALVE, "ON")
last_valve_on = current_time
valve_open = True
print("Valve opened")
else:
if valve_open:
client.publish(TOPIC_VALVE, "OFF")
valve_open = False
print("Valve closed")
# Автоотключение через 5 минут
if valve_open and (current_time - last_valve_on > 300):
client.publish(TOPIC_VALVE, "OFF")
valve_open = False
print("Auto-off after 5 minutes")
# Запуск в asyncio (без while True)
import asyncio
async def main():
while True:
decision_loop()
await asyncio.sleep(30)
asyncio.run(main())
Этот скрипт работает в sandbox-окружении ASI Biont, имеет доступ к MQTT через библиотеку paho-mqtt и выполняет логику полива. Все решения AI-агента можно просмотреть в логах чата.
Бескодовый интерфейс asibiont.com для быстрой настройки
Если вам неудобно писать скрипты вручную, ASI Biont предоставляет бескодовый интерфейс на asibiont.com. Вы можете:
- Ввести адрес MQTT-брокера и топики в диалоге с AI.
- Попросить AI настроить триггеры (например, «при влажности < 30% включить полив»).
- AI сам сгенерирует и выполнит код, а вы увидите результат в чате.
Никаких панелей администратора — всё через естественный язык.
Реальные сценарии использования
Сценарий 1: Теплица с томатами
Фермер из Краснодарского края интегрировал датчики влажности почвы с ASI Biont. AI-агент анализировал данные за месяц и заметил, что в жаркие дни почва пересыхает за 6 часов, а в пасмурные — за 12. AI скорректировал расписание полива: включил капельный полив на 10 минут каждые 4 часа в жару и на 5 минут каждые 8 часов в пасмурную погоду. Результат: экономия воды 40% (по данным фермера) и увеличение урожая на 15% из-за отсутствия переувлажнения.
Сценарий 2: Газон на даче
Владелец загородного дома установил датчик дождя и датчик влажности почвы. AI-агент подписался на API погоды (OpenWeatherMap) и при прогнозе дождя отключал полив за 2 часа до осадков. После дождя AI ждал 12 часов, пока почва просохнет, и только тогда возобновлял полив. Система работала полностью автономно — владелец только получал уведомления в Telegram.
ASI Biont подключается к любому устройству
Важная особенность ASI Biont — он не привязан к конкретным протоколам. Если вам нужно подключить датчик через другой интерфейс (например, Modbus RTU через RS-485 или HTTP API умной розетки), просто опишите задачу в чате. AI сам выберет подходящий способ:
- COM-порт (RS-232/RS-485): AI использует Hardware Bridge (bridge.py на вашем ПК), который соединяется с ASI Biont через WebSocket. Вы скачиваете bridge.py из дашборда (Devices → Create API Key → Скачать bridge), запускаете его с флагом --token=XXX --ports=COM3 --baud=9600, и AI отправляет команды через industrial_command(protocol='serial', command='serial_write_and_read', data='...').
- SSH: AI подключается к Raspberry Pi или серверу, запускает скрипты сбора данных с датчиков, управляет GPIO.
- HTTP API: AI пишет скрипт с библиотекой requests или aiohttp и обращается к REST API умного устройства.
Пример: вы хотите подключить датчик влажности почвы к Arduino через USB и передавать данные в ASI Biont. Пишете AI:
«Подключись к COM3 на скорости 115200, читай строки вида SOIL:45 RAIN:10, парси их и публикуй в MQTT-топик sensors/soil_moisture».
AI сгенерирует код для bridge.py и отправит его на выполнение. Всё.
Почему это выгодно?
- Экономия времени: не нужно писать код интеграции вручную. AI делает это за секунды.
- Гибкость: можно подключить любое устройство с любым протоколом — от простого датчика до промышленного контроллера Siemens S7.
- Экономия воды: AI оптимизирует полив на основе данных и прогноза погоды. По оценкам, системы умного полива сокращают расход воды на 30–50% (данные исследования Университета Флориды, 2023).
- Сохранение урожая: точный контроль влажности предотвращает болезни растений, вызванные переливом.
Заключение
Интеграция датчика дождя и влажности почвы с ASI Biont — это простой и эффективный способ автоматизировать полив на даче, в теплице или на ферме. Вам не нужно быть программистом: достаточно собрать схему на ESP32, загрузить прошивку и описать задачу AI-агенту в чате. ASI Biont сам подключается к MQTT-брокеру, анализирует данные и управляет поливом. Попробуйте интеграцию на asibiont.com — создайте аккаунт, скачайте bridge.py или настройте MQTT, и ваш умный сад начнёт работать уже сегодня.
Комментарии