Пользователь
3,2
рейтинг
24 июля 2015 в 12:35

Arduino Mega Server из песочницы

image

Да, это снова Ардуино, но не спешите закрывать страничку, на этот раз вас ждёт нечто действительно новое и интересное. В основном в этой статье речь пойдёт о микроконтроллерных платах Arduino Mega и плате сетевого интерфейса Ethernet Shield W5100 и о том чуде, которое можно с ними сотворить если позволить себе выйти за рамки стереотипов.

Итак, что собой представляет типовая плата Arduino? «Убогий» 8-битный микроконтроллер со смешным объёмом оперативной памяти (в случае Меги это 8 килобайт) и таким же смешным объёмом флеш-памяти (256 килобайт для Меги). Некую живость пейзажу добавляют платы расширения, в нашем случае это Ethernet Shield, но принципиально это ничего не меняет. Область применения подобных плат это маргинальные поделки и знаменитое моргание светодиодами.

Но так было до последнего момента. Теперь в природе существует Arduino Mega Server, который принципиально меняет положение вещей. Например, что бы вы сказали, если бы столкнулись с утверждением, что:
  • на Arduino можно организовать полноценный веб-сервер, не имеющий ограничений на размер и количество файлов?
  • динамически обновляющий контент без остановки сервера?
  • поддерживающий в полном объёме HTML5, CSS3, JavaScript, Ajax, Processig, THREE.js, сторонние библиотеки и т. д.?
  • Позволяющий «хостить» на микроконтроллере сотни полноценных сайтов (с известными ограничениями)?
  • Позволяющий держать у себя в кладовке на одном из контроллеров умного дома, например, полную работающую копию Хабра и ещё десятка подобных сайтов (в пределах 32 гигабайт)?

Вы бы сказали, что это попросту невозможно.

Однако это факт. И вы можете скачать дистрибутив к себе на компьютер и убедиться в этом сами (кроме Хабра, это гипотетический пример).

В чём же секрет? Всё очень просто. Плата сетевого интерфейса поддерживает подключение SD карт памяти объёмом до 32 гигабайт и ничто не мешает нам задействовать её для хранения файлов веб-сервера и собственно контента. Нужно просто решить задачу интеграции всего этого богатства в одну систему.

Чтобы всё это заработало нужно написать серверный движок для Ардуино и научить его выдавать содержимое флеш-карты памяти по запросам браузеров. Собственно, почти всё. Нужно ещё каким-то образом организовать обновление файлов сервера и контента «на лету», для того, чтобы вам не приходилось вставать с дивана, отключать питание Ардуино и вынимать карту памяти каждый раз, когда нужно изменить что-либо в конфигурации сервера или поменять что-либо в контенте. Эта тяжёлая, но благородная миссия возложена на Arduino Serial Commander, который управляет загрузкой файлов на работающий сервер, без остановки оного.

image

Если всё так просто, то почему это не было сделано раньше? Вот это действительно вопрос. Моя версия — стереотипность мышления. Вам же сказали, что это 8-битный контроллер, какой ещё THREE.js? Какой хостинг? О чём вы вообще говорите? Справедливости ради нужно сказать, что все части пазла уже существовали в природе, но существовали они в совершенно непотребном виде — либо в виде абстрактного сервера, полностью оторванного от реальности, либо в виде Ajax примеров, но опять же только с двумя абстрактными кнопками, с которыми непонятно, что вообще нужно делать.

Область применения


Теперь давайте поговорим о применении этой технологии и о том что, собственно, в ней такого замечательного и полезного.

Необходимое пояснение. В названии присутствует слово «сервер» и речь в первой части статьи идёт о серверных функциях системы. Это может ввести вас в заблуждение и создать впечатление, что основным назначением системы является хостинг файлов и сайтов и раздача контента. Это не совсем так. Узким бутылочным горлышком в этой системе является быстродействие SD карты и заменить микроконтроллером настоящий веб-сервер конечно не удастся.

Смысл системы несколько в другом. Вместе с Arduino Mega Server вы получаете возможность удобного управления своим устройством при помощи веб-интерфейса и просто роскошного (в визуальном смысле) выведения результатов его работы при помощи всей мощи современных технологий (HTML5, CSS3, THREE.js и т.п.). Будь то система управления умным домом, теплицей, автоматом по продаже напитков, метеостанцией или чем угодно, на что у вас хватит фантазии.

image

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

image

Что на борту, кроме сервера


Я много внимания уделил серверным функциям, но это только одна из частей системы. Кроме сервера Ардуино содержит код на все случаи жизни:
  • измерение температуры
  • обслуживание PIR-датчиков
  • обслуживание контактных датчиков
  • часы реального времени
  • модуль контроля и измерения сетевого напряжения и тока на 13 каналов
  • модуль работы со светодиодными лентами
  • модуль определения доступности сетевых устройств
  • модуль работы с SD картами памяти
  • модуль приёма и отдачи команд по сети
  • модули интеграции с системами домашней автоматизации
  • и много прочих функций плюс возможность создания новых

Поддерживается модульная структура и выборочная компиляция модулей. Браузерная часть кода распознаёт наличие или отсутствие откомпилированного модуля и позволяет динамически его включать или отключать прямо с веб-странички.

image

Интеграция с MajorDoMo


Исторически так сложилось, что Arduino Mega Server (далее AMS) разрабатывался в связке и как часть системы домашней автоматизации на базе открытой платформы MajorDoMo и имеет встроенную «родную» поддержку этой платформы. Он может посылать статусы и данные для анализа и хранения «старшему брату» и принимать от него управляющие команды по сети.

Кроме того, в данный момент AMS работает в т. н. тандемном режиме, т. е. для части функций используются ресурсы сервера MajorDoMo. Но работа в связке для Мега Сервера непринципиальна, он может работать и полностью автономно.

image

Побочные технологии


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

image

Создан электро-модуль, который мониторит сетевое напряжение и ещё 13 токовых каналов. Будучи установлен в электрощитке, позволяет прямо или косвенно отслеживать всю электроактивность в доме. Когда был включён и когда выключен тот или иной электроприбор, сколько он потребляет электричества и каков его вклад в размер счёта за электроэнергию. Также позволяет косвенным способом отслеживать наличие или отсутствие людей в доме.

image

Создан модуль визуализации и контроля формы сетевого напряжения и тока на любом из 13 каналов. Плюс добавлен сетевой осциллограф, когда Ардуино в реальном времени транслирует динамический сигнал (осциллограмму) на вашу веб-страничку. Что тоже не имеет аналогов, насколько мне известно.

image

Добавлен модуль «скринсейверов» для современных панелей отображения информации. Вы можете убрать всю техническую информацию с экрана и оставить только нужную на фоне красивой картинки. Получается нечто вроде картины в раме для большой или маленькой панели.

image

Ещё реализованы такие вещи как измеритель частоты напряжения электросети, который может использоваться для предупреждения о возможных в ближайшем будущем сбоях и, например, многофункциональный 3D индикатор состояния системы на 216 объектов / подсистем / функций, который вращается в шапке сайта. Его смысл в том, что вы одним взглядом можете оценить состояние сложной системы.

И т. д. и т. п. Технологий больше, чем может уместиться на эту страничку. И всё это работает на 8-битном микроконтроллере с 8 килобайтами памяти, что просто невероятно.

image

Перспективы


Перспективы неограничены. Вы можете реализовать с помощью этой технологии любые, даже самые фантастические проекты. Например, распределённый по контроллерам интеллект умного дома, динамическую перепрошивку контроллеров по сети (в зависимости от некоторых условий) и динамическую реконфигурацию умного дома на железном уровне, предоставление веб-интерфейса для «совсем плохих» Arduino Uno и т. д. и т. п. Не говоря уже об умных пивоварнях и сайтах каждого цветка в вашем доме с их личными блогами.

И для этого вам не понадобится ничего, кроме Arduino, Ethernet Shield, AMS, SD карты и вашей фантазии.

image

Коммерческие перспективы


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

Как это сделать без паяльника? В этом вам поможет (самопровозглашённый) стандарт Open Home Automation Standard (OHAS) и датчики, подключаемые одним кликом, но это уже совсем другая история. Если это будет интересно — опишу здесь ещё пару «прорывных» технологий.

Статус проекта


Статус проекта — альфа версия, всё работает, но всё нужно дорабатывать. Если у вас есть желание и соответствующая квалификация, то можете присоединиться к проекту и ускорить процесс разработки и получить ни с чем не сравнимый фан. А можете скачать исходный код и создать проект своей мечты.

Проект полностью открыт и не накладывает никаких ограничений на его использование. Вы можете свободно использовать его в любых, в том числе коммерческих целях, изменять код, дорабатывать, создавать собственные проекты на GitHub и т. д.

image

Загрузить последнюю версию вы можете на официальном сайте проекта. Если у вас возникли вопросы, то вы можете задать их на форуме. На форуме есть также инструкции по установке и настройке AMS.

Друзья! Забыл упомянуть ещё об одной, едва ли не самой важной части проекта. Это обучающая функция. Если вы начнёте работать с проектом и изменять код под свои задачи, то вы очень быстро на практике освоите множество современных технологий это HTML, CSS, JavaScript, межбраузерное взаимодействие, отладка кода в браузере, программирование для Ардуино, Processing и множество других.

И последнее. Проект буквально нашпигован идеями и эксклюзивом. Вы можете просто брать нужные куски кода для ваших собственных проектов, дополнять и улучшать их.

Дополнение. Открыт канал на Youtube и вот промо ролик Arduino Mega Server, который демонстрирует работу с реальной системой.
@smart_alex
карма
35,0
рейтинг 3,2
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (34)

  • 0
    Невероятно!
    еще бы PHP [… любой другой язык]
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Это делалось, кроме всего прочего, и «for fun» — чтобы заставить всё это работать на 8-битном контроллере с 8 килобайтами памяти. А кроме того, у народа много таких контроллеров и, что ещё более важно, опыта работы именно с Ардуино. Да и «пинов» у Меги больше, чем у малинки.
        И ещё это часть проекта, который связывает различные устройства в одну систему. Это и MajorDoMo и малинки и «ардуинки» и «лоранки» и всё, до чего у нас дотянутся руки.
  • 0
    Вопрос к старожилам. За время модерации вышла новая стабильная и исправленная версия 0.11. Можно ли добавить на неё ссылку в конце статьи и не будет ли это нарушением правил?
    • +1
      Для Opensource проектов традиционно отношение позитивное. Вы же не продаете его сейчас. Тем более, что выглядит эпично.
  • –1
    Пока читал сложилось впечатление, что мне рассказывают об очередной «чудо хрени» в телемагазине (это я о стиле повествования).

    Да, красивенько, аккуратненько…
    Ну кого сегодня этим удивишь?

    Вовсе не пытаюсь «наехать», но никакого «вау-эффекта» на меня не произвело (а повествование к этому готовило).
    • +3
      Дело в том, что это можно скачать, установить на свою пылящуюся в кладовке Мегу и получить все описанные в статье «плюшки». По набору того, что содержит дистрибутив ему нет аналогов. Просто нет. Другое дело, что кому-то это нужно, а кому-то — нет. Мне отписались люди, которые «побежали» за Мегой ради этих плюшек.
      • 0
        Безусловно, вам огромный респект за проделанную работу.
        Соглашусь, что проект лидер в категории «что можно запихнуть в Мегу». И действительно многих заинтересует.

        Но, на практике критерий «обязательно реализовать на Меге» не так важен в области «умного дома».
        • 0
          Конечно! Будьте уверены на Меге мы не остановимся. У нас очень обширные планы по завоеванию мира, а Мега это только что-то вроде кроссворда, пока делать нечего.
  • 0
    Очень интересный проект! Но не увидел ссылок в статье ни на исходники, ни на какую-либо документацию…
    Поделитесь?
  • 0
    С удовольствием поделюсь, только не знаю допускается это правилами в данном случае?
    • 0
      Я не старожил, но думаю что в комментариях это точно не запрещается!
      Да и в самой статье указать ссылку на исходники думаю даже не просто можно, а даже нужно :)
      • 0
        Ок. Сейчас добавлю ссылку.
  • +1
    Офигительно, да. Остался Github полноценный для пулл-реквестов и обязательно подробная документация.
    • 0
      Проект полностью свободный и каждый желающий может создать на Github свой проект и развивать его как хочет. Кажется уже создано две такие копии.

      Что касается документации, то она конечно нужна, но у меня столько идей, что я не успеваю их реализовывать и конца им не видно. По хорошему нужна команда из нескольких человек, которые будут окультуривать мой код и писать документацию, но это из области фантастики. Так что пока выход один — читать форум и задавать вопросы.
      • +1
        Если вы хотите остаться ядром разработки — именно ваш git должен быть первоисточником.
        • 0
          Ни в коем случае. Мне бы хотелось, чтобы народ подхватил идею и самостоятельно стал развивать проект.
          • 0
            Ваш собственный github репозиторий только поможет в этом.
  • 0
    А с какой скоростью ардуинка отдает странички?
    • 0
      Хороший вопрос. На данный момент всё происходит так: нажимаем на кнопку — задержка 1 — 4 секунды, а дальше вступает в работу JavaScript и всё просто «летает». Задержка связана с подгрузкой страничек, скриптов и графики. Плюс активная работа Ajax-а. Это без оптимизации. С оптимизацией работа с Ардуино Сервером будет мало отличаться от обычных серверов (естественно Ардуино не рассчитана на обслуживание сразу 1000 клиентов).

      12 одновременно открытых страниц, каждая с четырьмя непрерывными Ajax потоками (всего 4х12 = 48 потоков) работают нормально. Дальше не проверял — нет особого смысла.
      • 0
        Забыл написать. Если странички статичные, без Ajax-а, то клиентов может быть очень много, сотни или тысячи, не проверял.
  • +1
    Понятно, значит активный контент просто на стороне клиента, а сервер-ардуино просто обслуживает соединения, хранилище данных и подставляет в статичные странички некоторые переменные параметры вроде значение напряжения в сети, частоту и т.д.
    • 0
      Совершенно верно, задача Ардуино — выполнять свои прямые обязанности, как контроллера, выдавать веб-странички и Ajax данные по запросу браузера, задача JavaScript-а придать данным удобоваримый вид и красиво отобразить на веб-страничке.

      Плюс управление контроллером со странички.
      • 0
        Ну и, строго говоря, «HTML5, CSS3, JavaScript, Ajax» и любой список JS-библиотек НЕ «поддерживается в полном объёме» сервером. А поддерживается он клиентским браузером.
        • 0
          Безусловно. Здесь просто имелось в виду, что вы сможете использовать все эти технологии.
  • +1
    А можно ли увидеть схемы электромодулей?
    • 0
      Можно, но пока только на форуме. Тема POWER MONITOR на Arduino.

      • 0
        Большое спасибо, то, что надо!
  • 0
    Можете показать фото как эта система у вас выглядит в сборе, ардуинка + внешние модули?
  • 0
    А чем обрабатываете .js код?
    • 0
      Не совсем понял вопрос. В каком смысле чем обрабатываю?
  • 0
    Будет ли это всё работать на UNO?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.