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

 
» » » 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




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

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

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