цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Raspberry Pi и Node.js: делаем сервер на Node.js и управляем светодиодом

Raspberry Pi и Node.js: делаем сервер на Node.js и управляем светодиодом

Автор: Mike(admin) от 21-11-2018, 06:55

Сегодня существует множество различных языков программирования и программного обеспечения для управления Raspberry Pi, включая Python, язык C для встраиваемых систем, Flask и т. д.


Raspberry Pi и Node.js

Чтобы расширить горизонт применения мощного одноплатного компьютера Raspberry Pi, сегодня мы будем использовать очень популярную среду на основе javascript (Node.js) для управления линиями GPIO Raspberry Pi локально, а также глобально, настроив его как веб-сервер. Первоначально Node.js был разработан для Google Chrome, но позже он стал применяться для других задач и проектов.


В этом уроке мы будем управлять светодиодом, подключенным к Raspberry Pi, используя два метода. Сначала мы просто напишем код javascript, используя Node.js, чтобы мигать светодиодом. Во втором методе мы создадим HTML-страницу с двумя кнопками для включения и выключения светодиода. Эта HTML-страница будет размещена на Raspberry Pi и может быть открыта в любом веб-браузере. Итак, здесь Raspberry Pi будет выступать в роли веб-сервера. Схема подключения Raspberry Pi для этого проекта выглядит следующим образом:


Raspberry Pi и Node.js

Для начала установим Node.js на Raspberry Pi. Сначала проверьте версию ARM-ядра с помощью этой команды (в данном случае версия 7):


uname –m

Загрузите установщик, скопировав следующую ссылку в терминал. Не забудьте изменить версию в приведенной ниже ссылке:


wget https://nodejs.org/dist/v4.6.1/node-v4.6.1-linux-armv[version]l.tar.gz

Извлеките файлы, используя команду ниже:


tar -xvf node-v4.6.1-linux-armv[version]l.tar.gz

Наконец, выполните эти команды, чтобы добавить важные файлы в локальные каталоги:



cd node-v4.3.1-linux-armv[version]l
sudo cp -R * /usr/local/

Теперь Node.js установлен на Raspberry Pi. Проверьте версию узла для подтверждения с помощью этой команды:


node –version

Прежде чем приступить к созданию сервера Node.js, сначала мы рассмотрим, как написать скрипт для мигания светодиодом с помощью node.js (пакет npm onoff). Мы будем использовать диспетчер пакетов npm для установки onoff-модуля, используя следующую команду:


npm install onoff

Теперь мы напишем скрипт для мигания светодиодом. Откройте редактор nano и укажите имя файла с помощью команды:


nano blink_led.js

Если вы являетесь новичком в Node.js, вам лучше посмотреть документацию по npm для лучшего понимания скрипта. Итак, сначала объявим переменные для led, delay и GPIO. Мы используем Raspberry Pi GPIO 4 для подключения светодиода.



var Gpio = require('onoff').Gpio; 
var LED = new Gpio(4, 'out'); 
var blinkInterval = setInterval(blinkLED, 500);

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



function blinkLED() {
  if (LED.readSync() === 0) {
    LED.writeSync(1); //set output to 1 i.e turn led on
  } else {
    LED.writeSync(0); //set output to 0 i.e. turn led off 

 }
}

Аналогичным образом, сделаем функцию, чтобы остановить мигание:



function endBlink() { 
  clearInterval(blinkInterval); 
  LED.writeSync(0); 

  LED.unexport(); // отключаем GPIO для освобождения ресурсов
}
setTimeout(endBlink, 10000);

Полный код Node.js для программы мигания светодиодом приведен в конце этого урока. Поэтому скопируйте и вставьте код в файл led_blink.js, который мы создали ранее с помощью команды nano, сохраните файл с помощью Ctrl + x, затем нажмите Y и нажмите Enter. Чтобы запустить скрипт, откройте терминал и введите следующую команду:


node blink_led.js

Raspberry Pi и Node.js

Вы увидите, что светодиод будет мигать в течение 10 секунд, после чего он перестанет мигать. Теперь же перейдем к более интересной части данного руководства, в ней мы собираемся создать собственный веб-сервер, из которого мы можем управлять линиями GPIO, используя веб-страницу. Для этого сначала нам нужно создать HTML-страницу и написать сценарий для выполнения back-end задачи, то есть для управления линией GPIO. Сначала создайте каталог для хранения всех файлов в одном месте.


mkdir nodejs_server

Внутри папки nodejs_server создайте еще одну папку для сохранения файла HTML.



cd nodejs_server
mkdir views

Если вы хотите добавить изображения на свою страницу html, вы должны сделать другую папку с именем public внутри основного каталога, то есть в папке nodejs_server. В общей папке создайте папку изображений и сохраните все изображения в этой папке. Теперь мы сделаем HTML-страницу. Для этого откройте текстовый редактор с именем файла index.ejs. В скрипте нет ничего необычного. Это только HTML-файл, который позволяет включать и выключать кнопку. Скопируйте и вставьте HTML-код ниже в текстовый редактор и сохраните его.



<meta name="viewport" content="width=500, initial-scale=1"> 

<div class="BorderMargin">
<image src = '/images/example.jpg' alt="LED" style="width:500px;height:250px;" align="left">
<h1>Welcome to Nodejs Server</h1>

<form action="/led/on" method="post">
<button type="submit" class="button">LED On </button>

<button type="submit" formmethod="post" formaction="/led/off" class="button button3">LED Off</button>
</form>
<a>Led Status: <%=status %></a>
</div>

Теперь мы должны написать код javascript. Мы используем node express framework для ответа на HTTP-запросы, выполняемые пользователем. Откройте терминал и откройте текстовый редактор с именем index.js в папке nodejs_server, затем скопируйте и вставьте ниже код java-скрипта и этот файл.



var express = require('express'); 
var app = express();
var path = require('path');
var gpio = require('rpi-gpio');

gpio.setup(7, gpio.DIR_OUT);
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
console.log(path.join(__dirname, 'public'));
app.get('/', function(req, res){ 
  res.render('index',{status:"Press Button"});
});

app.post('/led/on', function(req, res){
gpio.write(7, true, function(err) {

        if (err) throw err;
        console.log('Written True to pin');
console.log(path.join(__dirname, 'public'));
return res.render('index', {status: "Led is On"});
    });
});

app.post('/led/off', function(req, res){
gpio.write(7, false, function(err) {

        if (err) throw err;
        console.log('Written False to pin');
console.log(path.join(__dirname, 'public'));
return res.render('index',{status: "Led is Off"});
    });
});

app.listen(3000, function () {
  console.log('Server Started on Port: 3000!')
})

Внутри каталога nodejs_server мы должны выполнить следующую команду для установки библиотек node.js:


npm install

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


node index.js

Вы увидите сообщение на терминале, что ваш сервер запущен на определенном порту.


Raspberry Pi и Node.js

Теперь откройте свой браузер и откройте URL-адрес Raspberry Pi с номером порта, то есть raspberrypi:3000. Убедитесь, что ваш Raspberry Pi и ноутбук, в котором вы открываете браузер, связаны с одной и той же сетью. В браузере вы сможете увидеть страницу вроде такой:


Raspberry Pi и Node.js

Нажимая кнопки, вы будете изменять состояние светодиода. Ниже приведен код для мигания светодиодом с помощью Node.js.



var Gpio = require('onoff').Gpio; 
var LED = new Gpio(4, 'out'); 
var blinkInterval = setInterval(blinkLED, 500); 
function blinkLED() {
  if (LED.readSync() === 0) {
    LED.writeSync(1); //set output to 1 i.e turn led on
  } else {
    LED.writeSync(0); //set output to 0 i.e. turn led off 
 }
}
function endBlink() { 
  clearInterval(blinkInterval); 
  LED.writeSync(0); 

  LED.unexport();
}
setTimeout(endBlink, 10000);

Далее приведен код для мигания светодиодом с использованием веб-сервера Node.js.



var express = require('express'); 
var app = express();
var path = require('path');
var gpio = require('rpi-gpio');

gpio.setup(7, gpio.DIR_OUT);
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
console.log(path.join(__dirname, 'public'));
app.get('/', function(req, res){ 
  res.render('index',{status:"Press Button"});
});

app.post('/led/on', function(req, res){
gpio.write(7, true, function(err) {

        if (err) throw err;
        console.log('Written True to pin');
console.log(path.join(__dirname, 'public'));
return res.render('index', {status: "Led is On"});
    });
});

app.post('/led/off', function(req, res){
gpio.write(7, false, function(err) {

        if (err) throw err;
        console.log('Written False to pin');
console.log(path.join(__dirname, 'public'));
return res.render('index',{status: "Led is Off"});
    });
});

app.listen(3000, function () {
  console.log('Server Started on Port: 3000!')
})



© digitrode.ru


Теги: Raspberry Pi, JavaScript



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


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

Комментарии:

Оставить комментарий