Мониторинг сельскохозяйственных угодий с помощью Twilio Programmable Wireless и Helium

Автор: | 06.08.2026

Интернет вещей, безусловно, обладает *потенциалом* — а для некоторых применений он уже *работает на практике*. Умное сельское хозяйство — одна из таких областей (каламбур не случаен), где постоянно подключённые датчики могут лучше человека отслеживать состояние посевов. Контроль уровня влажности и других параметров почвы — идеальная задача для маломощных микроконтроллеров, разбросанных по золотым полям пшеницы.

Здесь, в районе залива Сан-Франциско, участки измеряются в *квадратных футах*, а не в *акрах*, так что простите за преувеличение. У меня дома есть пара грядок размером 3 на 6,5 футов, где мы выращиваем травы и корнеплоды. Сегодня мы подключим одну из таких грядок и создадим систему мониторинга с использованием Twilio Programmable Wireless и SMS, а также шлюза Helium Element, модуля прототипирования Helium Atom и платы Arduino Uno.

Что касается комплектующих, мы будем использовать ёмкостный датчик влажности почвы от DFRobot. Также понадобятся соединительные провода типа «папа-папа». Хотя это и не обязательно, макетная плата и мультиметр помогут в отладке при возникновении проблем.

Для работы с программным обеспечением скачайте (или откройте) текстовый редактор Atom и плагин Platformio. Если вы раньше не работали с Atom и хотите получить дополнительную помощь, прочитайте статью Helium о начале работы с Atom, Platformio и Helium.

В этом проекте Twilio будет выполнять сразу три функции. Programmable Wireless обеспечит подключение устройства, бессерверные Twilio Functions будут обрабатывать логику, а Programmable SMS — отправлять важные уведомления о недостатке влаги. Зарегистрируйтесь в Twilio или войдите в существующий аккаунт.

Когда вашим растениям потребуется полив, вы будете использовать номер, приобретённый через Twilio, чтобы отправить важное сообщение по SMS. Перейдите в раздел «Телефонные номера» в консоли.

При поиске убедитесь, что вы отметили галочкой опцию «SMS» в разделе возможностей.

Запомните номер или хотя бы место, где его можно найти — он понадобится на следующем шаге.

Twilio Functions — это бессерверная платформа, которую мы будем использовать для размещения логики. Когда Arduino отправит новые показания, они поступят в код, размещённый на Functions. Код проверит, насколько сухая почва, и если потребуется полив, отправит SMS на ваш телефон.

*(Весь код для умной фермы можно найти в этом репозитории, а также более подробную информацию в нашем плане умной фермы.)*

Давайте пройдёмся по следующим шагам:

— Перейдите в консоль Functions

— Нажмите красную кнопку с плюсом («+»), чтобы создать новую функцию

— Выберите «Пустая» и нажмите «Создать»

— В поле **PATH** введите «moisture»

— Вставьте содержимое файла moisture.js в редактор **CODE**

— При желании измените переменную **TOO_DRY**, чтобы задать процент влажности, при котором будет срабатывать предупреждение

— Нажмите «Сохранить»

Ваша новая функция должна выглядеть примерно так, если вы выполнили все шаги правильно:

#### Настройка переменных окружения в Functions

Теперь перейдите на вкладку Configure в консоли Functions.

Если вы раньше не создавали функции, эта вкладка используется для отделения конфигурационных переменных от кода, который вы вводите в редакторе функций. Вы можете ссылаться на любые переменные, установленные здесь, в коде несколькими способами, как подробно описано в статье о переменных окружения Functions в документации. В целом, хорошей практикой считается отделение конфигурационных констант от кода — подробнее об этом можно прочитать в статье о переменных окружения.

Задайте следующие три переменные окружения:

**SECRET_API_KEY**: Используйте «top-secret», чтобы соответствовать коду Arduino (см. примечание по безопасности ниже)

**YOUR_PHONE_NUMBER**: Номер телефона для отправки предупреждений о влажности в формате E.164

**TWILIO_NUMBER**: Номер в формате E.164 из шага «Покупка номера» выше

**Безопасность в продакшене**

В продакшене убедитесь, что все API-ключи или учётные данные, которые вы предоставляете устройству, можно отозвать. Правила безопасности требуют, чтобы вы могли заблокировать доступ к ресурсам для устройства или чего-то, маскирующегося под него, если оно не находится в вашем распоряжении. Одним из распространённых подходов является использование сервера ключей или предварительно назначенных сертификатов с возможностью отзыва учётных данных в случае утери или кражи устройства.

*Также следует приложить усилия для ограничения области действия любых API, которые вы предоставляете своим IoT-устройствам. Например, сегодняшний код позволяет отправлять SMS только по определённому шаблону и только в ответ на определённые показания датчиков.*

#### Тестирование функции

Самый простой способ протестировать функцию перед продолжением — использовать cURL для отправки нескольких команд.

Чтобы проверить, что функция корректно отправляет предупреждения, используйте эту команду:

Чтобы проверить, что функция игнорирует значения выше заданного порога, используйте эту команду:

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

Если всё выглядит хорошо, переходим к сборке оборудования.

Наши партнёры из Helium предоставляют удобное и простое в использовании оборудование (и абстракции), которое облегчает создание IoT-приложений. Сегодня мы будем использовать Helium Element и модуль прототипирования Helium Atom для создания системы мониторинга посевов. Но сначала зарегистрируйте аккаунт в Helium.

Зарегистрируйте модуль прототипирования Helium Atom, нажав синюю кнопку с плюсом («+») рядом с «Atoms» в боковой панели.

Следуйте инструкциям для регистрации модуля. Затем нажмите фиолетовую кнопку с плюсом («+») рядом с «Elements» и также следуйте инструкциям.

Теперь мы подошли к ключевому этапу — *сборке* оборудования для нашей умной фермы! Давайте соберём устройства по порядку, чтобы вы были готовы начать мониторинг своего сада или фермы.

*Helium Element* собирается довольно просто. Если вы используете версию с сотовой связью, при желании подключите Ethernet-кабель к свободному порту роутера или коммутатора. Для этой версии затем подключите антенны, аккуратно соединив антенну с маркировкой 2,4 ГГц с соответствующим разъёмом.

Для любой версии Element затем подключите адаптер питания 5V DC.

*Модуль прототипирования Helium Atom* и шилд для Arduino требуют немного больше усилий. Чтобы использовать его с Arduino Uno, как мы делаем сегодня, выполните следующие шаги:

— С помощью прилагаемых перемычек с шагом 2,54 мм подключите RX к *пину 9*, а TX к *пину 8*

— Совместите модуль Helium Atom Prototyping Module с пунктирной маркировкой и вставьте его в разъём шилда

— Подключите антенны, вставив антенну 2,4 ГГц в соответствующий разъём

— Установите шилд на плату Arduino

— Не подключайте питание или USB — сначала нужно подключить датчик

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

Теперь возьмите соединительные провода типа «папа-папа» и отделите красный, чёрный и провод любого другого цвета (я выбрал синий) для подключения датчика.

От разъёма датчика подключите чёрный провод через чёрный соединитель к пину **GND** на шилде. Аналогично для красного провода подключите красный соединитель к разъёму **5V** на плате. Для последнего сигнального провода подключите оставшийся разъём датчика к пину **AD0** на шилде.

В собранном виде это должно выглядеть так:

Функционал *Channel* от Helium упрощает интеграцию их оборудования с любым сервисом или конечной точкой, куда вы хотите отправлять данные с микроконтроллера. Сегодня мы будем отправлять показания датчика в Twilio Function, которую вы создали ранее.

Вернитесь в панель управления Helium и нажмите зелёную кнопку с плюсом («+»), чтобы создать канал (или перейдите по ссылке Channels).

— Выберите «HTTP» на первом шаге

— Используйте метод POST и вставьте URL вашей функции. Он будет иметь вид https://SOMETHING.twil.io/moisture; точный URL смотрите в вашей функции

— Добавьте заголовок Content-Type со значением application/x-www-form-urlencoded

— Задайте имя и сохраните канал

Вы уже почти у цели — осталось только прошить микроконтроллер и запустить сборку. Давайте запрограммируем Arduino Uno.

Откройте Atom и создайте новый проект Platformio; если это ваш первый проект, Platformio поможет с пошаговой инструкцией. В любом случае выполните следующие шаги:

— Добавьте в проект файлы ‘main.cpp’ и ‘Board.h’

— В ‘main.cpp’ измените следующие глобальные переменные:

**SECRET_API_KEY**: ‘top-secret’ или то значение, которое вы задали в переменной окружения Twilio Function

**CHANNEL_NAME**: Имя канала Helium, созданного выше

— При желании можно также изменить:

**PAUSE_MS**: Время ожидания между измерениями в миллисекундах

**CYCLES_TO_AVERAGE**: Количество измерений для усреднения перед отправкой в функцию

— Выберите «Build» в меню «PlatformIO»

— Если вы уверены в правильности подключения и проект успешно скомпилировался, подключите USB к Arduino Uno и выберите «Upload» в меню «PlatformIO»

— В меню «PlatformIO» откройте монитор последовательного порта для Arduino на скорости *115200 бод*

*Helium поддерживает не только Atom — подробнее можно узнать в их руководстве по началу работы.*

Если всё сделано правильно, вскоре вы увидите поток показаний датчика в мониторе последовательного порта. Теперь остаётся дождаться SMS о том, что воздух слишком сухой (если, конечно, он действительно сухой…). После этого — вперёд, в сад и на весь мир!

На этом этапе вы готовы погрузить датчик влажности в почву под ваше любимое растение — будь то трава, специя, овощ или что-то ещё. Arduino Uno будет добросовестно следить за вашими посевами и отправлять показания датчика в Twilio Function. Функция проанализирует показания и предупредит вас, когда придёт время взять шланг.

Отправной точки достаточно, чтобы масштабировать систему вширь или вглубь, а также интегрировать другие решения. Может быть, вы добавите датчик кислотности? Или что-то для контроля температуры? Интегрируете предупреждения с возможностью ответа для включения и выключения полива? Размножите установку с ещё дюжиной датчиков? Создадите панель управления, объединив мониторы с Sync для отслеживания состояния растений?

Куда бы вы ни направились, Twilio и Helium поддержат вас на пути в мир IoT. *Нам не терпится увидеть, что вы вырастите.*

Последний опыт Пола Кампа в сельском хозяйстве был в старшей школе, когда он патрулировал яблоневый сад и помогал сортировать фрукты для продажи (или производства сидра). Связаться с ним можно в любое время, будь то сезон сбора урожая или посадки, по адресу pkamp@twilio.com.