Сам себе инженер: домашняя автоматика и роботы на JavaScript

С чего начать + 15 идей для Espruino, Arduino, Iskra JS.

Собирайте умные вещи и радиоуправляемые игрушки с подключением к домашней сети Wi-Fi, исследуйте мир летающими и подводными зондами, дайте развернуться вашей инженерной мысли!

На базе Arduino, Espruino и их аналогов можно создавать технику без инженерного образования и навыков низкоуровневого программирования. Для работы с Espruino и Tessel даже С/С++ знать не обязательно — весь код вы пишете на JavaScript. Сегодня мы расскажем об Arduino-подобных платах с поддержкой JS и о том, что можно делать с их помощью.

Что такое Arduino, Espruino и аналоги?

Это платформы для создания умных вещей и роботов в домашних условиях. У платформ есть:  

Аппаратная часть  — плата с микропроцессором, к которой можно подключать внешние модули: датчики, дисплеи, электродвигатели, адаптеры Bluetooth, WiFi и Ethernet и др.

Программная часть:

  • прошивка — движок платформы, который позволяет запускать код на микропроцессоре;

  • среда разработки (IDE), где мы пишем код и откуда загружаем его на плату;

  • стандартная библиотека, которая обеспечивает базовый функционал: работу с интерфейсами, светодиодами, таймерами, форматами данных (типа JSON) и т.д.

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

А ещё у производителей наготове наборы-конструкторы: плата + функциональные модули и заготовки кода под конкретные задачи.

Принципиальная особенность uino-платформ в том, что вы не только делаете что-то по рецепту, но и создаёте новые устройства для своих задач.

15 идей для проектов на базе Arduino, Espruino и Iskra JS

Если вы раньше не инженерили, первая мысль: «Что с этим делать?». На мгновение теряешься. Но стоит посмотреть на чужие проекты, обзоры плат и модулей  — тут же возникает громадьё идей и планов.

Вот подборка проектов, которые могут разжечь ваше воображение  (со ссылками на примеры или описание реализации):

  1. Вентилятор или светильник, который автоматически реагирует на изменение температуры в комнате или на открытие двери.

  2. Перчатка-манипулятор — пульт дистанционного управления для техники и игр.

  3. Игрушки, управляемые по Bluetooth с планшета или мобильного устройства, в том числе голосом.

  4. Металлоискатель или дозиметр.

  5. Сигнализация (в том числе для холодильника) или кодовый замок.

  6. Динамическая задняя подсветка для ЖК-телевизора или монитора.

  7. Система управления умным домом: открытие/закрытие жалюзи, управляемая с телефона дверная задвижка и др.

  8. Робот-сортировщик предметов по цвету.

  9. Автополив для дачных грядок.

  10. Мусорное ведро с фотоэлементом.

  11. Светильник с тачскрином для управления оттенком освещения.

  12. Погодный информатор с детализацией по городам мира.

  13. Портативные устройства на солнечной батарее, например, метеостанция с Wi-Fi.

  14. Система сбора данных о чём угодно: о погоде, статистике вашего сайта, группы в соцсети или youtube-канала.

  15. Интерактивный кофейный столик с реакцией на прикосновения или с тетрисом.

Arduino и JS — это совместимо?

Если у вас есть плата Arduino, но вы хотите писать код на JS, выход есть. Фреймворки типа Johnny-Five позволяют исполнять JavaScript на Arduino и прочих платформах:  Raspberry Pi, Tessel 2, pcDuino, Linio One, BeagleBone, BlendMicro, Particle Photon, Intel Galileo и др.

«Костыль!» — скажет кто-то. Отчасти да. Но для маленьких проектов и прототипирования это может быть удобно.

Почему JavaScript

Опытные программисты микроконтроллеров скажут, что C/С++ быстрее и ближе к «железу». Да, это мощные, но сложные и не самые лаконичные языки. Если вы их уже знаете — отлично. Но не всем они нужны, особенно в начале. Пусть выполнение JS-кода займёт на 10-15 миллисекунд дольше — для любительского проекта это не критично. Новичку важнее получать быстрые результаты и читать интуитивно понятный код.

Основные преимущества JS:

  1. Этот язык востребован: за последние 5 лет он —  самый популярный ЯП на StackOverflow. В рейтинге TIOBE за апрель 2018 JavaScript   — восьмой по популярности.

  2. Это один из самых простых в изучении языков, в отличие от С/C++.

  3. JS ускоряет разработку: с ним код бывает в 4 раза короче, чем на Arduino (Си)  — можно быстро реализовывать и тестировать новые задумки. Краткий и понятный синтаксис упрощает знакомство с чужими наработками и их переделку под ваши задачи.

  4. JS универсален: полезен и веб-разработчику, и игроделу, и тому, кто занимается интернетом вещей. Если вам интересно хотя бы одно из этих направлений, программирование автоматики на JS даст дополнительную практику.

  5. У JavaScript есть ясные перспективы развития, в том числе благодаря фреймворкам Node.js и Vue.js. Противостояние адептов AngularJS и React — один из увлекательных эпизодов истории языка, и сколько еще таких эпизодов нас ждёт! Пока web-разработка на подъёме, знание JS будет приносить доход.

Если вы недавно увлеклись робототехникой и ещё толком не умеете программировать, JavaScript — добрый помощник.

Бонусы JS-платформ

Большинство плат Arduino по умолчанию работают с урезанной версией C++, которую мало где применишь. Платформы Espruino и Iskra JS работают со стандартным JS, так что вы можете использовать один и тот же язык в разных направлениях разработки.

Ещё один плюс Espruino и JS — автоматическое подключение библиотек. Сторонние С-библиотеки нужно компилировать и подключать вручную, что отнимает время. На платформе Espruino и Iskra JS библиотеки подхватываются по команде require в коде. Указываете имя библиотеки, и при запуске программы начинается её поиск: сначала на локальном устройстве, затем в интернет-репозиториях, в т.ч. на GitHub.

Консоль в Espruino IDE позволяет отлаживать код в интерактивном режиме: вы видите результат выполнения программы и можете тут же вводить команды и экспериментировать.

Hello, LED! Простейший код для Espruino

Вместо "Hello, World" для Arduino-совместимых устройств первой пишут программу мигания светодиодом. Примерно такую:

// Светодиод мигает с интервалом полсекунды (500 мс)

const LED = 2; //номер ввода (пина) для обращения к компоненту платы

var on = false;

setInterval(function() { // Задаём интервал мигания

   on = !on;

   digitalWrite(LED, on);

}, 500);

Выбор платформы и платы

Платы различаются по форм-фактору, числу пинов (интерфейсов для встроенных и периферийных устройств), входному напряжению и, в итоге,  — по функционалу.

Espruino

Это полностью открытая (open source) платформа: на её базе можно создавать новые платы, прошивки, средства разработки. По назначению она схожа с Arduino, но не совместима с последней технически. Нельзя комбинировать модули двух платформ или писать код для Espruino в Arduino IDE. Программы на JS вы пишете в среде Espruino IDE, которая доступна как:

Espruino поддерживает фреймворки Node.js и Electron. Первый позволяет использовать JavaScript на стороне сервера, второй — создавать нативные приложения на JS.
Варианты плат:

  • Оригинальная Espruino — универсальна по функционалу плата размером меньше кредитки (54 мм x 41 мм). Изначально работает как проводное устройство, но вы можете добавить модули Wi-Fi и Bluetooth. По умолчанию на плате есть разъём MicroUSB, слот для SD-карт и 44 пина.

 

  • Espruino Pico — мини-плата (33 мм x 15 мм), похожая на USB-флешку. Её можно воткнуть в компьютер напрямую, удобно носить с собой, встраивать в корпуса разной формы. На её основе удобно делать измерительные приборы. Примеры проектов  — здесь.

 

  • Espruino WiFi — плата с быстрым доступом в интернет и беспроводную сеть. Позволяет быстро запустить свой веб-сервис, собрать и обработать данные из интернета и/или наоборот  — отправлять данные исследований на сервер.

 

  • Puck.js  — плата-таблетка в пластиковом корпусе, которая позволяет создавать миниатюрные беспроводные устройства с низким энергопотреблением. Например, можно сделать в автосалоне кнопку для перехода к следующей записи в плейлисте телефона. Вы пролистываете музыку, не отрывая взгляда от дороги.

  • Iskra JS от российской компании «Амперка»  — логическое развитие оригинальной Espruino c дополнительными плюшками, о которых стоит рассказать подробнее.

Iskra JS

Плата на ядре Espruino и в форм-факторе Arduino. Вы можете использовать комплектующие Arduino и управлять полученной системой с помощью JavaScript!  Средой разработки служит уже знакомая Espruino WEB IDE. Плюс Iskra JS имеет собственные модули и платы расширения. Энтузиаст, которому понравилась одна платформа, рано или поздно захочет попробовать другую, и возможность комбинировать модули будет очень кстати.

Когда платы нет под рукой, вы можете тестировать код в онлайн-эмуляторе Iskra JS.

Подключить больше модулей поможет плата расширения, такая как Troyka Shield. Она позволяет перестановкой джампера выбирать напряжение на одной из линий питания, причем напряжение управляющей платы не важно. Например, можно комбинировать пятивольтовые модули с трёхвольтовыми платами Arduino (Due, M0).

Tessel 2  

Плата работает с JavaScript, поддерживает фреймворк Node.js и менеджер пакетов NPM, из коробки обеспечивает работу с HTTP и web-сервером, отправку сообщений в Twitter, цветное освещение. Имеет два USB-порта для подключения внешних модулей, таких как:

  • камера,

  • средства воспроизведения звука,

  • модуль сотовой связи (GSM),

  • модуль Bluetooth LE,

  • слот MicroSD.

Ещё целый арсенал модулей можно цеплять к свободным пинам на плате.

Arduino

Все варианты плат Arduino рассматривать сейчас не будем  — всё же они заточены под C++. Скажем только о нескольких интересных и компактных решениях, которые дружат с Python, а через Johnny-Five ладят и с JS.

Arduino Yún  — плата для тех, кто увлечён интернетом вещей. Может получать доступ к Google-почте, Twitter, Facebook, Dropbox и ещё сотне популярных веб-сервисов через библиотеку Temboo. Управляемый через Yún умный дом может связаться с вами, где бы вы ни находились.

Arduino Tian — плата на базе Arduino Yún, но более производительная, с Wi-Fi, Bluetooth, Ethernet-модулями и ОС Linux на борту. Поддерживает Node.js, чтобы вы могли писать на JS и front-end, и back-end. Позволяет быстро развернуть сервер для видеотрансляций или оригинальный веб-сервис для дома.

Мозги  — решают!

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

webинженерроботыfullstack_js_dev
Нашли ошибку в тексте? Напишите нам.
Спасибо,
что читаете наш блог!