×Закрыть

Как мы запустили свой pet-проект: первый успех

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

Этот пост — рассказ о нашем домашнем проекте. Мы создавали его параллельно с основной работой, буквально на коленках, а через 2 месяца успешно запустили на кикстартере.

Идея

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

Но вот, на одной из офисных пьянок (привет, когнианс) я разговорился с дизайнером Пашей. Оказалось, что дизайнеры — тоже пытливые люди, и тоже не прочь побаловаться ардуинками. Паша предложил очень заманчивую идею: а что, если создать проект, который соединит ардуину с приложением в телефоне? Хм, а что, не плохо? Мое сознание сразу же нарисовало будущее, в котором это приложение бьет топ за топом в каждой из стран. В общем, идея мне понравилась. Она не была новой — в интернете то и дело проскакивали новости про некие pet-проекты отдельных людей, которые сами для себя писали сервачки, и через них по http управляли ардуиной, но каких-то готовых жизнеспособных решений на тот момент не было.

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

Несколько десятков вечеров после работы, немножко выходных — и первый прототип был готов. Трудно описать то чувcтво радости, которое я испытал, когда смог зажечь диод с помощью своего телефона. Тем более, что это было так просто — установить приложение, зааплоадить код на ардуину, подключить библиотеку — и готово!

Но, как это часто бывает, по достижении цели энтузиазм пропал. Стало понятно, что сделать качественное приложение, сервер и библиотеки займет немало времени (около трех месяцев фултайма для 4-х разработчиков). Тем не менее было жалко выбрасывать наработки и ни с кем не делиться. И у нас возникла идея: а почему бы не попробовать собрать деньги на кикстартере? Хм, а ведь действительно. Наверняка найдется немало ардуинщиков, которые решали такую же проблему, что и мы. И почти наверняка они будут не против поверить в наш проект.

Сказано — сделано. Спустя полгода мы запустились. На текущий момент компания уже закончилась и собрала уже больше 490% от нашей первоначальной цели и 2300 бэкеров, что даже для нас оказалось неожиданностью (самый топовый проект собрал 62000 бэкеров, а учитывая нишевость продукта, это очень много).

Да, сумма, конечно же, не космическая. Ее едва ли хватит чтобы отбить затраты на разаработку. Но... Это ведь только начало.

Технические детали

Ну, и немножко технических подробностей (это же ДОУ =)).

Библиотеки для ардуины, а потом и для остальных железок пишутся на С++ и будут полностью открыты. Сейчас мы оттачиваем их дизайн и архитектуру для быстрой интеграции с разными железками. Основной вызов тут в слабом железе некоторых микроконтроллеров, в частности если говорить о некоторых Arduino, то это 2кб оперативки и ~27кб флеш памяти.

Сервер изначально будет open-source. Тут мы преследуем сразу 3 цели :
— снизить нагрузку на наши сервера,
— получить отзывы/помощь от сообщества,
— обеспечить безопасность системы для тех, кому это критично важно.

Сервер написан на Java с использованием netty фреймворка на tcp сокетах. Бинарный протокол пока свой. Но с большой вероятностью мы переключимся на MQTT, если хватит времени. Я рассчитываю держать на нем около 10к активных соединений и около 5 сообщений в сек от одного соединения, то есть около 50к рек/cек.

К счастью, первые нагрузочные тесты показали очень хорошие результаты. Высокопроизводительный сервер — тоже один из больших вызовов для нас, так как мы планируем предоставлять доступ к сервису на бесплатной основе (с некими лимитами, конечно же). Так что постараемся выжать возможный максимум.

Ну, и самая главная фишка — мобильные приложения. Пока мы разрабатываем клиенты только под Android и iOS. Как это ни странно, но в мире Internet of Things огромное количество сервисов и клаудов, которые собирают данные с сенсоров и предоставляют интерфейс для их отображения, но почему-то напрочь отсутствуют мобильные приложения для этих целей. Упор делаем на максимальную простоту использования и удобный интерфейс. В идеале пользователь должен связать железку с мобильным приложением меньше чем за несколько минут.

Я уверен, что наш проект много кого заинтересует. Подробнее можно глянуть тут.

P. S. Я написал этот пост не для пиара, а для того, чтобы в эти нелегкие дни вселить оптимизм и уверенность в тех, кто что-то пробует, делает и не сдается. И удачи в ваших начинаниях!

LinkedIn

60 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Чому такого матеріалу так мало? Невже ніхто нічим не займається, чи немає бажання про це розповісти іншим?

Вот как раз на днях опубликуем продолжение этой истории

Дмитрий, хорошая статья. Спасибо. Можно было бы у вас поинтересоваться по некоторым деталям изложенным в данном посте (в соц сетях или в переписке по скайпу)?

Позвольте вставить свои 5 копеек с точки зрения человека, немного знакомого с микроконтроллерами. Управление по Ethernet это здорово, но Вы не думали расширить функционал дополнением функций управления по UART (а заодно SPI тоже)? Это простые интерфейсы, которые есть в любом микроконтроллере (в той же AVRке, которая Arduino), и с его помощью можно подключать множество различных дополнительных модулей к микроконтроллеру (я имею ввиду модули bluetooth, GPRS и т.п.) На мой взгляд, в этом случае можно захватить еще и нишу разработчиков встраиваемых систем, которые далеки от C#, Java и т.п., но хотели бы управлять своей поделкой/разработкой со смартфона. К тому же очень часто внедрить Ethernet в свое устройство (не Arduino) технически непросто, нужно обладать навыками и знаниями. А вот с UART очень просто — подключил 2 провода и работай.
Я приведу пример из своего хобби проекта. Не посчитайте за рекламу, но именно о таком функционале я думал еще год назад, когда делал все это (потом стало не хватать времени, и пока отложил). Проект — самодельный робот для настольного тенниса (посмотреть можно здесь www.youtube.com/...strr2008/videos ) В настоящее время управляется с пульта от телевизора (ИК-пульт). Но в яркий солнечный день начинаются проблемы из-за засветки, нужно клацать пультом пока команда пройдет (а в это время робот тебя обстреливает мячами :-) ). Есть идея сделать управление со смартфона по bluetooth. Для этого можно поставить на плату bluetooth модуль (6-7$), который будет конвертировать получаемые команды в UART и слать в микроконтроллер. Но если с технической частью (железо) мне все ясно, то написание под андроид я пока еще не освоил (хотя иду к этому). Как мне кажется, в таких случаях Ваша разработка могла бы быть востребована.

но Вы не думали расширить функционал дополнением функций управления по UART (а заодно SPI тоже
Да конечно, UART уже сделан. SPI в процессе.
Есть идея сделать управление со смартфона по bluetooth.
Это тоже в todo списке (это был самый частый запрос от пользователей на кике).

Здравствуйте,
что именно Вас интересует с андроидом?
Конкретно сейчас занимаюсь коннектом своей ардуины к андроиду через bluetooth, могу потом выложить что-то на гитхаб.

Но если с технической частью (железо) мне все ясно
Хех, а мне как раз все предельно ясно с андроидом, но вот так туго идет железо)
Конкретно сейчас занимаюсь коннектом своей ардуины к андроиду через bluetooth, могу потом выложить что-то на гитхаб.

Вы это для себя делаете или коммерческий проект?

Если вопрос адресован мне — то а андроидом я пока на Вы. Сейчас учусь на втором образовании в ХНУРЭ, вот-вот начнется курс по андроиду. После него планирую попробовать связать железо и смартфон.
В программировании железа приходится использовать процедурный язык программирования, там нет ООП (возможно есть в каких то экзотических IDE, но я с таким не работал), это фактически работа на низком уровне с прямым обращениям к регистрам. Язык ардуино, это надстройка над языком Си для упрощения старта новичка в этом деле — разработчики его не используют (ардуино это обычные контроллеры семейства ATMEL AVR). Для более гибкой работы с ними лучше использовать обычный Си, хотя для этого приходится знать структуру микроконтроллера.
Все выше сказанное мое ИМХО и не претендует на абсолютную истину :-)

Проект супер — вы молодцы! Прям то, что надо. И дизайн не на последнем месте) Удачи вам

stm32 uip enc28j60 если загуглить, то 5 по счету линк на видео в ВК(ну такой он гугл)
(vk.com/...99a267664b19c8f если конкретнее)
Работали с одногрупником чуть меньше пол года, в качестве диплома. Ноу ардуино) онли 32 bit MCU) онли хардкор))
А вообще Вы молодци. Дима, скажите, Вы сигналинг на сервере как делали, сами писали или что готовое юзали( если готовое то что именно, поделитесь если не секрет)...
Еще вопрос по апчикам, у вас есть фреймворки для модильных разработчиков, или вы дистрибутите только законченые приложения?
Было бы неплохо сделать продакшен сервер/ы (с сигналингом) в стиле BaаS(или как это правильно обозвать) вроде Backendless или Parse только для харда, для стартапов, с возможностью монетизации по загрузке или что то в этом роде. Да сейчас STUN фри_серверов хватает, но таких что бы удобно пользоваться и с внятным «get started» очень мало(поправьте если знаете такие).
ну в общем успехов Вам.

Вы сигналинг на сервере как делали
Не понял вопроса.
или вы дистрибутите только законченые приложения?
Только готовые приложения. У нас была идея дистрибутить готовые виджеты. Но... Это не сейчас.
поправьте если знаете такие
Я знаю только что их полно. Просто сотни. Сам я ими не пользуюсь, потому не подскажу.
в общем успехов Вам
Спс!
На текущий момент компания уже закончилась и собрала уже больше 490% от нашей первоначальной цели...
Да, сумма, конечно же, не космическая. Ее едва ли хватит чтобы отбить затраты на разаработку.
Ээээ...
«Make hay while the sun shines»?

Ну это если считать что каждый получает рыночную зп. Изначально мы думали работать параллельно основной работе (в случае если соберем 10-20к).

Еще в студенческие годы мне хотелось соорудить какое-то рабочее устройство и запрограммировать его, но меня всегда пугали все эти паяльники, вольты-амперы и сложность микросхем.
а для мене це хоббі і робота)

Побідним до вашого проекту ,займається компанія Synapse: www.synapse-wireless.com
На модулях цієї фірми можна створювати мережу із різних сенсорів і виконавчих механізмів, а також обєднувати ці мережі через інтернет, і керувати ними + це все на Python.

Один наш проект був на цих модулях, дуже сподобалось. Можна дуже швидко побудувати робочу систему. Трохи про них описав на своєму сайті, може комусь це буде цікаво:
embedded.co.ua/...synapse-theory
embedded.co.ua/...apse-prakty-ka

Основной вызов тут в слабом железе некоторых микроконтроллеров, в частности если говорить о некоторых Arduino, то это 2кб оперативки и ~27кб флеш памяти.
Можна замінити Ардуіно, на STM32 MCU Nucleo - сумісність з Ардуіно шилдами і в рази потужніша
www.element14.com/...u-nucleo-boards
developer.mbed.org/...-Nucleo-F401RE

Можно, я уже ниже писал — изначальный приоритет это ардуина + рассбери. Потом уже что осилим.

Можно поинтересоваться, а выставляться вы планируете ? =)

Добрый день. А ваш проект просто for fun или же преследует комерческие цели?

Конечно мы планируем на нем зарабатывать. Мы по сути продали 2300 копий приложения, которого еще нету.

Можно поинтересоваться почему вы решили выбрать языком разработки C++, а не Go? В новых проектах пытаются избегать работать напрямую с С/С++ и уже есть готовый фреймворк для работы с Embedded applications

не Go
А где их найти, этих го-спецов?

Язык довольно простой для изучения, порог входа намного ниже чем для C++, так что я б по этому поводу не переживал, тем более что постепенно начинает появляться все больше проектов написанных на нем. Разрабатывать и поддерживать код будет намного проще

Никогда не слышал чтобы на go разрабатывали embedded вещи. Хотя про go вообще почти ничего не слышно, если честно. Embedded Java и то вроде получше будет. Как там кста у go с потреблением ресурсов?

Embedded Programming Framework — github.com/kidoman/embd

Большие проекты написанные на Go — Docker, Etcd, CloudFoundry, Consul

Потребление ресурсов stackoverflow.com/...tion-management

Під які мікроконтроллери портований цей фрейворк?

Если вы посмотрите документацию github.com/kidoman/embd то об этом там сказано
Platforms:

RaspberryPi (including A+ and B+)
RaspberryPi 2
BeagleBone Black
Intel Edison coming soon
Radxa coming soon
Cubietruck coming soon

Controllers:

PCA9685 16-channel, 12-bit PWM Controller with I2C protocol Documentation, Datasheet, Product Page

MCP4725 12-bit DAC Documentation, Datasheet, Product Page

ServoBlaster RPi PWM/PCM based PWM controller Documentation, Product Page

Вищеописане це все потужні платформи з сотнями Mhz та MB, на Linux тому для них є сенс використовувати фремворки.

Для STM32, AVR, Cypress PSoC та інших мікроконтроллерів простіше писати на С/С++ - є дуже багато біблітек та прикладів, зручні середовища розробки Keil ,IAR та інші.

Подтверждаю. Как человеку, который всю жизнь программировал на JS, мне понадобилось от силы пару дней от первого знакомства до первых написанных Go-модулей, с использованием многопоточности и т.д. Невероятно простой язык, и в этом его сила.

Почему тогда вопрос не про Rust?!

Go намного проще Rust’a

Ну можно и на JS колбасить железо)) Еще легче и у всех на слуху. Пример?
Espruino (www.espruino.com)

Как вариант, почему бы и нет =)

Единственное что только performance очень сильно пострадает при использовании JS, чего не произойдет при использовании Go

Так, тут чуваку за Go приплачивают )))

К сожалению нет :(

Статья хорошая, молодцы! Но было бы интересно узнать подробности -как вы на кикстартер попали, а то как-то смазано получается. Слышал, что на кикстартер можно попасть только, если ты резидент США или есть фирма посредник, готовая поручиться за вас.

Это самое простое. Нужно просто найти друга/знакомого c гражданством США, так как при валидации профайла там надо предоставить айди.

Вот, что значит хорошая презентация, так и не понял зачем это, а все равно не покидало чувство «shut up and take my money» =).

Да, есть такое. Люди которые не работали с arduino вообще не понимают о чем проект =). Мы с этим смирились, не наша аудитория.

Ну не то чтобы я был не в теме ардуино. Меня одно время привлекала идея собрать что-то вроде arduino.ru/...trigger_Arduino. Однако больше я ко всему этому относился как к игрушке для больших детей.

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

Круто! Спасибо за напоминание о том, что далеко не все идеи уже реализованы и что ещё много интересного можно сделать.

Так и не понял, какую проблему решает проект. Технические детали — это конечно неплохо, но стоило бы добавить хотя бы один понятный кейс.

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

Какой код, какой сервак, какое приложение? Для home automation уже есть десятки, если не сотни готовых систем со своими мобильными приложениями. Вот, например: www.belkin.com/...ome-automation
Чтобы сделать что-то подобное самостоятельно на коленке на базе ардуино нужно быть как минимум немного инженером и при этом стопроцентным гиком.

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

Наша ниша не «home automation» — наша ниша в первую очередь это управление c телефона ардуиной, GPIOs Raspberry PI. Просто это были самые простые примеры что пришли мне в голову =).

Чтобы сделать что-то подобное самостоятельно на коленке на базе ардуино нужно быть как минимум немного инженером и при этом стопроцентным гиком.
Да. Все так. Но даже инженеру нужно потратить время на решение описаной выше проблемы. Мы экономим кучу времени этим самым инженерам. Это и есть фишка проекта.
При этом вам не нужно ничего покупать. Вы уже можете на готовом железе все потестить. Даже wifi/ethernet шилда не нужно. UART.

А даже если и инженером — не писать же весь код самому? Вполне оправданное решение использовать наработки.

как планируете включать непосредственно обогрев полов?
Мне хорошо понятна связка Андроид-Ардуино, но неясно, как Ардуино уже будет «манипулировать» домашними «гаджетами».
Как обратиться к лампочке и включить ее итд?

Как обратиться к лампочке и включить ее итд?

Например так tcrn.ch/1HEDEbh =).
Но вообще это не наша проблема. Люди которые покупают ардуины, распбери, спарки, они знают как заставить лампочку мигать ;).

Я человек, который купил себе ардуину, и я не знаю как заставить лампочку мигать.
Да, я легко могу написать софт для смартфона или добавить пару контроллеров, компонентов итд на саму ардуину, но понятия не имею, как заставить мигнуть обычную лампочку, которая светит у меня над головой.
Если покупать уже готовую, типа той, что была приведена Вами, то зачем нужен ардуино? у такой лампы уже есть свой контроллер и коммуникация со смартфоном.

Что делаете конкретно вы помимо красивого интерфейса на телефоне и общения смартфона с ардуино тогда?

Посмотрела еще раз.
То есть по сути Вы пишете враппер для тех, кому лень руками писать код на с/с++ и заливать скетчи на ардуино? То есть UI на смартфоне для «покрути этот сервомотор» и «помигай этим светодиодом» подключенным к ардуино?
А таргет-группа? Железячники, которые могут в электронику, но не могут в программирование?

кому лень
Дело совсем не в лени. У обычного железячника 5-10 разных бордов (вот twitter.com/...status/578188264881938432 например один из людей, который заплатитл, чтобы стать бета-тестером). И каждый день появляется новая борда. Очевидно, что никто не хочет
руками писать код на с/с++
, когда нужно просто помигать диодом или снять показания из датчика. Зачем мне писать код, если я хочу построить прототип устройства? Да, сейчас без этого никак, но это не значит, что так и должно быть. Ну и от кодинга скетча вы никуда не уходите, просто поялвяется возможность управлять пинами через отличный ЮАЙ и без перезагрузки скетча. Не говоря уже о куче серверных фич, вроде, имейлов, твитеров, пушей и хранилища данных.
А таргет-группа?
Как профи эмбедед, так и начинающие. Будете удивлены, но около 30% людей давших нам деньги — гики с солидным бекграундом.

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

Кстати, раз такое дело, могу выслать вам блинк на попробовать. У нас уже есть альфа

что надо мне.
Ну у ардуины отличные примеры. А что касается самой электроники, то тут надо уже обучатся.
А что касается самой электроники, то тут надо уже обучатся.
в процессе;)
Кстати, раз такое дело, могу выслать вам блинк на попробовать. У нас уже есть альфа
Почему нет?
Давайте, побуду альфа-тестером.

Подписаться на комментарии