![image](http://habrastorage.org/files/f3b/050/e29/f3b050e293b749e19b4b308919555f7a.png)
Да, это снова Ардуино, но не спешите закрывать страничку, на этот раз вас ждёт нечто действительно новое и интересное. В основном в этой статье речь пойдёт о микроконтроллерных платах 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](http://habrastorage.org/files/d4d/271/8f1/d4d2718f151d43dd9fad3b20cf42e39f.png)
Если всё так просто, то почему это не было сделано раньше? Вот это действительно вопрос. Моя версия — стереотипность мышления. Вам же сказали, что это 8-битный контроллер, какой ещё THREE.js? Какой хостинг? О чём вы вообще говорите? Справедливости ради нужно сказать, что все части пазла уже существовали в природе, но существовали они в совершенно непотребном виде — либо в виде абстрактного сервера, полностью оторванного от реальности, либо в виде Ajax примеров, но опять же только с двумя абстрактными кнопками, с которыми непонятно, что вообще нужно делать.
Область применения
Теперь давайте поговорим о применении этой технологии и о том что, собственно, в ней такого замечательного и полезного.
Необходимое пояснение. В названии присутствует слово «сервер» и речь в первой части статьи идёт о серверных функциях системы. Это может ввести вас в заблуждение и создать впечатление, что основным назначением системы является хостинг файлов и сайтов и раздача контента. Это не совсем так. Узким бутылочным горлышком в этой системе является быстродействие SD карты и заменить микроконтроллером настоящий веб-сервер конечно не удастся.
Смысл системы несколько в другом. Вместе с Arduino Mega Server вы получаете возможность удобного управления своим устройством при помощи веб-интерфейса и просто роскошного (в визуальном смысле) выведения результатов его работы при помощи всей мощи современных технологий (HTML5, CSS3, THREE.js и т.п.). Будь то система управления умным домом, теплицей, автоматом по продаже напитков, метеостанцией или чем угодно, на что у вас хватит фантазии.
![image](http://habrastorage.org/files/299/432/388/299432388fb04f408a9503b264d437c5.png)
Ещё одна интересная область применения системы это (интерактивное) самодокументирование. Например, вы находите в пыльной кладовке (своей или заказчика) микроконтроллер непонятно что и как делающий (дело было давно и вся документация утеряна). Всё, что вам нужно это зайти на его сайт и получить исчерпывающую информацию по подключениям, протоколам, окружению и т. п. Ведь у нас нет ограничений на объём хранимых файлов. Документация может быть интерактивной. Например, распиновка контроллера не просто нарисована на страничке, но и обновляется в реальном времени (статусы, потенциалы и т. п.). Сразу видно что и как работает и что и как не работает.
![image](http://habrastorage.org/files/47b/cc9/eef/47bcc9eef2d04ed2a450b47376a052dc.png)
Что на борту, кроме сервера
Я много внимания уделил серверным функциям, но это только одна из частей системы. Кроме сервера Ардуино содержит код на все случаи жизни:
- измерение температуры
- обслуживание PIR-датчиков
- обслуживание контактных датчиков
- часы реального времени
- модуль контроля и измерения сетевого напряжения и тока на 13 каналов
- модуль работы со светодиодными лентами
- модуль определения доступности сетевых устройств
- модуль работы с SD картами памяти
- модуль приёма и отдачи команд по сети
- модули интеграции с системами домашней автоматизации
- и много прочих функций плюс возможность создания новых
Поддерживается модульная структура и выборочная компиляция модулей. Браузерная часть кода распознаёт наличие или отсутствие откомпилированного модуля и позволяет динамически его включать или отключать прямо с веб-странички.
![image](http://habrastorage.org/files/9f8/a02/4a8/9f8a024a870e4817a19ecfca3acef463.png)
Интеграция с MajorDoMo
Исторически так сложилось, что Arduino Mega Server (далее AMS) разрабатывался в связке и как часть системы домашней автоматизации на базе открытой платформы MajorDoMo и имеет встроенную «родную» поддержку этой платформы. Он может посылать статусы и данные для анализа и хранения «старшему брату» и принимать от него управляющие команды по сети.
Кроме того, в данный момент AMS работает в т. н. тандемном режиме, т. е. для части функций используются ресурсы сервера MajorDoMo. Но работа в связке для Мега Сервера непринципиальна, он может работать и полностью автономно.
![image](http://habrastorage.org/files/068/524/968/068524968f7f429385b0a99cf7d4c716.jpg)
Побочные технологии
В рамках проекта реализовано несколько интересных и уникальных технологий, например индикатор уровня загрузки «CPU» микроконтроллера. Это удобно тем, что сразу видно насколько загружен ваш контроллер и что он в данный момент делает. Не знаю насколько это уникально, но мне не удалось найти в сети ничего похожего, тем более в удобоваримом виде с красивой графикой и на веб-странице.
![image](http://habrastorage.org/files/218/79a/fbf/21879afbf95e43fba1a14acfd1833d16.png)
Создан электро-модуль, который мониторит сетевое напряжение и ещё 13 токовых каналов. Будучи установлен в электрощитке, позволяет прямо или косвенно отслеживать всю электроактивность в доме. Когда был включён и когда выключен тот или иной электроприбор, сколько он потребляет электричества и каков его вклад в размер счёта за электроэнергию. Также позволяет косвенным способом отслеживать наличие или отсутствие людей в доме.
![image](http://habrastorage.org/files/2ca/48b/006/2ca48b0069f94462bf6c28c7f79e719d.png)
Создан модуль визуализации и контроля формы сетевого напряжения и тока на любом из 13 каналов. Плюс добавлен сетевой осциллограф, когда Ардуино в реальном времени транслирует динамический сигнал (осциллограмму) на вашу веб-страничку. Что тоже не имеет аналогов, насколько мне известно.
![image](http://habrastorage.org/files/c57/ccb/2b5/c57ccb2b59ab418f835fce8839b9bfbe.png)
Добавлен модуль «скринсейверов» для современных панелей отображения информации. Вы можете убрать всю техническую информацию с экрана и оставить только нужную на фоне красивой картинки. Получается нечто вроде картины в раме для большой или маленькой панели.
![image](http://habrastorage.org/files/a8b/3d5/446/a8b3d5446bbd4545896702c2b2068e4c.png)
Ещё реализованы такие вещи как измеритель частоты напряжения электросети, который может использоваться для предупреждения о возможных в ближайшем будущем сбоях и, например, многофункциональный 3D индикатор состояния системы на 216 объектов / подсистем / функций, который вращается в шапке сайта. Его смысл в том, что вы одним взглядом можете оценить состояние сложной системы.
И т. д. и т. п. Технологий больше, чем может уместиться на эту страничку. И всё это работает на 8-битном микроконтроллере с 8 килобайтами памяти, что просто невероятно.
![image](http://habrastorage.org/files/0a1/4d5/8f0/0a14d58f08544995a8ac21eace3eea0b.png)
Перспективы
Перспективы неограничены. Вы можете реализовать с помощью этой технологии любые, даже самые фантастические проекты. Например, распределённый по контроллерам интеллект умного дома, динамическую перепрошивку контроллеров по сети (в зависимости от некоторых условий) и динамическую реконфигурацию умного дома на железном уровне, предоставление веб-интерфейса для «совсем плохих» Arduino Uno и т. д. и т. п. Не говоря уже об умных пивоварнях и сайтах каждого цветка в вашем доме с их личными блогами.
И для этого вам не понадобится ничего, кроме Arduino, Ethernet Shield, AMS, SD карты и вашей фантазии.
![image](http://habrastorage.org/files/871/d3f/801/871d3f801c5c4fd589eb952c8fa76561.png)
Коммерческие перспективы
Вы можете продавать свои устройства, просто положив всё необходимое в коробку и дописав прошивку AMS под свою задачу. Заказчик включает устройство и управляет им через полноценный веб-интерфейс и больше ничего не нужно. А если вы ещё предусмотрите подключение вашего устройства и датчиков без паяльника, то ещё больше расширите аудиторию своих потенциальных клиентов.
Как это сделать без паяльника? В этом вам поможет (самопровозглашённый) стандарт Open Home Automation Standard (OHAS) и датчики, подключаемые одним кликом, но это уже совсем другая история. Если это будет интересно — опишу здесь ещё пару «прорывных» технологий.
Статус проекта
Статус проекта — версия 0.1 альфа, всё работает, но всё нужно дорабатывать. Если у вас есть желание и соответствующая квалификация, то можете присоединиться к проекту и ускорить процесс разработки и получить ни с чем не сравнимый фан. А можете скачать исходный код и создать проект своей мечты.
Проект полностью открыт и не накладывает никаких ограничений на его использование. Вы можете свободно использовать его в любых, в том числе коммерческих целях, изменять код, дорабатывать, создавать собственные проекты на GitHub и т.д.
Сейчас доступна для закачки версия 0.1 alpha, это стартовый выпуск. Сейчас же готовится к выпуску версия 0.11, в которой исправлены ошибки и добавлены около 20 нововведений. Лучше, наверное, подождать и чуть позже закачать более свежую и продвинутую версию.
![image](http://habrastorage.org/files/1dc/4ee/2cb/1dc4ee2cb816471db447f0f5272f2a7b.jpg)
Ссылка на последнюю стабильную версию 0.11. Ссылка ведёт на форум с дистрибутивом, а всю техническую информацию по установке и настройке можно узнать, почитав тему. Там же можно задать вопросы, если что-то непонятно.
Друзья! Забыл упомянуть ещё об одной, едва ли не самой важной части проекта. Это обучающая функция. Если вы начнёте работать с проектом и изменять код под свои задачи, то вы очень быстро на практике освоите множество современных технологий это HTML, CSS, JavaScript, межбраузерное взаимодействие, отладка кода в браузере, программирование для Ардуино, Processing и множество других.
И последнее. Проект буквально нашпигован идеями и эксклюзивом. Вы можете просто брать нужные куски кода для ваших собственных проектов, дополнять и улучшать их.
Комментарии (29)
smart_alex Автор
24.07.2015 14:28Вопрос к старожилам. За время модерации вышла новая стабильная и исправленная версия 0.11. Можно ли добавить на неё ссылку в конце статьи и не будет ли это нарушением правил?
Meklon
24.07.2015 20:58+1Для Opensource проектов традиционно отношение позитивное. Вы же не продаете его сейчас. Тем более, что выглядит эпично.
r00tGER
24.07.2015 15:04-1Пока читал сложилось впечатление, что мне рассказывают об очередной «чудо хрени» в телемагазине (это я о стиле повествования).
Да, красивенько, аккуратненько…
Ну кого сегодня этим удивишь?
Вовсе не пытаюсь «наехать», но никакого «вау-эффекта» на меня не произвело (а повествование к этому готовило).smart_alex Автор
24.07.2015 15:23+3Дело в том, что это можно скачать, установить на свою пылящуюся в кладовке Мегу и получить все описанные в статье «плюшки». По набору того, что содержит дистрибутив ему нет аналогов. Просто нет. Другое дело, что кому-то это нужно, а кому-то — нет. Мне отписались люди, которые «побежали» за Мегой ради этих плюшек.
r00tGER
24.07.2015 15:34Безусловно, вам огромный респект за проделанную работу.
Соглашусь, что проект лидер в категории «что можно запихнуть в Мегу». И действительно многих заинтересует.
Но, на практике критерий «обязательно реализовать на Меге» не так важен в области «умного дома».smart_alex Автор
24.07.2015 15:47Конечно! Будьте уверены на Меге мы не остановимся. У нас очень обширные планы по завоеванию мира, а Мега это только что-то вроде кроссворда, пока делать нечего.
Frimen3
24.07.2015 15:05Очень интересный проект! Но не увидел ссылок в статье ни на исходники, ни на какую-либо документацию…
Поделитесь?
smart_alex Автор
24.07.2015 15:10С удовольствием поделюсь, только не знаю допускается это правилами в данном случае?
Frimen3
24.07.2015 15:15Я не старожил, но думаю что в комментариях это точно не запрещается!
Да и в самой статье указать ссылку на исходники думаю даже не просто можно, а даже нужно :)
Meklon
24.07.2015 21:01+1Офигительно, да. Остался Github полноценный для пулл-реквестов и обязательно подробная документация.
smart_alex Автор
24.07.2015 21:46Проект полностью свободный и каждый желающий может создать на Github свой проект и развивать его как хочет. Кажется уже создано две такие копии.
Что касается документации, то она конечно нужна, но у меня столько идей, что я не успеваю их реализовывать и конца им не видно. По хорошему нужна команда из нескольких человек, которые будут окультуривать мой код и писать документацию, но это из области фантастики. Так что пока выход один — читать форум и задавать вопросы.Meklon
24.07.2015 21:51+1Если вы хотите остаться ядром разработки — именно ваш git должен быть первоисточником.
smart_alex Автор
24.07.2015 23:31Ни в коем случае. Мне бы хотелось, чтобы народ подхватил идею и самостоятельно стал развивать проект.
gigimon
25.07.2015 15:01А с какой скоростью ардуинка отдает странички?
smart_alex Автор
25.07.2015 16:56Хороший вопрос. На данный момент всё происходит так: нажимаем на кнопку — задержка 1 — 4 секунды, а дальше вступает в работу JavaScript и всё просто «летает». Задержка связана с подгрузкой страничек, скриптов и графики. Плюс активная работа Ajax-а. Это без оптимизации. С оптимизацией работа с Ардуино Сервером будет мало отличаться от обычных серверов (естественно Ардуино не рассчитана на обслуживание сразу 1000 клиентов).
12 одновременно открытых страниц, каждая с четырьмя непрерывными Ajax потоками (всего 4х12 = 48 потоков) работают нормально. Дальше не проверял — нет особого смысла.smart_alex Автор
25.07.2015 17:03Забыл написать. Если странички статичные, без Ajax-а, то клиентов может быть очень много, сотни или тысячи, не проверял.
Alexeyslav
27.07.2015 11:27+1Понятно, значит активный контент просто на стороне клиента, а сервер-ардуино просто обслуживает соединения, хранилище данных и подставляет в статичные странички некоторые переменные параметры вроде значение напряжения в сети, частоту и т.д.
smart_alex Автор
27.07.2015 11:53Совершенно верно, задача Ардуино — выполнять свои прямые обязанности, как контроллера, выдавать веб-странички и Ajax данные по запросу браузера, задача JavaScript-а придать данным удобоваримый вид и красиво отобразить на веб-страничке.
Плюс управление контроллером со странички.alexzzam
28.07.2015 03:30Ну и, строго говоря, «HTML5, CSS3, JavaScript, Ajax» и любой список JS-библиотек НЕ «поддерживается в полном объёме» сервером. А поддерживается он клиентским браузером.
smart_alex Автор
28.07.2015 16:05Безусловно. Здесь просто имелось в виду, что вы сможете использовать все эти технологии.
LAVBoy
27.07.2015 13:47+1А можно ли увидеть схемы электромодулей?
insekt
07.08.2015 17:07Можете показать фото как эта система у вас выглядит в сборе, ардуинка + внешние модули?
sashabeep
Невероятно!
еще бы PHP [… любой другой язык]
Nidaylokn
За те же деньги можно купить малинку, на нее накатывается что угодно, хоть PHP. И мощнее оно.
smart_alex Автор
Это делалось, кроме всего прочего, и «for fun» — чтобы заставить всё это работать на 8-битном контроллере с 8 килобайтами памяти. А кроме того, у народа много таких контроллеров и, что ещё более важно, опыта работы именно с Ардуино. Да и «пинов» у Меги больше, чем у малинки.
И ещё это часть проекта, который связывает различные устройства в одну систему. Это и MajorDoMo и малинки и «ардуинки» и «лоранки» и всё, до чего у нас дотянутся руки.