Для решения каких-то домашних вопросов автоматизации в определенный момент встает вопрос какой-то централизации всех систем, удаленного доступа, да и анализа с мониторингом не через COM порт. В данной статье мы рассмотрим небольшой пример запуска web-servera со своей файловой системой, который будет обрабатывать один HTTP запрос и выдавать на него страницу и все это на PlatformIO.
Платформа, на которой я провожу эксперимент, в описании.
Краткий обзор на данную платформу.
Как перепрошить до уровня адекватного МК.
Настройка PlatformIO и создание проекта.
VSCode и установка расширения
Первым делом, для адекватной работы нам потребуется скачать VSCode.
Качаем, ставим, запускаем.
Далее в расширениях(Extensions) необходимо установить PlatformIO.
Установили, перезапустили программу.
При запуске нас встречает следующие окно
Нас интересует вкладка Platforms, где нам будет необходимо найти и поставить платформу Espressif 8266.
Создание проекта
Тут все также просто. На главном экране жмем New Project и даем название проекту и выбираем нужную платформу. Должно выглядеть как на картинке ниже.
Жмем FINISH и радуемся созданному проекту.
Давайте теперь быстро пробежимся по структуре проекта.
СТРУКТУРА ПРОЕКТА
Во многих папках конечно у нас имеются файлы с описаниями, но мы быстро ознакомимся.
include - хранит в себе заголовочные файлы. При работе на ArduinoIDE мы и знать не знали, что это, но тут мы можем в полной мере ощутить много файловые проекты
lib - место хранения сторонних библиотек
src - место куда мы будем складывать наши исполняемые файлы. Помним, что точка входа всегда main.cpp
test - место куда надо будет складывать наши тесты
platform.ini - конфигурация нашей платформы, с которой нам придется взаимодействовать.
Тут уже отмечена платформа, что у нас за конкретная плата и фреймворк на котором мы пишем.
НАЧАЛО ПРОЕКТА
Конфигурирование файловой системы
Для начала нам предстоит сконфигурировать файловую систему под наш проект. Для этого нам поможет файл конфигурации.
Дописываем туда пару строчек, чтоб было как на скриншоте.
board_build.ldscript = eagle.flash.1m512.ld - говорит компилятору, что у нас на борту есть 1Мбайт FLASH памяти из нее мы 512КБайт отдаем под файловую систему. Ровно половину.
board_build.filesystem = littlefs - сообщает что за файловая система у нас будет на борту. В данном случае LIttleFS
После этого в каталоге нашего проекта создаем папку data именно там мы и будем хранить все наши файлы. В данном проекте страничку index.html
Можно ее сразу и сделать, чтоб потом не вспоминать.
Тут не будет ничего сверх большого. Простая страничка для демонстрации.
Запуск сервера и файловой системы.
Для начала нам необходимо подключить недостающие заголовочные файлы.
<ESP8266WiFi.h> - позволяет нам работать с WiFi
<ESP8266WebServer.h> - отвечает за вэб сервер и обрабатывает все соединения
<LittleFS.h> - работа с нашей файловой системой
Далее прописываем всю инициализацию.
Код весьма простенький, но давайте разбираться.
const char * ssid = "PIOTest" ;
ESP8266WebServer HTTP ( 80 );
Тут мы создаем константу, которая представляет собой указатель на имя нашей wi-fi точки, а также создаем объект вэб сервера с указанием порта для работы, у нас он 80.
Serial . begin ( 9600 );
WiFi . softAP ( ssid );
Serial . println ( WiFi . softAPIP ());
Serial . print ( "OK" );
LittleFS . begin ();
Дальше стандартный набор. Запускаем uart на 9600 бод для простого мониторинга, инициализируем WiFi как точку доступа с нашим именем, выводим в консоль IP -адрес данной точки и запускаем файловую систему.
HTTP . on ( "/test" ,[](){
Serial . println ( "Its worked!" );
File file = LittleFS . open ( "index.html" , "r" );
HTTP . streamFile ( file , "text/html" );
file . close ();
return ;
});
А вот этот кусок самый интересный. В нем происходит обработка запроса на наш сервер. В данном случае он будет ждать обращения к IPАдресТочкиДоступа/test. После того как произойдет данный запрос, в консоль нам выведут сообщение что это работает, далее мы откроем файл, который находится в нашей файловой системе и имеет имя index.html. Причем откроем мы его только на чтение. Отправил файл обратно по HTTP на сторону того кто запрашивал, закроем файл и завершим эту анонимную функцию.
HTTP . begin ();
И запустим наш сервер.
ВАЖНО!!! Сервер запускается после того как будут описаны все возможные обращения к нему.
void loop () {
// put your main code here, to run repeatedly:
HTTP . handleClient ();
}
В главном цикле программы оставляем только обработку входящих соединений.
ЗАГРУЗКА ПРОШИВКИ И ФАЙЛОВ
Для загрузки всего этого добра к нам на плату нам потребуется переместиться в еще одно подменю.
И дальше в этом меню начинается набор действий.
- Build-построение нашего проекта
- Upload - загрузка проекта на плату. Можно выбрать раздел Upload and Monitor, но лучше начать мониторинг чуть позже
Наша прошивка находится в нашем устройстве. И можно попытаться найти точку доступа в списке Wi-Fi сетей.
Однако пока у нас не загружены файлы.
Загружаем их
- Build Filesystem Image - строит образ нашей файловой системы
- Upload Filesystem Image - загружает наши файлы во flash память.
Готово. Перезагружаем нашу плату, подключаемся к ней как к токе и вводим http://192.168.4.1/test
И получаем ответ:
Подписывайся если нравится.
Вопросы в комментарии.
Также у меня есть telegram канал там обновления чаще и иногда в реальном времени.