Управление GPIO Raspberry Pi через Node.js

В этом уроке мы узнаем как управлять выводом GPIO Raspberry Pi  через веб-сервер, используя Node.js и socket.io.

Комплектующие

Нам в этом уроке понадобится совсем минимум устройств, а точнее одно, но очень крутое:

  • Raspberry Pi 3

В этом руководстве вы узнаете, как управлять выводом GPIO на Raspberry Pi с веб-сервера, используя Node.js и socket.io. На веб-странице мы создадим кнопки, которые будут включать или выключать подключенный светодиод. Перед созданием веб-сервера мы должны установить несколько пакетов.

Установка Node.js на Raspberry Pi

Первое, что вам нужно сделать, это обновить Raspberry Pi.

sudo apt-get update

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

sudo apt-get dist-upgrade

Введите следующую команду, чтобы установить последнюю версию Node на Raspberry pi.

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

Теперь, с загруженным репозиторием пакетов NodeSource, мы можем двигаться дальше и установить Node.js

sudo apt-get install -y nodejs

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

node -v

Установка onoff модуля

Чтобы управлять выводами GPIO Raspberry Pi с помощью Node.js, нам нужно будет установить модуль «onoff». Введите следующую команду, чтобы установить его:

npm install onoff

Установка socket.io для Node.js

Теперь установите модуль веб-сокета для Node.js, который позволит нам контролировать вывод GPIO Raspberry Pi с веб-страницы.

npm install socket.io --save

Создание веб-сервера и файла HTML

Теперь мы установили все необходимые пакеты и пришло время создать веб-сервер и HTML-файл. Оба эти файла должны находиться в одном каталоге.

Index.html

Давайте сначала создадим HTML-файл, который будет создавать кнопки в веб-браузере. Создайте HTML-файл, набрав nano index.html и вставив в него приведенный ниже код.

<!DOCTYPE html>
<html>
<title>GPIO Control</title>

<body>
    <h2>Control GPIO 4</h2>
    <button type="button" id="state" onclick="LEDOn()" style="background-color:green;">ON</button>
    <button type="button" id="state" onclick="LEDOff()" style="background-color:red;">OFF</button>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
    <script>
        var socket = io.connect(); //load socket.io-client and connect to the host
        function LEDOn() {
            socket.emit("state", 1); //send button state to server
        }

        function LEDOff() {
            socket.emit("state", 0); //send button state to server
        }
    </script>

</html>
</body>

</html>

Подключение светодиода к Raspberry Pi

Теперь подключите светодиод к GPIO 4 с помощью резистора 220 Ом, как показано на схеме ниже:

Создание веб-сервера

Теперь давайте настроим веб-сервер. Файл Node.js откроет запрошенный файл и вернет содержимое файла, а если что-то пойдет не так, он выдаст ошибку 404.

Создайте файл, набрав nano webserver.js и вставьте в него приведенный ниже код.

var Gpio = require('onoff').Gpio; //require onoff to control GPIO
var LEDPin = new Gpio(4, 'out'); //declare GPIO4 an output
var fs = require('fs'); //require filesystem to read html files
var http = require('http').createServer(function handler(req, res) { //create server
  fs.readFile(__dirname + '/index.html', function (err, data) { //read html file
    if (err) {
      res.writeHead(500);
      return res.end('Error loading socket.io.html');
    }

    res.writeHead(200);
    res.end(data);
  });
});

var io = require('socket.io')(http) //require socket.io module and pass the http object

http.listen(8080); //listen to port 8080

io.sockets.on('connection', function (socket) {// WebSocket Connection
  var buttonState = 0; //variable to store button state

  socket.on('state', function (data) { //get button state from client
    buttonState = data;
    if (buttonState != LEDPin.readSync()) { //Change LED state if button state is changed
      LEDPin.writeSync(buttonState); //turn LED on or off
    }
  });
});

Мы создали как веб-сервер, так и HTML-файлы, поэтому пришло время запустить веб-сервер и управлять выводом GPIO Raspberry Pi.

Введите следующую команду в терминале, чтобы запустить веб-сервер:

node webserver.js

Затем перейдите в браузер и откройте веб-страницу, используя [Raspberrypi-ip]:8080

В моем случае это: 192.168.4.1:8080

На экране должны появиться две кнопки, и когда вы нажмете эти кнопки, светодиод, подключенный к GPIO4 Raspberry Pi, включится или выключится.

19.06.2019 | Уроки | Теги статьи
Ардуино+