Блог 2Smart (RU)

Прошивка на базе ESPHome и SDK платформы – главные отличия

Прошивка на базе ESPHome и SDK платформы – главные отличия
Вендорам платформы, использующим в своих проектах микроконтроллер ESP32, доступно два инструмента разработки прошивки: ESPHome и Software Development Kit (SDK) 2Smart Cloud. Рассказываем о плюсах и минусах этих инструментов и демонстрируем на простом примере, как работать с каждым из них.

Главные отличия ESPHome и SDK


Ключевое преимущество набора библиотек и инструментов ESPHome – его простота. Для разработки прошивки на этой базе даже не требуется знание принципов программирования. Главный недостаток – ограниченный функционал прошивки.

Разработанный командой 2Smart Cloud SDK поддерживает все полезные механики и полную интеграцию устройства с платформой. Функционал прошивки, созданной на такой базе – намного шире, чем в случае с ESPHome. Кроме того, развитие SDK – более приоритетная задача для команды, поэтому все новые возможности платформы будут прежде всего появляться в этой базе. А значит, вендоры, выбравшие вариант прошивки на SDK, смогут быстрее использовать нововведения 2Smart Cloud в своих продуктах.

Вендоры могут использовать выложенные на гитхаб 2Smart Cloud примеры кода на базе SDK в качестве шаблонов прошивки своих устройств, как угодно меняя и модифицируя код.

Основной принцип прошивки, созданной с использованием SDK – код для интеграции устройства с платформой уже написан, вендору достаточно описать логику работы своего продукта.

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

Функционал, доступный при использовании ESP Home и SDK

Какой из вариантов базы прошивки для микроконтроллера ESP32 выбрать – зависит от потребностей вендора и его ресурсов. Во многих случаях оптимальным вариантом является сочетание двух способов – в силу своей простоты ESPHome прекрасно подходит для быстрого подключения и первоначального тестирования концепта устройства, а прошивка на базе SDK может быть написана для последующих итераций прототипа и финальной версии продукта.

Ниже будет показано, как разработать прошивку каждым из двух способов. В качестве примера будет использовано простейшее устройство – подключенный к ESP32 светодиод (блинкер), управлять которым можно будет из мобильного приложения и с использованием дополнительных способов, доступных в 2Smart Cloud.

Разработка прошивки для блинкера на базе ESPHome


Создать новый продукт в 2Smart Cloud можно двумя способами – при помощи пошагового помощника либо без его использования. Подробнее об отличиях двух способов – в блоге платформы. В данном примере будет использован вариант без пошагового помощника. Альтернативный способ с визардом ничем принципиально не отличается.

1 - На странице “Продукты” кабинета вендора нажмите “Создать продукт” (аналогичная кнопка на главной странице запускает вариант с визардом).

Страница Продукты кабинета вендора 2Smart Cloud

2 - Выберите микроконтроллер – ESP32. Нажмите “Далее”.

Окно выбора микроконтроллера

3 - Нажмите “Создать прошивку”.

Кнопка создания прошивки в кабинете вендора 2Smart Cloud

4 - Выберите базу для прошивки – ESPHome. Нажмите “Далее”.

Окно выбора базы прошивки

5 - Вставьте код прошивки вашего устройства, разработанный по документации для ESPHome – в качестве примера по умолчанию используется именно код блинкера. Нажмите “Сохранить”.

Настройка прошивки ESPHome

6 - Нажмите “Собрать прошивку” для Sandbox версии – она необходима для подключения к тестовому окружению платформы и тестирования устройства до публикации.

Ссылка на инструмент сборки Sandbox прошивки

7 - Укажите данные вашей домашней или офисной Wi-Fi сети – они будут внесены в прошивку для быстрого подключения устройства к сети.

Обратите внимание! Микроконтроллер ESP32 поддерживает только сети с частотным диапазоном 2,4 ГГц!

Окно настроек Wi-Fi

8 - Дождитесь, пока будет собран файл прошивки. В случае с ESPHome прошивка собирается на сервере, вам не нужно использовать специальные программы-сборщики на своем компьютере.

Сборка Sandbox прошивки

9 - Нажмите “Скачать”.

Ссылка на скачивание архива с Sandbox прошивкой

10 - Используйте скачанный файл для прошивки своего устройства – инструкция приводится внутри архива в файле readme.md.

Содержимое архива с прошивкой

11 - Проверьте работоспособность продукта, подключившись к тестовому окружению 2Smart Cloud.

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

Подробно об этих этапах работы над продуктом – в статье о подключении к платформе Wi-Fi реле.

12 - Убедившись, что устройство функционирует так, как вы планировали, соберите финальную версию прошивки. Для этого нажмите “Собрать прошивку” для Production версии.

В отличие от Sandbox прошивки, финальная версия не будет включать данные вашей Wi-Fi сети и другие специфические строки кода, необходимые для работы в тестовом окружении.

Ссылка на инструмент сборки Production прошивки

13 - После сборки финальной прошивки скачайте архив и установите ее на все ваши устройства по аналогии с установкой тестовой версии кода.

14 - Опубликуйте продукт на платформе. Не забудьте заполнить информацию об устройстве, указав название, описание, и загрузив логотип с фотографией товара для маркета 2Smart Cloud.

В итоге получилось работоспособное IoT устройство, которое можно привязать к мобильному приложению 2Smart Cloud и управлять им со смартфона. Однако из-за ограничений ESPHome вендор и пользователи будут сталкиваться с такими сложностями:

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

Разработка прошивки с использованием SDK


Набор средств разработки 2Smart Cloud решает эти проблемы, поэтому большинству вендоров рекомендуется использовать при создании прошивки готового продукта именно его, даже если прототип тестировался с прошивкой на базе ESPHome.

Вот как выглядит разработка прошивки для того же устройства – блинкера-маячка – на 
базе SDK:

1 - Скачайте наш SDK с гитхаба – https://github.com/2SmartCloud/2smart-cloud-cpp-sdk

2 - Создайте новый проект в редакторе исходного кода – в нашем примере используется Visual Studio Code. Укажите название проекта, выберите соответствующую плату и фреймворк.

Создание нового проекта в Visual Studio Code

3 - Подключите необходимые библиотеки в файле platformio.ini скачанного SDK:

  • PubSubClient – для работы с MQTT,
  • AsyncWebServer – для работы веб-админки и приема учетных данных при сопряжении устройства,
  • ArduinoJSON – для работы с JSON строками,
  • NTPClient – для синхронизации текущего времени и обновления прошивки в указанное время суток.

Подключение необходимых библиотек

4 - Добавьте в platformio.ini следующий код для подключения функционала веб-интерфейса.

Подключение функционала веб-интерфейса

5 - Создайте папку для описания логики работы вашего устройства (в нашем примере – блинкера) в директории lib/ или src/.

6 - Создайте стандартные файлы с расширением .cpp и .h – в нашем примере это blink_led.cpp и blink_led.h.

7 - В файле .h создайте дочерний Property класс. При необходимости включайте в него собственные поля и методы.

Редактирование файла blink_led.h

8 - В файле .cpp опишите реализацию методов.

Редактирование файла blink_led.cpp

Пояснение к коду:

  • строки 7-11 – создается объект класса;
  • строки 13-20 – инициализация;
  • строка 17 – устанавливается значение нашего свойства, чтобы оно не было неопределенным;
  • строки 22-24 – метод обычно используется для отслеживания состояния сенсора, однако поскольку наш светодиод будет менять свое состояние только по команде с телефона, пока этот метод не нужен. Используйте такой метод для опроса кнопок или датчиков более сложных, чем блинкер, устройств;
  • строки 26-35 – метод вызывается всякий раз, когда значение сенсора изменяется пользователем с помощью приложения, и здесь необходимо описывать логику. В нашем примере на строке 27 светодиоду передается значение “вкл.” или “выкл.”. Если это значение изменилось, отправляется уведомление в мобильное приложение.

9 - Перейдите в файл main.cpp и внесите необходимые изменения.

Редактирование файла main.cpp

Пояснения:

  • строка 3 – подключение нашей библиотеки;
  • строка 4 – подключение созданного ранее свойства;
  • строка 6 – ID нашего продукта (пока он неизвестен – мы создадим новый продукт на платформе чуть позже и вернемся к правке этого файла);
  • строка 7 – имя устройства, а также название точки доступа Wi-Fi, которую устройство запустит на этапе сопряжения (введите любое значение);
  • строка 8 – номер версии прошивки (для нового устройства укажите “1”);
  • строка 10 – объект класса;
  • строка 13 – создание ноды;
  • строка 15 – создание нашего свойства для светодиода;
  • строка 17 – запуск инициализации библиотеки;
  • строка 19 – добавление циклической обработки состояний библиотекой.

В основном написав код, можно переходить к созданию нового продукта на платформе. Не закрывайте редактор исходного кода – в прошивку еще потребуется внести изменения.

1 - На странице “Продукты” кабинета вендора нажмите “Создать продукт” .

Страница Продукты кабинета вендора 2Smart Cloud

2 - Выберите микроконтроллер – ESP32. Нажмите “Далее”.

Окно выбора микроконтроллера

3 - Нажмите “Создать прошивку”.

Кнопка создания прошивки в кабинете вендора 2Smart Cloud

4 - Выберите базу для прошивки – Custom. Нажмите “Далее”.

Окно выбора базы прошивки

5 - Нажмите на ссылку “Информация о подключении”.

Ссылка Информация о подключении

6 - Оставьте открытым окно с данными для подключения и вернитесь к редактору исходного кода для продолжения работы над прошивкой.

Окно с данными для подключения устройства к платформе

7 - Скопируйте идентификатор продукта в поле product_id файла main.cpp прошивки.

8 - Выполните команду pio run -t uploadfs для загрузки файловой системы на устройство.

9 - Выполните команду pio run -t upload для загрузки прошивки на устройство.

10 - Откройте настройки Wi-Fi вашего компьютера или мобильного устройства и подключитесь к точке доступа, которую создал блинкер – она имеет то же название, что и само устройство.

11 - Войдите в веб-интерфейс устройства по ссылке http://192.168.4.1, используйте логин и пароль “admin”.

12 - На вкладке Credentials веб-интерфейса заполните все поля данными из окна “Информация о подключении”, открытого в кабинете вендора. В том числе те, что находятся под спойлером Advanced. Нажмите Save.

Копирование параметров подключения в веб-интерфейс устройства

13 - Дождитесь перезагрузки устройства. После этого перейдите на вкладку Wi-Fi веб-интерфейса, выберите в списке свою сеть и укажите пароль. Эти данные необходимы блинкеру для подключения к интернету.

Обратите внимание! Устройства на ESP32 поддерживают только Wi-Fi сети с частотным диапазоном 2,4 ГГц!

Настройки Wi-Fi в веб-интерфейсе устройства

14 - Вернувшись к своей обычной Wi-Fi сети, вы увидите, что статус устройства на платформе изменился на Ready – это означает, что блинкер подключился к тестовому окружению.

Страница продукта со статусом устройства – Ready

15 - Настройте интерфейс мобильного приложения для управления устройством и проверьте его работоспособность в тестовой среде. Подробно об этих этапах работы над продуктом – в статье о подключении к платформе Wi-Fi реле.

16 - Загрузите прошивку на платформу и нажмите “Опубликовать” – теперь устройство можно подключить к мобильному приложению по стандартной процедуре сопряжения, оно доступно всем пользователям.

Выводы


Каждый из рассмотренных инструментов разработки прошивки для микроконтроллера ESP32 – ESPHome и SDK – имеет свои плюсы и минусы. Оптимальным вариантом при создании прототипа часто становится грамотное использование преимуществ обеих баз. ESPHome дает возможность быстро проверить справедливость концепции устройства, а прошивка на основе SDK предоставляет максимально гибкие возможности по тонкой настройке его функционала и упрощает процесс поддержки.

Мы планируем развивать в рамках 2Smart Cloud оба инструмента. В ESPHome будут добавлены недостающие сегодня возможности, а SDK получит новые базовые абстракции для быстрого решения типовых задач.

Made on
Tilda