![image](https://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](https://habrastorage.org/files/d4d/271/8f1/d4d2718f151d43dd9fad3b20cf42e39f.png)
Если всё так просто, то почему это не было сделано раньше? Вот это действительно вопрос. Моя версия — стереотипность мышления. Вам же сказали, что это 8-битный контроллер, какой ещё THREE.js? Какой хостинг? О чём вы вообще говорите? Справедливости ради нужно сказать, что все части пазла уже существовали в природе, но существовали они в совершенно непотребном виде — либо в виде абстрактного сервера, полностью оторванного от реальности, либо в виде Ajax примеров, но опять же только с двумя абстрактными кнопками, с которыми непонятно, что вообще нужно делать.
Область применения
Теперь давайте поговорим о применении этой технологии и о том что, собственно, в ней такого замечательного и полезного.
Необходимое пояснение. В названии присутствует слово «сервер» и речь в первой части статьи идёт о серверных функциях системы. Это может ввести вас в заблуждение и создать впечатление, что основным назначением системы является хостинг файлов и сайтов и раздача контента. Это не совсем так. Узким бутылочным горлышком в этой системе является быстродействие SD карты и заменить микроконтроллером настоящий веб-сервер конечно не удастся.
Смысл системы несколько в другом. Вместе с Arduino Mega Server вы получаете возможность удобного управления своим устройством при помощи веб-интерфейса и просто роскошного (в визуальном смысле) выведения результатов его работы при помощи всей мощи современных технологий (HTML5, CSS3, THREE.js и т.п.). Будь то система управления умным домом, теплицей, автоматом по продаже напитков, метеостанцией или чем угодно, на что у вас хватит фантазии.
![image](https://habrastorage.org/files/299/432/388/299432388fb04f408a9503b264d437c5.png)
Ещё одна интересная область применения системы это (интерактивное) самодокументирование. Например, вы находите в пыльной кладовке (своей или заказчика) микроконтроллер непонятно что и как делающий (дело было давно и вся документация утеряна). Всё, что вам нужно это зайти на его сайт и получить исчерпывающую информацию по подключениям, протоколам, окружению и т. п. Ведь у нас нет ограничений на объём хранимых файлов. Документация может быть интерактивной. Например, распиновка контроллера не просто нарисована на страничке, но и обновляется в реальном времени (статусы, потенциалы и т. п.). Сразу видно что и как работает и что и как не работает.
![image](https://habrastorage.org/files/47b/cc9/eef/47bcc9eef2d04ed2a450b47376a052dc.png)
Что на борту, кроме сервера
Я много внимания уделил серверным функциям, но это только одна из частей системы. Кроме сервера Ардуино содержит код на все случаи жизни:
- измерение температуры
- обслуживание PIR-датчиков
- обслуживание контактных датчиков
- часы реального времени
- модуль контроля и измерения сетевого напряжения и тока на 13 каналов
- модуль работы со светодиодными лентами
- модуль определения доступности сетевых устройств
- модуль работы с SD картами памяти
- модуль приёма и отдачи команд по сети
- модули интеграции с системами домашней автоматизации
- и много прочих функций плюс возможность создания новых
Поддерживается модульная структура и выборочная компиляция модулей. Браузерная часть кода распознаёт наличие или отсутствие откомпилированного модуля и позволяет динамически его включать или отключать прямо с веб-странички.
![image](https://habrastorage.org/files/9f8/a02/4a8/9f8a024a870e4817a19ecfca3acef463.png)
Интеграция с MajorDoMo
Исторически так сложилось, что Arduino Mega Server (далее AMS) разрабатывался в связке и как часть системы домашней автоматизации на базе открытой платформы MajorDoMo и имеет встроенную «родную» поддержку этой платформы. Он может посылать статусы и данные для анализа и хранения «старшему брату» и принимать от него управляющие команды по сети.
Кроме того, в данный момент AMS работает в т. н. тандемном режиме, т. е. для части функций используются ресурсы сервера MajorDoMo. Но работа в связке для Мега Сервера непринципиальна, он может работать и полностью автономно.
![image](https://habrastorage.org/files/068/524/968/068524968f7f429385b0a99cf7d4c716.jpg)
Побочные технологии
В рамках проекта реализовано несколько интересных и уникальных технологий, например индикатор уровня загрузки «CPU» микроконтроллера. Это удобно тем, что сразу видно насколько загружен ваш контроллер и что он в данный момент делает. Не знаю насколько это уникально, но мне не удалось найти в сети ничего похожего, тем более в удобоваримом виде с красивой графикой и на веб-странице.
![image](https://habrastorage.org/files/218/79a/fbf/21879afbf95e43fba1a14acfd1833d16.png)
Создан электро-модуль, который мониторит сетевое напряжение и ещё 13 токовых каналов. Будучи установлен в электрощитке, позволяет прямо или косвенно отслеживать всю электроактивность в доме. Когда был включён и когда выключен тот или иной электроприбор, сколько он потребляет электричества и каков его вклад в размер счёта за электроэнергию. Также позволяет косвенным способом отслеживать наличие или отсутствие людей в доме.
![image](https://habrastorage.org/files/2ca/48b/006/2ca48b0069f94462bf6c28c7f79e719d.png)
Создан модуль визуализации и контроля формы сетевого напряжения и тока на любом из 13 каналов. Плюс добавлен сетевой осциллограф, когда Ардуино в реальном времени транслирует динамический сигнал (осциллограмму) на вашу веб-страничку. Что тоже не имеет аналогов, насколько мне известно.
![image](https://habrastorage.org/files/c57/ccb/2b5/c57ccb2b59ab418f835fce8839b9bfbe.png)
Добавлен модуль «скринсейверов» для современных панелей отображения информации. Вы можете убрать всю техническую информацию с экрана и оставить только нужную на фоне красивой картинки. Получается нечто вроде картины в раме для большой или маленькой панели.
![image](https://habrastorage.org/files/a8b/3d5/446/a8b3d5446bbd4545896702c2b2068e4c.png)
Ещё реализованы такие вещи как измеритель частоты напряжения электросети, который может использоваться для предупреждения о возможных в ближайшем будущем сбоях и, например, многофункциональный 3D индикатор состояния системы на 216 объектов / подсистем / функций, который вращается в шапке сайта. Его смысл в том, что вы одним взглядом можете оценить состояние сложной системы.
И т. д. и т. п. Технологий больше, чем может уместиться на эту страничку. И всё это работает на 8-битном микроконтроллере с 8 килобайтами памяти, что просто невероятно.
![image](https://habrastorage.org/files/0a1/4d5/8f0/0a14d58f08544995a8ac21eace3eea0b.png)
Перспективы
Перспективы неограничены. Вы можете реализовать с помощью этой технологии любые, даже самые фантастические проекты. Например, распределённый по контроллерам интеллект умного дома, динамическую перепрошивку контроллеров по сети (в зависимости от некоторых условий) и динамическую реконфигурацию умного дома на железном уровне, предоставление веб-интерфейса для «совсем плохих» Arduino Uno и т. д. и т. п. Не говоря уже об умных пивоварнях и сайтах каждого цветка в вашем доме с их личными блогами.
И для этого вам не понадобится ничего, кроме Arduino, Ethernet Shield, AMS, SD карты и вашей фантазии.
![image](https://habrastorage.org/files/871/d3f/801/871d3f801c5c4fd589eb952c8fa76561.png)
Коммерческие перспективы
Вы можете продавать свои устройства, просто положив всё необходимое в коробку и дописав прошивку AMS под свою задачу. Заказчик включает устройство и управляет им через полноценный веб-интерфейс и больше ничего не нужно. А если вы ещё предусмотрите подключение вашего устройства и датчиков без паяльника, то ещё больше расширите аудиторию своих потенциальных клиентов.
Как это сделать без паяльника? В этом вам поможет (самопровозглашённый) стандарт Open Home Automation Standard (OHAS) и датчики, подключаемые одним кликом, но это уже совсем другая история. Если это будет интересно — опишу здесь ещё пару «прорывных» технологий.
Статус проекта
Статус проекта — альфа версия, всё работает, но всё нужно дорабатывать. Если у вас есть желание и соответствующая квалификация, то можете присоединиться к проекту и ускорить процесс разработки и получить ни с чем не сравнимый фан. А можете скачать исходный код и создать проект своей мечты.
Проект полностью открыт и не накладывает никаких ограничений на его использование. Вы можете свободно использовать его в любых, в том числе коммерческих целях, изменять код, дорабатывать, создавать собственные проекты на GitHub и т. д.
![image](https://habrastorage.org/files/1dc/4ee/2cb/1dc4ee2cb816471db447f0f5272f2a7b.jpg)
Загрузить последнюю версию вы можете на официальном сайте проекта. Если у вас возникли вопросы, то вы можете задать их на форуме. На форуме есть также инструкции по установке и настройке AMS.
Друзья! Забыл упомянуть ещё об одной, едва ли не самой важной части проекта. Это обучающая функция. Если вы начнёте работать с проектом и изменять код под свои задачи, то вы очень быстро на практике освоите множество современных технологий это HTML, CSS, JavaScript, межбраузерное взаимодействие, отладка кода в браузере, программирование для Ардуино, Processing и множество других.
И последнее. Проект буквально нашпигован идеями и эксклюзивом. Вы можете просто брать нужные куски кода для ваших собственных проектов, дополнять и улучшать их.
Дополнение. Открыт канал на Youtube и вот промо ролик Arduino Mega Server, который демонстрирует работу с реальной системой.