Интернет вещей, безусловно, обладает *потенциалом* — а для некоторых применений он уже *работает на практике*. Умное сельское хозяйство — одна из таких областей (каламбур не случаен), где постоянно подключённые датчики могут лучше человека отслеживать состояние посевов. Контроль уровня влажности и других параметров почвы — идеальная задача для маломощных микроконтроллеров, разбросанных по золотым полям пшеницы.
Здесь, в районе залива Сан-Франциско, участки измеряются в *квадратных футах*, а не в *акрах*, так что простите за преувеличение. У меня дома есть пара грядок размером 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.