image

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

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

В первой статье о Arduino Mega Server я подробно описал проект, рассказал о технологии и обрисовал примерные перспективы развития и применения AMS, в этой статье я расскажу о том, как удалось добиться автономной работы сервера и какие возможности уже открыты перед нами.

Битва за автономку


Автономность работы это принципиальный момент. Если вы «привязаны» к стороннему серверу, то это кардинальным образом ограничивает возможности применения ваших проектов. Сами посудите, чтобы работал маленький контроллер, ему нужна поддержка в виде инсталляции и настройки большого сервера MajorDoMo. Поэтому все силы были брошены на решение этой проблемы, но… не тут то было. На пути вывода AMS в автономное плавание встало множество неожиданных и труднопреодолимых преград.

Первая преграда это низкая скорость чтения файлов с microSD карты. В первой статье я упомянул о том, что бутылочным горлышком в этой системе является скорость работы карты памяти, так вот, это оказалось не совсем так. Проблема не в microSD карте, а в алгоритме работы функции

File.read();


Она осуществляет побайтовое чтение из файла и тем самым очень тормозит весь процесс. Средняя скорость чтения в этом режиме составляет 25 килобайт в секунду. Выходом оказался переход на блочное чтение с размером буфера от 32 до 256 байт. Оптимальным по соотношению ресурсы / производительность был выбран размер 128 байт и это подняло скорость чтения с карты памяти в 10 (!) раз, примерно до 260 килобайт в секунду. И это, как вы сами понимаете, уже совсем другой коленкор. Скорость чтения в 25 килобайт в секунду просто ставила крест на всём проекте потому, что с такой скоростью в принципе невозможно передавать файлы за приемлемое время.

File.read(buff, MAX_BUFFER_SIZE);


Первое препятствие мы благополучно преодолели, но когда я замерил скорость отдачи файлов в сеть, то оказался в глубоком шоке: 4,1 килобайта в секунду. То есть все наши старания по ускорению чтения данных с диска разбивались о стену черепашьей скорости отдачи этих данных в сеть.

client.write(data);


Вы уже, наверное, догадались в чём проблема и как её можно решить. Правильно, заменить побайтовую выдачу в сеть на блочную. Что и было сделано и дало прирост скорости в 14 (!) раз примерно до 57 килобайт в секунду. И вот тут наш сервер стал похож на настоящий, он наконец-то стал работать, а не ползать с черепашьей скоростью. Кстати, версия 0.11 работает на скорости 4,1 килобайта в секунду и спасает её только тандемный режим.

client.write(buff, size);


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

Уменьшение задержки ответов сервера, в сочетании с поднятой до нормального уровня скорости чтения файлов с карты памяти и отдачи данных в сеть, сделали Arduino Mega Server «серьёзной» и по-настоящему работоспособной системой.

Железная стена


И тут мы упёрлись в обстоятельства непреодолимой силы под названием чип W5100 (я в курсе про более продвинутые варианты, но это несколько другая история). Его четыре аппаратных сокета ставят очень жёсткие ограничения на сетевое взаимодействие с ним. Нельзя просто так взять и загрузить через него веб-страничку с десятком линков на CSS, JavaScript и HTML файлы. Каждая ссылка порождает новый запрос и новое соединение и… когда их становится больше четырёх, то начинаются проблемы с задержкой ответа. И чтобы всё это заработало, нужно организовать сетевое взаимодействие с учётом этой особенности чипа W5100.

image

Для решения этой проблемы было введено некое подобие серверного языка программирования (макросы), которое позволяет собирать странички на стороне сервера и, что самое главное, позволяет манипулировать сборкой страниц из скетчей на Arduino и с самих загружаемых страничек. Это даёт полную свободу и вы становитесь подобны магу или волшебнику и можете проделывать с выводимыми страничками всё, что угодно.

image

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

И происходит всё это на восьмибитном микроконтроллере Arduino.

Красота


Поскольку мы получили в свои руки столь мощный инструмент, как AMS Matrix Engine, грех было бы им не воспользоваться и в качестве демонстрации были созданы три дополнительных сайта на которые можно переключаться одним кликом прямо на ходу (даже перезагрузку странички AMS заботливо сделает сам). Кстати, можно было сделать не три, а тридцать три сайта или сто тридцать три сайта (визуально — топологически — функционального представления информации) — ваша Arduino с лёгкостью будет их обслуживать (не одновременно, конечно, но это нам и не нужно).

image

По умолчанию (гик моде, вам понравится)

image

Домашний (спокойный дизайн и «спокойные» функции)

image

Модерн («модерновый» дизайн и функциональность по вкусу)

image

Амперка (брендирование под вашу компанию, Интернет-магазин, школу или лабораторию)

image

Поясню, потому, что не все могли понять то, что было написано выше. У вас есть мощный микроконтроллер и десятками пинов и обслуживающий больше полусотни датчиков. Среди них есть температурные, токовые, охранные и прочие. Каждая группа датчиков образует логический кластер, например, охрана, климат, здоровье вашего любимого кактуса и т. д. Так вот, под каждый логический кластер AMS Matrix Engine позволяет создать отдельный сайт с отдельным дизайном и функционалом. Пользователю даже в голову не придёт, что всё это богатство работает на «дохлом» и невзрачном микроконтроллере который пылится в углу.

Перспективы использования


Ваши проекты. Берёте контроллер, заливаете на него прошивку с AMS и вставляете microSD карту памяти с файлами из дистрибутива. Это всё. Система запустится и вы можете с ней работать. Если вас не устраивает функциональность, то вы просто изменяете и дописываете всё, что вам нужно.

Продавцы Ардуино-железа. Вместо того, чтобы продавать голое железо, вы можете продавать готовые конфигурации и (коробочные) решения под задачи клиентов. Выгода очевидна — снижается порог вхождения и расширяется рынок. Клиент покупает набор под свою задачу и пользуется им. Для этого ему не нужен ни паяльник, ни знание программирования: он работает с оборудованием, как с обычным сайтом. Конфигурация собирается как из кубиков Лего без паяльника.

image

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

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

Школы и обучающие центры. На базе AMS можно проводить обучение всему спектру современных технологий: микроконтроллеры, робототехника, Умный Дом, программирование, веб-технологии, сайтостроение, дизайн интерфейсов и т. д. и т. п.

Альтернативы


Я часто слышу, что легче взять «Малинку» с более продвинутыми сетевыми возможностями, но как быть с чисто микроконтроллерными функциями? У Меги 16 аналоговых пинов и 54 цифровых (не считая прочих достоинств). Как я (или вы) подключу к «Малинке» блок контроля напряжения и тока на 14 каналов? И куда мне подключать на «Малинке» десятки датчиков и исполнительных устройств? А здесь мы получаем мощный микроконтроллер и роскошное управление по сети в одном флаконе.

Есть ли недостатки?


Условным недостатком технологии, можно назвать высокий порог вхождения (не для использования, здесь как раз всё в порядке, а для самостоятельного изменения и дополнения). Нужно знать множество современных технологий и быть достаточно квалифицированным пользователем. А так же ранняя стадия самого проекта и отсутствие качественной документации.

Но если вас не пугают подобные трудности, то лучшего тренажёра для освоения всего спектра современных технологий вам не найти.

Последняя актуальная версия


Последняя на данный момент версия 0.12 доступна для загрузки на форуме сайта MajorDoMo. Там же вы можете найти инструкцию по её установке и настройке и задать возникшие у вас вопросы. Для интересующихся: типичное время загрузки странички в одиночном режиме — четыре секунды, иногда чуть меньше, иногда чуть больше, но в среднем около четырёх секунд. В тандемном режиме — примерно в два раза быстрее. Простор для оптимизации огромный, но в целом уже вполне можно пользоваться.

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


  1. Meklon
    22.08.2015 21:25
    +8

    Почему все-таки не стандартный github? Проект интереснейший.


    1. smart_alex
      22.08.2015 21:57

      Даже не знаю что сказать. Я ничего не имею против github, мне просто удобно работать так, как я привык. С другой стороны, пользователю нет большой разницы скачивать мастер с github или зип с форума. А разработчик я один, мне только помогают отвечающие на мои вопросы.

      Ну и конечно никто не мешает взять дистрибутив и начать что-то делать с ним на github.


      1. radiolok
        23.08.2015 00:18
        +7

        И все же:
        Официальный репозиторий на Github, пусть даже и формальный соберет форки других разработчиков в Одном Месте. Так и никто не потеряется и с пулл-реквестами от форков основной репозиторий будет развиваться Общими усилиями. Если на Github будет десяток не связанных между собой дистрибутивов — толку от этого для сообщества — нуль.
        Да даже если не считать форков вы как Один Единственный разработчик проекта предоставите форумчанам Удобный инструмент для ответа на ваши же вопросы. Про плюсы использования систем контроля версий в проектах я даже не упоминаю.

        А за проект огромный респект. Но все же давайте развивать его вместе. У вас много планов а у сообщества много энергии.


        1. smart_alex
          23.08.2015 00:40

          О! Вы то мне и нужны. Судя по вашим публикациям, вы хорошо разбираетесь в датчиках и измерениях тока и напряжения на контроллерах. В проекте используется POWER MONITOR smartliving.ru/forum/viewtopic.php?f=8&t=73 и у него есть проблема с точностью измерений. Было бы неплохо если бы вы посмотрели скетч и дали бы свои рекомендации. Можно на форуме или по электронной почте mega_server@mail.ru


          1. radiolok
            23.08.2015 02:36
            +1

            Если по схеме, то миниатюрный трансформатор напряжения на выходе часто имеет что-то совсем не похожее на синусоиду. Особенно именно миниатюрные, которые при работе сильно греются (и это их номинальный режим работы). Они в жутком насыщении работают, и сильно искажают синусоиду. Очень сильно. Я намерял THD=10-15%, но Zero-Cross Detection на них работал, и они этого было достаточно.
            Трансформаторы из советских ламповых телевизоров из кадровой развертки (ТВК-110) или согласующий звуковой трансформатор (ТВЗ) на эту роль подходят если не идеально то намного лучше. Ну и конечно же все зеленки типа ТП, ТПП и ТН. Хотя габариты страдают, да.

            Далее, RMS наобум не измеряется. Нужна привязка ко времени. И за единицу времени делать строго определенное количество семплов. Рекомендую почитать док, там хорошо расписаны алгоритмы.
            Implementing An Electronic Watt-Hour Meter With MSP430FE42x(A)/FE42x2
            Этот контроллер используется в однофазных электросчетчиках меркурий 200 серии.
            Если вкратце, то он делает 4096 семплов за 1с и считает все остальные показатели. Он правда многое делает сам, встроенным в него спец. модулем.
            Формулы можно подглядеть в трехфазном чипе, тут все делается вручную в прерываниях.
            Implementation of a Three-Phase Electronic Watt-Hour Meter Using the MSP430F677x(A)


            А ваш счетч просто молотит 300 циклов неизвестно сколько времени и неизвестно сколько точек. Нужно организовать сбор данных через прерывания — по таймеру настроить запуск АЦП и в прерывании АЦП делать расчеты. Так можно избавиться от архитектурной ошибки. Погрешность измерений малых величин все равно не избежать.
            Из-за архитектурных изменений хабра мой цикл статей про измерение электроэнергии несколько затянулся, но когда-нибудь я его закончу, но точно в этом году :)

            Может ну его TureRMS? У 10-разрядного АЦП динамического диапазона не хватает для нормальной точности.
            Если достаточно рассчитать напряжение, ток и мощность, то можно ограничиться средне-выпрямленными значениями напряжения и тока. Для этого необходимо установить выпрямители на датчики и использовать другие калибровочные коэффициенты. Тогда и скетч станет проще, да и точность измерений постоянного уровня сигнала будет выше, чем периодического.


            1. smart_alex
              23.08.2015 07:21

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


            1. Raegdan
              23.08.2015 18:18

              ТВЗ вообще очень хорошая вещь в хозяйстве радиолюбителя. Берём его, горсть старых добрых Д226, пару электролитов и потенциометр из того же телевизора — за 10 минут получаем блок питания, которому хоть снег, хоть зной, хоть пьяный электрик. ТВК хуже, они греются люто и вторичка слабая. Круче только трансформатор «кирпич» (правильное название, увы, не знаю, но кто хоть раз разбирал советский телевизор — тот знает). Можно и слаботочную электронику питать (причём у него большой выбор напряжений, даже без учёта соединения обмоток), и заряжать мотоциклетные аккумы на 6 и 12 В, ставя мощные обмотки на 6.3 В последовательно или параллельно, и выпрямляя на тех же 226-х. Можно использовать как разделительный — есть вторички и на ~200 В. В принципе, даже наверное можно ИБП на нем собрать, хотя этого не делал. Ну и конечно, можно использовать как гирю :)


              1. radiolok
                24.08.2015 01:19
                +1

                Эти кирпичи называются ТС-170 для чб телевизоров и ТС-270 для цветных. С шикарностью согласен, но сколько я их в детстве разобрал просто так — плакать хочется.


  1. Logonoff
    22.08.2015 22:43

    Простите за возможный оффтоп, а может кто-нибудь подсказать проверенный китайский магазин (например на aliexpress) который шлет аналоги Arduino, макетки, периферию и т.д.? Спрашиваю, потому что начитался недавних статей про поддельные/глючащие радиокомпоненты из Китая.


    1. svd71
      22.08.2015 22:55

      Проверенных на все 100% нет нигде. Следуя этим статьям, китайцы закупают все, включая брак, отказываясь от проверки. Отсюда следует, что глюки в отдельных регистрахмогут присуствовать.

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


    1. svosin
      22.08.2015 23:36

      Я свои ардуины брал у Baite (betemcu.cn) на aliexpress. Все в порядке, но вот конвертеры usb/serial они ставят не ftdi, а ch340.


      1. shpaker
        23.08.2015 07:45

        … что по сути не является недостатком


    1. AlNinyo
      23.08.2015 01:01
      +2

      Периодически покупаю у продавцов с максимальным количеством заказов, хорошими отзывами и не очень высокой ценой. Пока с браком не сталкивался.
      На днях заказали всякого подобного железа для открывающегося центра почти на 100к р. Как всё придёт — смогу порекомендовать/поругать продавцов, у которых всё закупали, если интересно ещё будет.


    1. 15432
      23.08.2015 01:11
      +1

      Я брал на fasttech.com и gearbest.com


  1. KaaPex
    24.08.2015 10:11

    Скоро ремонт буду делать в новостройке, стоит ли использовать ваше решение? Планирую в основном установить датчики для снятия показаний воды и электричества, а так же управление освещением, возможно еще датчики температуры в комнатах и как то подключить кондиционер. Либо более готовое решение посоветуете может?


    1. smart_alex
      24.08.2015 18:01

      Здесь можете решить только вы. Если вы не продвинутый техно-гик, то лучше конечно остановиться на более простом и проверенном решении.


    1. Vendict
      25.08.2015 00:17

      Разрешите, совет со стороны. Если есть задумки что-то автоматизировать, позаботьтесь о передаче информации между комнатами в одно место. Проведите достаточное количество проводов в «серверную» из всех комнат. А там уже по ходу дела разберётесь, какой функционал на основе этих проводов реализовывать. Или если ремонт сразу, то провода сразу с датчиками на окна(температура, влажность: внутри снаружи), на те же окна 2-3 силовых пары (жалюзи, м.б. в дальнейшем приточный клапан), на трубы, пару проводов для датчика протечки около труб, пару над плитой для датчика газа, по паре на вентиляции для датчиков дыма, пару на входную дверь для геркона, тройками(!) в несколько комнат над дверями для датчиков движения (они требуют три провода), пару снаружи входной двери для ключа (спорно, через эту пару высоковольтным разрядом можно вырубить всё разом, хотя туда можно отдельный МК и средство радиосвязи с основной системой), пачку проводов около входа, чтобы планшет повесить с управлением и так далее, на сколько фантазии хватает. Хотя бы провода без датчиков с запасом, потом уже как начнёте простейшее реализовывать — затянет, разберётесь.
      А по большому счёту — реализовывать весь функционал на одном МК с возможностями Arduino — ей сил и места для программы не хватит. Особенно если туда же воткнуть Web-сервер. Надо несколько компоновать.


    1. Vendict
      25.08.2015 01:12

      Ах да, кондиционер — пару для IR-светодиода около него, чтобы светодиод смотрел на приёмник пульта. А потом уже можно реализовать управление через МК. Вот через такой проект, например: Arduino-IRremote.


      1. KaaPex
        25.08.2015 08:44

        Спасибо, принял к сведению.


    1. alsakharov
      26.08.2015 22:55

      Бывает проект ради процесса, а бывает — ради результата.
      Мне представляется, что этот проект — он пока ради процесса.
      Потому что результат можно достичь существенно более быстрым способом. Но способ этот будет заметно более дорогой.
      Для управления инженерными системами (свет, климат, шторы-окна) это либо стандартный KNX, либо проприетарные решения типа HDL Bus и т.д.
      Для аудио-видео и реализации сложной логики к этим системам часто добавляют еще одну систему управления. Типа Crestron, Savant и т.д.
      В любом случае, попробуйте представить, что вам скажут домашние, когда вы будете отлаживать вашу систему (это быстро не делается, если только вы не строите такие системы на постоянной основе), а они просто свет захотят включить или телевизор посмотреть.


      1. KaaPex
        27.08.2015 11:17

        А что вы думаете насчет openHAB?


        1. svd71
          27.08.2015 12:36

          openHAB — это программное решение, некоторый концепт, которому можно придерживаться. И на чем реализован сервер не играет в этой концепции никакой роли.

          Подобные хардверные решения приемлемы в основном к условиям «максимально приближенным» к неидеальным — отказы из-за окисленных контактов в следстии действия климатических перепадов, возможность приведения в ишодное состояние в милисекунды нажатием одной кнопки и некоторые другие штуки, которые в «домаших» условиях мало встречаются.

          Основные элементы автоматизации — это датчики и исполнительные устройства. Дело же сервера собирать информацию и транслировать команды илполнительным. А для домашнего сервера еще и куча других желательных плюшек — уж лучше использовать малину: и медиасервер на ней запустить, и домаший файлсервер организовать, и камеры без танцев с бубном подцепить, и веб-сервер поднять для удобного пользовательского интерфейса и понятныму даже умственно отсталым программированием. Ну а все соединение идет уже «из коробки» — достаточно GPIO, основные интерфейсы уже реализованы, только цепляй.

          Но это мое мнение. И к политике редакции или автора не имеет никакого отношения. И я не претендую, что мои мысли являются «единственными истинными» — каждый сходит с ума своими методами и удобными только ему способами. Предложенный метод в рамках концепта может существовать.


        1. alsakharov
          28.08.2015 00:22

          Примерно то же самое.


  1. Sterpa
    24.08.2015 18:49

    Вы планируете отвязать библиотеку от конкретного чипа w5100? С этим чипом уже мало кто работает, а аналогов много и они все очень разные.
    Вообще интересно было бы все тоже самое, но с объектом Stream на произвольном порту Serial. Ведь библиотека Ethernet наследует класс Stream.

    А то получается, чтобы применить весь ваш феерический труд надо обзавестись w5100…


    1. smart_alex
      24.08.2015 19:03

      Под «отвязкой» имеется ввиду работа без помощи сервера MajorDoMo.