Node.js и Arduino - управление светодиодом через веб-интерфейс


Веб-интерфейсы и программная платформа Node.js становятся все более популярными в современном мире. В этой статье мы рассмотрим проект управления яркостью свечения светодиода, подключенного к Arduino Uno, через веб-интерфейс с помощью платформы Node.js. Если добавить в этот проект WiFi модуль ESP8266, то светодиодом данным способом можно будет управлять из любой точки Земли, в которой есть интернет. Подобные проекты весьма популярны в рамках концепции интернета вещей (IoT – Internet of Things). Для примера можно посмотреть похожий проект управления сервомотором по Wi-Fi с помощью Arduino и веб-браузера.

Внешний вид проекта для управления светодиодом с помощью Node.js и Arduino

Что такое Node.js

Node или Node.js - это программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API, который написан на C++, подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения и даже программировать микроконтроллеры (википедия).

В этом проекте мы будем управлять яркостью свечения светодиода двумя способами:

  • при помощи JavaScript кода в платформе Node.js;
  • с помощью платформы Node.js и веб-интерфейса из любого браузера. В данном случае плата Arduino будет выступать в роли веб-сервера, а HTML страницы будут располагаться на вашем компьютере.

Необходимые компоненты

Аппаратное обеспечение

  1. Плата Arduino Uno (купить на AliExpress).
  2. Светодиод (купить на AliExpress).
  3. Резистор 1 кОм (купить на AliExpress).

Программное обеспечение

  1. Arduino IDE – для загрузки скетча в плату Arduino Uno.
  2. Firmata – это протокол для взаимодействия с различными микроконтроллерами с помощью программного обеспечения на компьютере или смартфоне. Программное обеспечение Firmata можно скачать для взаимодействия практически с любыми платами, например, Arduino, Teensy. Библиотека Firmata уже встроена в Arduino IDE, поэтому у вас не будет необходимости скачивать ее откуда либо. В качестве примера ее использования можно посмотреть статью про управление Arduino с помощью Raspberry Pi и pyFirmata.
  3. Johnny-Five – JavaScript платформа, ориентированная на взаимодействие с робототехникой и интернетом вещей. Используется как своеобразный мост (шлюз) между платой Arduino и компьютером. Более подробно объяснена далее в данной статье.

Схема проекта

Схема проекта управления светодиодом с помощью платы Arduino и платформы Node.js показана на следующем рисунке. Как видите, она очень проста – нужно всего лишь подключить светодиод к плате Arduino.

Схема проекта управления светодиодом с помощью платы Arduino и платформы Node.js

Установка платформы Node.js

Выполните следующую последовательность шагов.

Шаг 1. Скачайте Node.js с официального сайта.

Шаг 2. Запустите скачанный exe-файл и следуйте инструкциям установщика.

Начало установки платформы Node.js

Шаг 3. После установки перезагрузите компьютер чтобы получить возможность использовать все функции Node.js.

Шаг 4. Чтобы проверить что Node.js правильно установлена можно в командной строке набрать команду Node –v.

Проверка установки платформы Node.js

Шаг 5. После исполнения этой команды вам будет показана версия вашей Node.js (если она действительно установлена).

Установка библиотеки Johnny-Five

После установки Node.js создайте на вашем компьютере отдельную папку (с именем, например, “LED_Control”) чтобы хранить все файлы рассматриваемого нами проекта в одном месте. Теперь скачайте в эту папку библиотеку Johnny-Five, выполнив следующую последовательность шагов.

Шаг 1. Откройте окно с командной строкой.

Шаг 2. Смените папку на “LED_Control” (или как она у вас названа) с помощью команды ‘cd’. Кто застал времена операционной системы MS DOS наверняка хорошо помнят эту команду.

Шаг 3. Выполните команду ‘npm install johnny-five’.

Результат выполнения команды ‘npm install johnny-five’

Шаг 4. В результате выполнения этой команды установятся все компоненты библиотеки Johnny-Five.

Шаг 5. Также для работы нашего проекта необходимо будет установить еще три библиотеки:

  • express: серверная оболочка HTTP;
  • socket.io: библиотека WebSockets;
  • serialport: оболочка последовательного порта.

Шаг 6. Введите в командной строке следующие команды одна за другой (не все сразу) чтобы установить эти библиотеки:

npm install express
npm install socket.io
npm install serialport

Установка библиотеки express

Установка библиотеки socket.io

Установка библиотеки serialport

Рассмотрим последовательно две составляющих нашего проекта:

  • мигание светодиодом с помощью Arduino и Node.js;
  • управление яркостью свечения светодиода через веб-интерфейс с помощью Arduino и Node.js.

Мигание светодиодом с помощью Arduino и Node.js

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

  1. Подключите плату Arduino Uno к компьютеру с помощью USB кабеля.
  2. Откройте Arduino IDE и выберите там в инструментах (Tools) плату Arduino Uno. Если используете другой тип платы Arduino, то вам следует выбрать его.
  3. Выберите COM порт, к которому подключена плата Arduino Uno.
  4. Теперь в пункте меню Menu -> File -> Examples -> Firmata -> StandardFirmata найдите скетч Firmata.
  5. Загрузите этот скетч (“StandardFirmata”) в плату Arduino выбрав пункт меню File -> Upload.

После этого плата Arduino будет готова к исполнению команд, поступающих с компьютера.

Написание программы Node.js для мигания светодиодом

Чтобы написать программу Node.js откройте любой текстовый редактор ((Notepad, Notepad++ и т.п.), вставьте туда код программы, приведенный в конце данной статьи и сохраните его с расширением ‘.js’ (например, blink_led.js) в папку “LED_Control”, которую вы создали ранее для хранения всех файлов этого проекта. Здесь же мы обсудим наиболее важные фрагменты этого кода.

Вначале инициализируем контакт платы Arduino, к которому подключен светодиод – в нашем случае это контакт 5 платы Arduino. Словосочетание ‘var’ в Node.js обозначает объявление переменной.

Также в программе необходимо подключить модуль johnny-five и выбрать плату. Модули в Node.js – это практически то же самое что и библиотеки в Arduino. Функция ‘require()’ позволяет получить доступ к модулю.

Функция console.log позволяет нам вывести сообщение на экран. Контакт, к которому подключен светодиод, устанавливается в режим работы на вывод данных. Далее следует задержка между миганиями светодиода.

Теперь, чтобы запустить программу, выполните следующую последовательность шагов:

  • откройте командную строку;
  • с помощью команды ‘cd’ смените текущий каталог на каталог “LED_Control”;
  • запустите на выполнение команду ‘Node led_blink.js’. Если она успешно выполнится, то вы увидите сообщение "LED has Started Blinking!" как показано на следующем рисунке.

Проверка работы программы Node.js для мигания светодиодом

Светодиод, подключенный к контакту 5 платы Arduino, начнет мигать. На этом первая часть нашего проекта будет закончена.

Управление яркостью свечения светодиода через веб-интерфейс с помощью Arduino и Node.js

В этой части проекта нам необходимо будет произвести такие операции как конфигурация платы Arduino Uno, установка веб-интерфейса и написание программы для платформы Node.js. Рассмотрим эти операции более подробно.

Конфигурация платы Arduino Uno для управления яркостью свечения светодиода

Для этого вам необходимо будет загрузить в плату Arduino Uno скетч “arduino_control.ino”. Этот скетч вместе с другими необходимыми файлами для проекта вы можете скачать по следующей ссылке. Также он приведен в конце данной статьи. Рассмотрим основные фрагменты кода скетча “arduino_control.ino”.

Вначале необходимо установить скорость 9600 бод.

Далее мы непрерывно проверяем данные, поступающие в последовательный порт, и передаем принятый байт на контакт 5 платы Arduino Uno. На этом контакте доступно формирование ШИМ (широтно-импульсной модуляции).

На этом конфигурация платы Arduino Uno для этой части проекта будет закончена. То есть мы просто принимаем байты из последовательного порта связи и используем значения этих байтов для формирования ШИМ на контакте 5 платы Arduino Uno – соответственно, благодаря изменениям скважности (коэффициента заполнения) ШИМ изменяется и яркость свечения светодиода.

Установка веб-интерфейса

Чтобы управлять яркостью свечения светодиода с помощью веб-интерфейса мы напишем небольшой фрагмент кода в HTML файл – в этом случае наш веб-интерфейс будет работать в любом браузере. Для этого выполните следующую последовательность шагов:

1. Внутри каталога “LED_Control” (мы его создали ранее чтобы хранить в нем все файлы нашего проекта) создайте новый каталог с именем “public”.

Создание нового каталога с именем “public”

2. Скопируйте в этот каталог файлы “index.html” и “style.css”, которые вы ранее уже скачали в составе архива по этой ссылке.

Копирование в новый каталог файлов “index.html” и “style.css”

3. Эти файлы создадут на веб-странице слайдер, с помощью которого можно будет управлять яркостью свечения светодиода используя Node.js и Arduino.

Слайдер на веб-странице, с помощью которого можно будет управлять яркостью свечения светодиода

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

Программа Node.js для управления яркостью свечения светодиода

В этой части проекта мы напишем скетч “brightness_control.js” используя Node.js. Запуск на выполнение этого скетча будет во многом похож на мигание светодиода с помощью Node.js, которое мы рассмотрели в первой части этой статьи.

Для написания программы для Node.js откройте любой текстовый редактор (Notepad, Notepad++ и т.п.), скопируйте в него код программы ‘brightness_control”, приведенный в конце данной статьи (также его можно скачать по этой ссылке) и сохраните его с расширением ‘.js’ – то есть вы получите файл brightness_control.js в каталоге “LED_Control”, который вы создали ранее для хранения всех файлов этого проекта.

Также, как и в программе для мигания светодиодом, которую мы рассмотрели ранее в данной статье, в этой программе нам тоже понадобятся модули (библиотеки). Нам будут необходимы модули ‘express’, ‘http’ и ‘serial port’.

После этого установим необходимый COM порт и скорость передачи для него. Не забудьте перед названием COM порта записать символ ‘/’.

Далее начнем “слушать сервер” (listen the server) на порту 8080.

Для начала установим яркость свечения светодиода равную 0. Затем мы будем передавать желаемое значение яркости с помощью модуля сокетов (sockets module), который по сути является модулем веб-сокетов. Эти данные будут приниматься веб-интерфейсом с помощью протокола сокетов (socket protocol).

После этого мы будем передавать (emit) значение яркости светодиода, полученное от сокета (socket), на контакт, к которому подключен светодиод (LED pin).

Также для целей отладки добавим в конец программы команду вывода сообщения на экран. Делать мы это будем с помощью команды console.log.

Теперь, чтобы запустить программу на выполнение, выполните следующую последовательность шагов:

  • откройте окно с командной строкой;
  • с помощью команды ‘cd’ смените текущий каталог на каталог “LED_Control”;
  • запустите на выполнение команду ‘Node brightness_control.js’. Если она успешно выполнится, то вы увидите сообщение "Web Server Started go to "http://localhost:8080" in your Browser." как показано на следующем рисунке.

Проверка программы Node.js для управления яркостью свечения светодиода

Теперь запустите в браузер и напишите там в строке адреса (url) “localhost:8080”. Чтобы изменять яркость свечения светодиода просто передвигайте слайдер на созданной веб-странице.

Тестирование работы проекта

Исходный код программы (скетча)

Все файлы для этого проекта можно скачать по следующей ссылке.

Программа Node.js для мигания светодиодом

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

Программа Node.js для управления яркостью свечения светодиода

Видео, демонстрирующее работу проекта

(2 голосов, оценка: 5,00 из 5)
Загрузка...
4 340 просмотров

Комментарии

Node.js и Arduino - управление светодиодом через веб-интерфейс — 2 комментария

  1. При выполнении программы появляется следующая ошибка:

    C:\LED_Control>node blink_led.js
    C:\LED_Control\node_modules\johnny-five\lib\board.js:42
    serialport.list().then(results => {
    ^

    TypeError: serialport.list is not a function
    at Board.detect (C:\LED_Control\node_modules\johnny-five\lib\board.js:42:16)
    at new Board (C:\LED_Control\node_modules\johnny-five\lib\board.js:291:23)
    at Object. (C:\LED_Control\blink_led.js:2:11)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Module._load (node:internal/modules/cjs/loader:960:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:23:47

    Node.js v18.17.1

    • А библиотека для работы с последовательным портом нормально установилась (npm install serialport)?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *