Использование стандарта Ethernet для организации взаимодействия с устройствами, построенными на базе микроконтроллеров серии STM32F4 или аналогичными устройствами GD32, безусловно является прогрессивной и востребованной технологией как в рамках концепции IOT (Internet of Things), так и в узкоспециализированных проектах.

В частности, крайне эффективным средством обеспечения взаимодействия с пользователем является использование web-сервера и web-интерфейса на микроконтроллере, работающим под управлением «bare-metal» программного обеспечения, либо с использованием FreeRTOS.

Наша практика показывает, что bare-metal проект для микроконтроллеров STM32F407 и STM32F427 может иметь достаточно развитый web-интерфейс, обеспечивающий:

  • разделяемые по логину и паролю пользовательскую и администраторские части;
  • одновременное обслуживание до 10 клиентов; 
  • взаимодействие с устройством посредством запросов GET и Ajax;
  • динамическое обновление результатов работы изделия без перезагрузки страницы посредством технологий Ajax и SSE (Server side events);
  • графическое представление данных с использованием SVG. Таким образом, функционал, для использования которого чаще всего применяются мощные процессоры с OS Linux, может быть реализован на недорогом чипе, не требующем сложного технического процесса при монтаже. При этом время выхода на режим такого изделия к работе не превышает 5 сек (при получении IP адреса по DHCP), а эксплуатация возможна при температурах от минус 50 до 60 °С.

Реализация web-интерфейса для STM32 и GD32 основывается на библиотеке lwIP, работа с которой описана с снабжена официальными примерами от STMicroelectronics. В частности, для формирования файла ресурсов web-сайта и его интеграции в программные проект для микроконтроллера используется утилита “makefsdata – HTML to C source converter”, позволяющая создавать файл fsdata.c, используемый в стандартном примере.

В связи с тем, что вскоре после начала работ над web-интерфейсом для STM32 понадобился функционал, не поддерживаемый утилитой makefsdata, с уважением к разработчикам утилиты makefsdata: Jim Pettinato и Simon Goldschmidt, формат fsdata.c был взят за основу, а вместо утилиты makefsdata был создан инструмент IonMakeFs.

Программа IonMakeFs написана на языке C#, имеет графический интерфейс, развивается и дополняется по мере необходимости функционалом, необходимым для эффективной современной разработки.

Основными отличиями от makefsdata является:

  • возможность «исключить файл» из проекта формирования fsdata.c без удаления файла из рабочей директории;
  • наличие возможности минифицировать файлы html, css и js перед формированием fsdata.c.
  • для удобства отладки степень минификации настраивается, а отдельные файлы могут быть исключены из минификации.
  • высокая степень сжатия в режиме «полная минификация» достигается за счет использования библиотеки AjaxMin (https://www.nuget.org/packages/AjaxMin/), «вшитой» в исполняемый файл.  

Данные особенности позволили ускорить и облегчить работу над проектом сложного и многофункционального web-интерфейса, файлы которого размещались в ПЗУ микроконтроллера.

Алгоритм работы с программой IonMakeFs

1. Для начала работы необходимо указать путь к «домашней папке» web-сайта, файлы которого микроконтроллеру предстоит выдавать. Это можно сделать через меню «Проект -> Открыть», либо перетащив в поле «дерево проекта» (Рис. 1).

Рисунок 1 – Начало работы, загрузка проекта

2. После загрузки проекта, посредством контекстного меню (рис. 2), вызываемого правой кнопкой мыши для каждого элемента из «дерева проекта», можно произвести следующие настройки:

  • Открыть файл для просмотра в программе, установленной в ОС в качестве редактора данного типа файлов;
  • Исключить файл из проекта (файл помечается пиктограммой и перечеркнутым именем). Эта функция необходима в том случае, когда некоторые файлы, создаются непосредственно микроконтроллером «на стороне сервера», но нужны при отладке на ПК;
  • Запретить/разрешить минификацию файла. Данный пункт меню доступен для файлов с расширением htm, html, js, css. Данная функция полезна, когда необходимо производить отладку отдельных файлов в проекте, в то время как минификация ухудшает читаемость кода;

Помимо контекстного меню, настройка проекта осуществляется группой выпадающих списков «настройки»:

  • Выравнивание (data structure alignment) – выставляется в соответствии с разрядностью аппаратной архитектуры, на которой будет исполняться код;
  • Размещение в строке – количество байт, размещаемое в одной строке файла fsdata.c;
  • Минификация (Отключена, Средняя, Полная) используется для уменьшения размера тектовых файлов, передаваемых контроллером web-браузеру. Основным отличием среднего уровня минификации от полного является сохранение символов переноса строки и сохранение имен в JS коде. После выполнения полной минификации итоговый файл будет содержать одну строку текста, читаемость которого и отладка крайне затруднены.
Рисунок 2 – Настройка проекта

3. После настройки проекта, результат может быть выгружен в файл «fsdata.с» по нажатию кнопки «Сформировать fsdata.c». При этом в рабочей папке web-сайта будет создана папка «_MakefsResults» в которую помещен файл. Данный файл может быть подключен к программному проекту. Соответствующий заголовочный файл «fsdata.h» может быть выгружен посредством соответствующего пункта в меню «Справка».

Рисунок 3 – Выгрузка fsdata.c