Передача файлов

Arduino Mega Server, в ответ на запросы браузера, выдаёт файлы, которые хранятся на microSD карте памяти. И после того, как вы вставили карту памяти в Ethernet Shield и запустили сервер, у вас уже нет возможности что-либо изменить в контенте или функциональности сервера, для этого вам нужно выключить его и извлечь карту памяти для перезаписи файлов.

Для того, чтобы избежать необходимости выключать сервер и вынимать карту памяти каждый раз, когда вам нужно что-либо изменить, была разработана утилита Arduino Serial Commander, которая позволяет посылать файлы прямо на работающий сервер, без его остановки, по Serial интерфейсу.

Arduino Serial Commander

Это очень упрощает работу с сервером. Если вам нужно что-то изменить в содержании веб-страниц или JavaScript файлов, то вам достаточно внести эти изменения в файлы проекта и нажать кнопку «Upload!» утилиты Arduino Serial Commander и через несколько секунд изменённый файл появится на сервере, который продолжит выдавать уже новый файл.

Исходные файлы проекта

Исходные файлы проекта (HTM, CSS, JS, PDE) хранятся в папке arduino_serial_commander. Эта же папка содержит файлы скетча самого Arduino Serial Commander, что не очень удобно и в будущем планируется перенести файлы проекта в отдельную папку.

Процедура обмена

Список маркеров:

  • FAA — начало передачи имени файла
  • FBB — окончание передачи имени файла
  • GOO — начало передачи файла
  • ?Z? — окончание передачи файла
  • E1R — начало передачи защитного блока
  • E2R — конец передачи защитного блока

Передача файла начинается с посылки маркера FAA (начало передачи имени файла) утилитой ASC в Serial интерфейс. При обнаружении этого маркера, сервер переходит в режим приёма файлов и в этот момент блокируется вся активность Arduino Mega Server. Сервер начинает записывать поток, пока не встретит маркер FBB (окончание передачи имени файла).

Затем посылается маркер GOO (начало передачи файла) и поток, передаваемый по Serial интерфейсу, начинает записывается на microSD карту памяти сервера под именем файла, переданным ранее. Запись потока происходит до тех пор, пока в потоке не встретится маркер ?Z? (окончание посылки файла). После получения этого маркера файл на карте памяти закрывается и сервер AMS переходит в нормальный режим работы.

Ограничения

Ошибки передачи

В текущей версии системы не осуществляется проверки целостности передаваемых данных и иногда происходят ошибки передачи файлов (чем больше файл, тем больше вероятность возникновения ошибки). В следующих версиях планируется устранить этот недостаток.

Эмпирическим путём было установлено, что ошибка часто происходит в начале передачи файла и в качестве временной меры была введена передача пустого блока информации в начале файла, который передаётся, но не записывается в результирующий файл (тем самым уменьшая вероятность возникновения ошибки). Маркеры начала и конца передачи защитного блока — E1R и E2R.

Размер файлов

В текущей версии утилиты Arduino Serial Commander есть проблемы с передачей больших файлов (CSS, scripts.js, файлы JavaScript библиотек). Они могут передаваться не с первого раза или не передаваться вообще. В качестве временной меры, для обхода этого ограничения, можно порекомендовать переход в т. н. тандемный режим и прямое редактирование больших файлов (на сервере MajorDoMo) с последующим ручным переносом их на карту памяти (в конце разработки).

Бинарные файлы

На данный момент Arduino Serial Commander может передавать только текстовые файлы (веб-страницы и скрипты) и не может т. н. бинарные файлы (например, картинки). В будущем планируется исправить этот недостаток, а пока графические файлы можно помещать на сервер обычным способом — записав их на карту памяти.


Обратите внимание. Система Arduino Mega Server непрерывно развивается и в код проекта постоянно вносятся изменения и улучшения, поэтому, описание и документация может не соответствовать вашей конкретной версии системы. Последняя правка этой страницы относится к 0.14 версии системы.