Node.js請找Debian體系的linux版本,按下列網址步驟安裝
1. 請至https://github.com/nodesource/distributions
參考「# Using Debian, as root」
curl -sL https://deb.nodesource.com/setup_10.x | bash - apt-get install -y nodejs
按步驟安裝完後下「node -v」 version 指令看有無成功
>>node -v
2. 控制GPIO的方式有很多種,其中一種是藉由讀寫raspbian裡面的GPIO檔案(需用root權限)
檔案的位置在「/sys/class/gpio/」,將要控制的pin(BCM)寫入「./export」,系統就會在「/sys/class/gpio/」底下建立GPIO結構的child folder
只要再去folder底下改寫檔案「./gpio{pin}/direction」的內容為 in/out、「./gpio{pin}/value」的內容為 0/1,這樣就可以控制GPIO了~
用完記得把pin寫入「./unexport」就會殺掉folder結束。
(搭配使用WiringPi 查詢所有GPIO狀態還不錯用)
至於要在node.js寫JavaScript讀寫檔案的話,就去npm找套件吧!就不自己造輪了
套件有很多,我選「npm install onoff」,因為指令短,也順便「npm install express」吧!
下面隨便寫(Copy)個簡單的express api,這樣就可以透過api控制gpio囉!
//file name: service.js
var express = require('express');
var app = express();
var gpioRouter = express.Router();
// you need to set mergeParams: true on the router,
// if you want to access params from the parent router
var unexportRouter = express.Router({ mergeParams: true });
// initialize gpio pin
const Gpio = require('onoff').Gpio;
const motor = new Gpio(17, 'out');
motor.write(0);
// you can nest routers by attaching them as middleware:
gpioRouter.use('/unexport', unexportRouter);
gpioRouter.route('/:onoff')
.get(function (req, res) {
motor.write(Number(req.params.onoff));
res.send(req.params.onoff);
});
unexportRouter.route('/')
.get(function (req, res) {
motor.unexport();
res.send('unexported!');
});
app.use('/gpio', gpioRouter);
app.listen(3000, function () {
console.log('Gpio api listening on port 3000!');
});
最後下指令執行JavaScript就ok了
>> sudo node service.js
記得要加sudo用管理員權限,不然無法修改gpio path的內容
參考:
https://elinux.org/RPi_GPIO_Code_Samples#Shell