JS ❤️ Аппаратное обеспечение – Начало работы с Nodebots и Johnny-Five

Автор: | 09.08.2026

Начало работы с хакерством аппаратного обеспечения может показаться довольно пугающим для некоторых. Мир электроники совершенно чужд большинству разработчиков; кроме того, это требует написания кода на C/C++, что эффективно, но не все чувствуют себя комфортно с этим. Однако движение Nodebots — это отличный способ начать разработку аппаратного обеспечения с использованием JavaScript. В этой статье я хочу провести вас через несколько базовых вещей, чтобы начать работу.

Существует довольно много различных проектов, направленных на разработку аппаратного обеспечения с использованием JavaScript. Некоторые из них поставляются со специальным оборудованием, например, Tessel или Espruino. Оба этих проекта замечательны, но в этой статье мы сосредоточимся на другом варианте.

Вариант, который мы будем использовать, — это npm-модуль `johnny-five`. Johnny-Five не ограничен определенным оборудованием, а поддерживает широкий спектр различных микроконтроллерных платформ (включая Tessel) с помощью различных плагинов ввода-вывода. Единственный недостаток заключается в том, что некоторые из этих платформ (например, Arduino) не позволяют выполнять JS-код непосредственно на микроконтроллере. Вместо этого вы выполняете его на «хост-системе».

Для Arduino это работает так: вы выполняете JS-код на своей «хост-системе» (например, на компьютере) с использованием Node.js, и модуль `johnny-five` отправляет действия через модуль `serialport` на ваш Arduino, на котором запущена прошивка `firmata`, предназначенная для удаленного управления Arduino. Таким образом, у нас есть полный контроль над оборудованием, пока оно подключено к нашему компьютеру.

Для этого руководства вам понадобится несколько вещей. Прежде всего, на вашем компьютере должны быть установлены следующие программы:

— Node.js и npm

— Arduino IDE для загрузки прошивки `firmata` на ваш микроконтроллер

— Ваш любимый текстовый редактор

Кроме того, вам понадобятся некоторые аппаратные компоненты:

— Arduino (или клон Arduino). Я буду использовать Arduino Nano. Проверьте страницу Johnny-Five на наличие поддерживаемых моделей

— 1 красный светодиод

— 1 кнопка

— 1 резистор на 220 Ом (с полосками Красный-Красный-Коричневый). Обратите внимание, что для светодиодов разных цветов могут потребоваться разные значения сопротивления

— 1 резистор на 10 кОм (с полосками Коричневый-Черный-Оранжевый)

— 1 макетная плата для сборки схемы – достаточно примерно такого размера

— Несколько соединительных или монтажных проводов для подключения всего

Первое, что нам нужно сделать, — это убедиться, что ваш Arduino правильно распознается. Подключите его к компьютеру и откройте меню `Tools`. Там выберите соответствующую плату, которую вы используете — в моем случае это был Arduino Nano.

Также убедитесь, что вы выбрали правильный порт в меню `Tools → Port`. Он должен содержать что-то вроде `usbserial`. Если такой порт не указан, убедитесь, что у вас установлены необходимые драйверы для вашего Arduino.

Далее нам нужно установить прошивку firmata на наш Arduino, чтобы иметь возможность с ним взаимодействовать. Откройте Arduino IDE и установите библиотеку `Servo`, нажав на `Sketch → Include Library → Manage Libraries` и найдя библиотеку.

Последним шагом нужно загрузить файл `StandardFirmataPlus.ino` в каталог вашего проекта Arduino (по умолчанию на Mac это `~/Documents/Arduino`) и загрузить его на Arduino. Вы можете найти каталог Arduino, перейдя в Preferences и посмотрев на *Sketchbook location*.

Скачайте файл `StandardFirmataPlus.ino` с GitHub и поместите его в каталог `StandardFirmataPlus` внутри вашего каталога Arduino. Откройте файл `StandardFirmataPlus.ino` и нажмите кнопку *Upload*. Это скомпилирует код и загрузит его на ваш Arduino. Вы можете закрыть Arduino IDE после завершения загрузки. Теперь все готово для работы с JavaScript!

Примечание: Если загрузка кода не удалась, попробуйте установить библиотеку «Firmata» тем же способом, что и библиотеку «Servo».

Эквивалентом «Hello World» в аппаратном обеспечении, вероятно, является мигание светодиодов. Хорошая новость в том, что на платах Arduino обычно уже есть светодиод, который мы можем использовать, чтобы проверить, все ли работает, без необходимости что-либо подключать. Итак, давайте начнем!

Создайте новый проект Node.js в любом месте на вашем компьютере (например, в домашнем каталоге), выполнив следующие команды в командной строке:

«`bash

mkdir nodebot-test

cd nodebot-test

npm init -y

«`

Затем установите модуль `johnny-five`:

«`bash

npm install johnny-five

«`

Создайте файл `index.js` и добавьте в него следующий код:

«`javascript

const { Board, Led } = require(‘johnny-five’);

const board = new Board();

board.on(‘ready’, onReady);

function onReady() {

const led = new Led(13);

led.blink(500);

}

«`

Этот код создаст новый экземпляр Board и будет ждать события `ready`. Это означает, что библиотека `johnny-five` подключилась к Arduino. Затем мы вызовем функцию `onReady`, которая пока отсутствует. Добавьте ее, вставив следующие строки в конец вашего файла `index.js`:

Теперь все, что нам нужно сделать, — это запустить наш скрипт:

«`bash

node index.js

«`

В консоли должно появиться несколько сообщений, а затем начаться REPL-сессия следующего вида:

«`

1456096608916 Device(s) COM3

1456096608939 Connected COM3

1456096613968 Repl Initialized

>>

«`

Кроме того, вы должны увидеть, как светодиод на плате начинает мигать. Вы можете остановить мигание, введя в REPL:

«`

led.stop();

«`

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

— 1 резистор на 220 Ом (Красный-Красный-Коричневый)

— 1 светодиод

— Ваша макетная плата

— Несколько проводов

Отключите Arduino и подключите все следующим образом на макетной плате:

Вам нужно создать следующую цепь:

Пин D6 на вашем Arduino (или любой другой цифровой пин) → одна сторона резистора → длинная ножка светодиода (анод) → короткая ножка светодиода (катод) → GND на вашем Arduino

С этой схемой, если мы включим пин `D6`, светодиод начнет светиться.

Теперь давайте обновим наш код, чтобы использовать этот светодиод. Все, что вам нужно сделать, — это передать `6` в качестве аргумента конструктору `Led`. Обратите внимание, что это может отличаться для другой платы Arduino или если вы выбрали другой порт. Внесите изменения в ваш `index.js`:

«`javascript

function onReady() {

const led = new Led(6);

led.blink(500);

}

«`

Что такое хакерство оборудования без взаимодействия с пользователем? Давайте добавим кнопку. Возьмите оставшиеся компоненты:

— 1 резистор на 10 кОм (Коричневый-Черный-Оранжевый)

— 1 кнопка

— Оставшиеся провода

Добавьте их в цепь следующим образом:

Подключите один пин к 5V на вашем Arduino, а диагонально противоположный пин — к резистору на 10 кОм и к пину `D5` на вашем Arduino. Подключите другой конец резистора к `GND` вашего Arduino, чтобы замкнуть цепь.

Ваша установка должна выглядеть примерно так:

Работа с такими вещами, как кнопки, — это то, где хакерство оборудования с использованием JavaScript действительно проявляет свои сильные стороны. Если мы хотим узнать, была ли кнопка нажата или отпущена, все, что нам нужно сделать, — это слушать события `press`/`release`. Это так просто. Измените ваш `index.js`:

«`javascript

function onReady() {

const led = new Led(6);

const button = new five.Button(5);

button.on(‘press’, () => {

led.on();

});

button.on(‘release’, () => {

led.off();

});

}

«`

Моя любимая часть nodebots заключается в том, что мы можем использовать всю экосистему npm. Давайте быстро запустим веб-сервер с использованием `express` и будем зажигать светодиод при каждом запросе, а также использовать `got` для выполнения HTTP-запроса `POST` на RequestBin.

Установите два модуля с помощью `npm`:

«`bash

npm install express got

«`

Затем подключите две зависимости и создайте приложение express. Измените ваш `index.js`:

«`javascript

const express = require(‘express’);

const got = require(‘got’);

const { Board, Led, Button } = require(‘johnny-five’);

const app = express();

const board = new Board();

board.on(‘ready’, onReady);

function onReady() {

const led = new Led(6);

const button = new five.Button(5);

app.get(‘/’, (req, res) => {

led.on();

setTimeout(() => led.off(), 1000);

res.send(‘LED is on for 1 second!’);

});

app.listen(3000, () => {

console.log(‘Server is listening on port 3000’);

});

}

«`

Далее нам нужно скорректировать обработчики событий для кнопки и заставить сервер `express` начать прослушивание:

«`javascript

function onReady() {

const led = new Led(6);

const button = new five.Button(5);

button.on(‘press’, () => {

got.post(‘YOUR_REQUEST_BIN_URL’);

});

app.get(‘/’, (req, res) => {

led.on();

setTimeout(() => led.off(), 1000);

res.send(‘LED is on for 1 second!’);

});

app.listen(3000, () => {

console.log(‘Server is listening on port 3000’);

});

}

«`

Обязательно замените `YOUR_REQUEST_BIN_URL` на действительный URL RequestBin. Вы можете создать его на их сайте.

Теперь перезапустите вашу программу и дождитесь сообщения о том, что сервер начал прослушивание. Перейдите на http://localhost:3000, и вы должны увидеть, как светодиод загорается на одну секунду. Обновите страницу, и это произойдет снова. Затем нажмите кнопку и обновите страницу RequestBin, чтобы увидеть запрос, который был отправлен.

Отлично, вот и все! Вы только что сделали свои первые шаги в удивительном мире nodebots. Но это только начало. Теперь пришло время найти проект и начать изучать, какие детали вам для него нужны. Если вы хотите получить представление о том, как подходить к этим вещам, ознакомьтесь с моей статьей о том, как я взломал кофемашину с использованием Johnny-Five и Tessel. Также проверьте, есть ли рядом с вами местные встречи nodebots. Другие полезные ресурсы:

— Страница примеров Johnny-Five, показывающая, как взаимодействовать с различными компонентами

— `nodebots-workshop` с разнообразными упражнениями

— Замечательный список nodebots на GitHub

Если у вас есть классные аппаратные проекты, которые вы создаете или планируете создать с использованием JS, я был бы рад о них услышать! Также не стесняйтесь обращаться, если у вас есть вопросы.