Почему в одной ферме пять разных микроконтроллеров
ESP32 на климате, nRF52840 с Zephyr на гидравлике, Pico W на свете, Pico на дозировании, ESP32-S3 с LoRa на улице. Единая платформа была бы удобнее — и хуже.
Инженерный вкус требует единообразия: одна плата, один тулчейн, одна прошивка с разными конфигурациями. Это красиво, это дешевле в поддержке, и мы так не сделали.
В контейнерной ферме пять разных типов полевых контроллеров, и каждый выбран под свою задачу.
Кто где стоит
Климатический узел — вентиляция, датчики CO₂ и VPD — собран на ESP32. Узел нужен в сети, у него много аналоговых входов, и он всегда под питанием. Wi-Fi и щедрая периферия здесь именно то, что нужно.
Гидравлический узел — насосы, поток, pH, EC — работает на nRF52840 под операционной системой Zephyr. Это узел, который управляет насосами: у него должно быть предсказуемое время реакции и понятная модель задач. Zephyr даёт настоящую операционную систему реального времени вместо цикла в главной функции.
Узел освещения — диммирование и фотопериод — на Raspberry Pi Pico W. Задача простая и ритмичная: держать расписание и уровень яркости. Здесь не нужно ни много памяти, ни сложной сети.
Узел дозирования в техническом контейнере — обычный Raspberry Pi Pico, без беспроводной связи. Сознательно: узел, управляющий подачей концентрата, не должен иметь радиоинтерфейса. Команда приходит по проводу, и поверхность атаки на самом опасном узле фермы сводится к физическому доступу.
Наружные метеостанции и удалённые датчики — ESP32-S3 со встроенным модулем LoRa. Дальность связи без развёртывания Wi-Fi по всей площадке.
Почему единая платформа была бы хуже
Свести всё к одной плате можно. Взять самую мощную — ESP32-S3 — и поставить её везде. Тогда узел дозирования получит радиомодуль, который ему не нужен и который придётся отключать программно; узел освещения получит вычислительную мощность, за которую заплачено; гидравлика останется без нормальной операционной системы или потянет за собой Zephyr на плату, где он не первоклассный гражданин.
Единообразие в железе экономит на тулчейнах и тратит на компромиссах в каждом узле. Мы решили, что на объекте, где насос может испортить урожай, компромисс в узле дороже разнообразия в сборке.
Чем это оплачено
Пятью тулчейнами вместо одного. Это честная цена, и её надо назвать прямо: сборка прошивок для такой фермы — это несколько разных путей сборки, а не одна команда.
Часть из них реально работает в штатном виде: гидроузел собирается через Zephyr и west, один из климатических узлов на AVR — через Arduino-CLI. То есть это не бумажные заглушки, а работающий конвейер сборки прошивки по декларативной спецификации.
Мы говорим «часть», потому что часть. Полный список того, что собирается автоматически, а что пока требует ручных шагов, отличается от списка того, что описано в спецификациях, и мы предпочитаем это разделять в разговоре.
Что решает, а что нет
Выбор платы почти никогда не определяется её характеристиками из даташита. Он определяется тремя вопросами: нужна ли узлу сеть, нужна ли ему предсказуемая реакция и должен ли он иметь радио.
Ответы на эти три вопроса и дают распределение выше. Тактовая частота и объём флеша в этом решении не участвуют вообще — на всех перечисленных задачах их хватает с большим запасом у любой из плат.