Arduino nas storage

Принимаем данные из Arduino в NAS Synology

Привет, друзья.
Продолжаю строить умный дом под свое оборудование. После того, как мне удалось подключить Arduino к NAS Synology, нужно научить их общаться. Для начала попробуем читать из Arduino и записывать в БД. Сделаем это на примере проекта Погодной станции. К Arduino цепляю датчики из тех что сейчас есть. Это гигрометр и термометр DHT-21/AM2301, у него в отличие от DHT-11 хороший рабочий температурный диапазон до -40 градусов. Вторым подключаю датчик давления BMP180 (BMP085), он же второй источник температуры. Таким образом, можно установить барометр дома, а гигрометр DHT-21 установить за окном. Получим температуру снаружи и внутри, влажность и давление. Схем подключения их в интернете миллион, поэтому сразу показываю результат.

Быстро из стандартных примеров написал скетч для Arduino, который периодически считывает показания с датчиков и отправляет в UART.

В качестве протокола передачи данных принято, что каждое значение передается отдельной строкой, которая должна начинаться со слова DATA. Дальше через табуляцию следует уникальное название параметра. Я использую название датчика и букву измеряемого значения. Следом через tab само значение. Строки «START/STOP TRANSLATION» помогают отличить новые данные от старых.
Включаем на Synology протокол SSH. Подключаемся, например, при помощи PUTTY как root и пробуем.

Теперь нужно принять эти данные на стороне сервера. Думал изначально воспользоваться PHP. Однако на Synology по-умолчанию вебсервер работает в safemode. Это хорошо для безопасности, но ему закрыт прямой доступ к любым папкам и файлам. Функция exec не работает для стандартных программ linux, а значит нельзя запустить stty для настройки COM-порта и нет доступа к самому порту. Остается BASH, а точнее его урезанная версия ash, ведь на Synology используется BusyBox. Значит особо не разгуляешься. Можно написать и скомпилировать программу на СИ, но это слишком сложно — придется где-то разворачивать среду программирования на linux, ведь для Synology это слишком тяжелая задача. Остается Perl или Python. Я выбрал второй вариант просто потому, что давно хотел попробовать его.
Для начала устанавливаем в Synology пакеты с Python 3 и Python Module.

Пакет с модулями содержит модуль serial, который позволит выполнить чтение из /dev/ttyUSB0, но сделать это сможет только пользователь root.
Эти данные нужно куда-то складывать. Просто записывать в файл бесперспективно. Будем писать в БД. В Synology есть пакет MariaDB. Ставим его. И тут выясняется, что в стандартном наборе модулей Python нет модуля для работы с mysql. Нужно ставить самому. Для облегчения процедуры ставим pip.

После всех мучений, мы наконец-то можем написать программу на python, которая сможет прочитать и записать данные из Arduino в MySQL.

Запустить программу на выполнение в фоне, причем так, чтобы можно было разорвать соединение SSH и она продолжила работу можно так:

dsgena> nohup python ttytomysql.py &

Я же добавил в файл /etc/crontab строчку и перезапустил crond:

dsgena> cat /etc/crontab
#minute hour mday month wday who command
*/30 * * * * root ps|grep -v grep| grep ttytomy.py > /dev/null || /usr/bin/python /volume1/web/arduino/ttytomy.py > /dev/null &
dsgena> synoservicecfg —restart crond

Теперь каждые 30 мин Synology сам проверяет жив ли процесс и при необходимости запускает его.

Собственно осталось лишь написать красивое отображение данных из БД в виде таблицы или графика. Я использовал библиотеку pChart на php. В результате получилась такая картинка.

Сегодня ночью обещали первый день зимы. Видно что днем давление быстро падало — приближался фронт. А с 23 часов резко поднялась влажность — это за окном пошел снег. Сегодня синоптики не подвели.
Осталось доделать наш анемометр и дополнить данные до полноценной метеостанции. Тогда можно будет уже определять какой фронт идет к нам — теплый или холодный. И не стыдно будет транслировать эти данные в проекте narodmon.ru.

Источник

Arduino Mega Server

Да, это снова Ардуино, но не спешите закрывать страничку, на этот раз вас ждёт нечто действительно новое и интересное. В основном в этой статье речь пойдёт о микроконтроллерных платах 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) и датчики, подключаемые одним кликом, но это уже совсем другая история. Если это будет интересно — опишу здесь ещё пару «прорывных» технологий.

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

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

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

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

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

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

Дополнение. Открыт канал на Youtube и вот промо ролик Arduino Mega Server, который демонстрирует работу с реальной системой.

Источник

Adblock
detector