| Запуск примера веб-сервера на ESP32-S3 |
|
| Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||
|
Здесь приведены основные шаги по запуску веб-сервера на платке WaveShare ESP32-S3-ETH [1] через интерфейс Ethernet. 1. Сделайте копию папки esp-idf/examples/protocols/http_server/restful_server в отдельном каталоге, например в ~/restful_server. 2. Зайдите в каталог restful_server, выполните инициализацию переменных ESP-IDF запуском скрипта esp-idf/export.sh. 3. Выполните команду idf.py set-target esp32s3. 4. Выполните команду idf.py menuconfig, сконфигурируйте следующие опции. Размещение данных сайта на памяти SPI Flash: Выбор подключения через Ethernet: PHY-интерфейс Ethernet на платке WaveShare ESP32-S3-ETH реализован на чипе W5500 следующим образом: Поэтому нужно также установить следующие опции: Ethernet Type (W5500 Module) ---> (CONFIG_EXAMPLE_USE_SPI_ETHERNET=y, CONFIG_EXAMPLE_USE_W5500=y) Отключить IPv6 (CONFIG_EXAMPLE_CONNECT_IPV4=y, # CONFIG_EXAMPLE_CONNECT_IPV6 is not set): [ ] Obtain IPv6 address Сохраните конфигурацию (Esc, Esc, .., Yes). 5. Зайдите в каталог front/web-demo, выполните в нем команду: npm run build После выполнения этой команды должна появиться папка dist с файлами сайта. Выполните в каталоге front/web-demo команду: npm install --save-dev @vue/cli-service 6. Вернитесь в корневой каталог проекта, скомпилируйте проект командой isp.py build: cd ../.. 7. Прошейте программу в память чипа и запустите монитор: idf.py flash monitor -p /dev/ttyACM0 В лог монитора должно быть выведено примерно следующее: ...
Плата ожидает подключения кабеля Ethernet. 8. Подключите кабель Ethernet сети, где доступен DHCP-сервер. В логе должны появиться сообщения о выдаче IP-адреса: ...
Теперь можно открыть веб-страницы сервера в браузере по ссылке http://192.168.116.162.
[Обзор проекта] Этот пример главным образом обеспечивает введение в реализацию RESTful API server и HTTP-сервера на ESP32, с UI frontend-ом в браузере. В этом примере несколько API-интерфейсов предназначены для выборки ресурсов следующим образом:
Page URL это URL web-страницы, куда посылается запрос в API. [Установка Wi-Fi или Ethernet соединения] Функция Простая функция [Конфигурирование примера] Для конфигурирования примера на использование Wi-Fi, Ethernet или обоих этих соединений откройте меню конфигурации проекта ( Когда соединение использует Wi-Fi, введите SSID и password вашей точки доступа Wi-Fi в соответствующие поля. Если происходит соединение к открытой сети Wi-Fi, то оставьте поле password пустым. Когда соединение происходит через Ethernet, установите тип PHY и конфигурацию в предоставленных полях. Если Ethernet используется первый раз, то рекомендуется начать с Ethernet example readme, где содержатся инструкции для подключения и конфигурирования PHY. Как только этот пример Ethernet успешно получит IP-адрес, переходите к примеру протоколов, и установите в нем те же самые опции конфигурации. Запрет IPv6. По умолчанию функция mDNS. IP-адрес устройства IoT может время от времени меняться, так что не практично хардкодить IP-адрес в web-странице. В этом примере используется Замечание: mDNS установлена по умолчанию на большинстве операционных систем, или доступна как отдельный пакет. Режим развертывания веб-страниц. В режиме разработки было бы ужасно неудобно прошивать все web-страницы каждый раз, когда мы обновляем файлы html, js или css. Так что очень рекомендуется развернуть web-страницу на хосте PC через технологию После разработки странички должны быть развернуты в одном из следующих мест: SPI Flash - этот способ рекомендуется для небольшого web-сайта (что-то типа менее 2MB). Фреймворк фронтэнда. В этом примере могут использоваться многие известные фреймворки (например Vue, React, Angular). Здесь просто используется Vue в качестве примера и адаптировали vuetify в качестве UI-библиотеки. [Как использовать пример] Необходимое железо. Для запуска этого примера нам нужна плата разработчика ESP32 dev (например ESP32-WROVER Kit, ESP32-Ethernet-Kit) или ESP32 core (например ESP32-DevKitC). Может также понадобиться дополнительный JTAG-адаптер, если вы решили развернуть web-сейт на основе семихостинга. Для дополнительной информации по поддерживаемому JTAG-адаптеру см. select JTAG adapter. Или если вы решили развернуть web-сайт на карте SD понадобится дополнительная плата со слотом SD. Используемые выводы. Только если вы развертываете web-сайт на карте SD, используйте в этом примере следующие подключения.
[Конфигурация проекта] Откройте меню конфигурации проекта ( В меню Выберите сетевой интерфейс в опции Если вы выбрали интерфейс Wi-Fi то нужно установить: Если вы выбрали интерфейс Ethernet, то нужно установить: В меню Установите доменное имя в опции [Сборка и прошивка] После того, как работа по разработке web-страниц завершена, скомпилируйте проект запуском команд: cd path_to_this_example/front/web-demo npm install npm run build ЗАМЕЧАНИЕ: этот пример нуждается в Через некоторое время вы увидите директорию Запустите (Для выхода из serial monitor нажмите См. Getting Started Guide для описания полных шагов по конфигурированию и использованию ESP-IDF при сборке проектов. Дополнительные шаги для развертывания web-сайта через семихостинг. Понадобится последняя версия OpenOCD которая должна поддерживать фичу semihost, когда мы тестируем этот режим развертывания: openocd-esp32/bin/openocd -s openocd-esp32/share/openocd/scripts -f board/esp32-wrover-kit-3.3v.cfg [Просмотр web-страницы в браузере] В вашем браузере введите URL веб-сайта (например Также этот пример разрешает фичу NetBIOS с доменным именем [Вывод ESP monitor] На страничке Light, после того как мы установим цвет и кликнем на кнопку check, браузер отправит post-запрос в ESP32, и в консоли просто увидим напечатанное значение color. I (6115) example_connect: Connected to Ethernet
I (6115) example_connect: IPv4 address: 192.168.2.151
I (6325) esp-home: Partition size: total: 1920401, used: 1587575
I (6325) esp-rest: Starting HTTP Server
I (128305) esp-rest: File sending complete
I (128565) esp-rest: File sending complete
I (128855) esp-rest: File sending complete
I (129525) esp-rest: File sending complete
I (129855) esp-rest: File sending complete
I (137485) esp-rest: Light control: red = 50, green = 85, blue = 28
[Troubleshooting] Error occurred when building example: Когда вы выбрали развертывание web-сайта на SPI, убедитесь в наличии сгенерированной директории [Как добавить в проект функцию example_connect] Функция example_connect, которая используется для организации сетевого интерфейса в примере restful_server, подключается в составе компонента protocol_examples_common. Этот компонент находится не в онлайн-реестре компонентов, он находится локально в каталоге среды разработки ESP-IDF. Чтобы можно было использовать функцию example_connect, нужно вручную отредактировать файл idf_component.yml вашего проекта. Выполните следующие шаги по добавлению компонента protocol_examples_common: 1. Перейдите в директорию main вашего проекта. Если в ней нет файла idf_component.yml, то создайте его. 2. Откройте файл idf_component.yml в текстовом редакторе, и укажите в разделе зависимостей локальный путь до компонента: dependencies: Здесь `${IDF_PATH}` это переменная, которая автоматически укажет на директорию инсталляции вашей ESP-IDF. 3. Добавьте в свой код, где вызывается функция example_connect, подключение заголовочного файла protocol_examples_common.h: #include "protocol_examples_common.h" В качестве примера файла idf_component.yml см. файл idf_component.yml в директории main проекта restful_server [2]. Для чего нужен компонент protocol_examples_common и последующие шаги. Компонент `protocol_examples_common` предоставляет вспомогательный код, упрощающий реализацию сетевых подключений в вашем проекте (обычно Wi-Fi или Ethernet). В нем содержится функция example_connect() (см. также врезку README.md выше), которая обрабатывает процесс соединения, используя опции, настроенные через `idf.py menuconfig`. После того, как вы добавили в проект зависимость от компонента protocol_examples_common, сконфигурируйте ваш проект. Например, может понадобиться выбрать тип подключения и установить в случае использования Wi-Fi параметр SSID и password. Запустите `idf.py menuconfig`, перейдите в раздел настроек `Example Connection Configuration`, и введите нужные данные. Альтернативный метод добавления кода с функцией example_connect: просто скопируйте всю папку protocol_examples_common из `$IDF_PATH/examples/common_components/` в директорию components, находящуюся в корне вашего проекта, и добавьте CMakeLists.txt настройки для компиляции необходимого кода protocol_examples_common. [Ссылки] 1. WaveShare ESP32-S3-ETH. |