Да, это снова Ардуино, но не спешите закрывать страничку, на этот раз вас ждёт нечто действительно новое и интересное. В основном в этой статье речь пойдёт о микроконтроллерных платах 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, который управляет загрузкой файлов на работающий сервер, без остановки оного.
Если всё так просто, то почему это не было сделано раньше? Вот это действительно вопрос. Моя версия — стереотипность мышления. Вам же сказали, что это 8-битный контроллер, какой ещё THREE.js? Какой хостинг? О чём вы вообще говорите? Справедливости ради нужно сказать, что все части пазла уже существовали в природе, но существовали они в совершенно непотребном виде — либо в виде абстрактного сервера, полностью оторванного от реальности, либо в виде Ajax примеров, но опять же только с двумя абстрактными кнопками, с которыми непонятно, что вообще нужно делать.
Область применения
Теперь давайте поговорим о применении этой технологии и о том что, собственно, в ней такого замечательного и полезного.
Необходимое пояснение. В названии присутствует слово «сервер» и речь в первой части статьи идёт о серверных функциях системы. Это может ввести вас в заблуждение и создать впечатление, что основным назначением системы является хостинг файлов и сайтов и раздача контента. Это не совсем так. Узким бутылочным горлышком в этой системе является быстродействие SD карты и заменить микроконтроллером настоящий веб-сервер конечно не удастся.
Смысл системы несколько в другом. Вместе с Arduino Mega Server вы получаете возможность удобного управления своим устройством при помощи веб-интерфейса и просто роскошного (в визуальном смысле) выведения результатов его работы при помощи всей мощи современных технологий (HTML5, CSS3, THREE.js и т.п.). Будь то система управления умным домом, теплицей, автоматом по продаже напитков, метеостанцией или чем угодно, на что у вас хватит фантазии.
Ещё одна интересная область применения системы это (интерактивное) самодокументирование. Например, вы находите в пыльной кладовке (своей или заказчика) микроконтроллер непонятно что и как делающий (дело было давно и вся документация утеряна). Всё, что вам нужно это зайти на его сайт и получить исчерпывающую информацию по подключениям, протоколам, окружению и т. п. Ведь у нас нет ограничений на объём хранимых файлов. Документация может быть интерактивной. Например, распиновка контроллера не просто нарисована на страничке, но и обновляется в реальном времени (статусы, потенциалы и т. п.). Сразу видно что и как работает и что и как не работает.
Что на борту, кроме сервера
Я много внимания уделил серверным функциям, но это только одна из частей системы. Кроме сервера Ардуино содержит код на все случаи жизни:
- измерение температуры
- обслуживание PIR-датчиков
- обслуживание контактных датчиков
- часы реального времени
- модуль контроля и измерения сетевого напряжения и тока на 13 каналов
- модуль работы со светодиодными лентами
- модуль определения доступности сетевых устройств
- модуль работы с SD картами памяти
- модуль приёма и отдачи команд по сети
- модули интеграции с системами домашней автоматизации
- и много прочих функций плюс возможность создания новых
Поддерживается модульная структура и выборочная компиляция модулей. Браузерная часть кода распознаёт наличие или отсутствие откомпилированного модуля и позволяет динамически его включать или отключать прямо с веб-странички.
Интеграция с MajorDoMo
Исторически так сложилось, что Arduino Mega Server (далее AMS) разрабатывался в связке и как часть системы домашней автоматизации на базе открытой платформы MajorDoMo и имеет встроенную «родную» поддержку этой платформы. Он может посылать статусы и данные для анализа и хранения «старшему брату» и принимать от него управляющие команды по сети.
Кроме того, в данный момент AMS работает в т. н. тандемном режиме, т. е. для части функций используются ресурсы сервера MajorDoMo. Но работа в связке для Мега Сервера непринципиальна, он может работать и полностью автономно.
Побочные технологии
В рамках проекта реализовано несколько интересных и уникальных технологий, например индикатор уровня загрузки «CPU» микроконтроллера. Это удобно тем, что сразу видно насколько загружен ваш контроллер и что он в данный момент делает. Не знаю насколько это уникально, но мне не удалось найти в сети ничего похожего, тем более в удобоваримом виде с красивой графикой и на веб-странице.
Создан электро-модуль, который мониторит сетевое напряжение и ещё 13 токовых каналов. Будучи установлен в электрощитке, позволяет прямо или косвенно отслеживать всю электроактивность в доме. Когда был включён и когда выключен тот или иной электроприбор, сколько он потребляет электричества и каков его вклад в размер счёта за электроэнергию. Также позволяет косвенным способом отслеживать наличие или отсутствие людей в доме.
Создан модуль визуализации и контроля формы сетевого напряжения и тока на любом из 13 каналов. Плюс добавлен сетевой осциллограф, когда Ардуино в реальном времени транслирует динамический сигнал (осциллограмму) на вашу веб-страничку. Что тоже не имеет аналогов, насколько мне известно.
Добавлен модуль «скринсейверов» для современных панелей отображения информации. Вы можете убрать всю техническую информацию с экрана и оставить только нужную на фоне красивой картинки. Получается нечто вроде картины в раме для большой или маленькой панели.
Ещё реализованы такие вещи как измеритель частоты напряжения электросети, который может использоваться для предупреждения о возможных в ближайшем будущем сбоях и, например, многофункциональный 3D индикатор состояния системы на 216 объектов / подсистем / функций, который вращается в шапке сайта. Его смысл в том, что вы одним взглядом можете оценить состояние сложной системы.
И т. д. и т. п. Технологий больше, чем может уместиться на эту страничку. И всё это работает на 8-битном микроконтроллере с 8 килобайтами памяти, что просто невероятно.
Перспективы
Перспективы неограничены. Вы можете реализовать с помощью этой технологии любые, даже самые фантастические проекты. Например, распределённый по контроллерам интеллект умного дома, динамическую перепрошивку контроллеров по сети (в зависимости от некоторых условий) и динамическую реконфигурацию умного дома на железном уровне, предоставление веб-интерфейса для «совсем плохих» Arduino Uno и т. д. и т. п. Не говоря уже об умных пивоварнях и сайтах каждого цветка в вашем доме с их личными блогами.
И для этого вам не понадобится ничего, кроме Arduino, Ethernet Shield, AMS, SD карты и вашей фантазии.
Коммерческие перспективы
Вы можете продавать свои устройства, просто положив всё необходимое в коробку и дописав прошивку AMS под свою задачу. Заказчик включает устройство и управляет им через полноценный веб-интерфейс и больше ничего не нужно. А если вы ещё предусмотрите подключение вашего устройства и датчиков без паяльника, то ещё больше расширите аудиторию своих потенциальных клиентов.
Как это сделать без паяльника? В этом вам поможет (самопровозглашённый) стандарт Open Home Automation Standard (OHAS) и датчики, подключаемые одним кликом, но это уже совсем другая история. Если это будет интересно — опишу здесь ещё пару «прорывных» технологий.
Статус проекта
Статус проекта — версия 0.1 альфа, всё работает, но всё нужно дорабатывать. Если у вас есть желание и соответствующая квалификация, то можете присоединиться к проекту и ускорить процесс разработки и получить ни с чем не сравнимый фан. А можете скачать исходный код и создать проект своей мечты.
Проект полностью открыт и не накладывает никаких ограничений на его использование. Вы можете свободно использовать его в любых, в том числе коммерческих целях, изменять код, дорабатывать, создавать собственные проекты на GitHub и т.д.
Сейчас доступна для закачки версия 0.1 alpha, это стартовый выпуск. Сейчас же готовится к выпуску версия 0.11, в которой исправлены ошибки и добавлены около 20 нововведений. Лучше, наверное, подождать и чуть позже закачать более свежую и продвинутую версию.
Ссылка на последнюю стабильную версию 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 и малинки и «ардуинки» и «лоранки» и всё, до чего у нас дотянутся руки.