Raspberry Pi๋ ์ ๋ ดํ๊ณ ์ํ์ ์ปดํจํฐ๋ก, ๋ค์ํ IoT ํ๋ก์ ํธ์ ์๋ฒ ๋๋ ์์คํ ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ํนํ Node.js์ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ํ๊ฒฝ์ ์ด์ฉํ๋ฉด, Raspberry Pi์์ ์น ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ฑฐ๋ ํ๋์จ์ด๋ฅผ ์ ์ดํ๋ ๋ฑ ๋ค์ํ ์์ ์ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ Raspberry Pi์ Node.js๋ฅผ ์ฐ๋ํ์ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
Raspberry Pi์ Node.js ์ค์นํ๊ธฐ
Raspberry Pi์์ Node.js๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ Node.js๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. Raspberry Pi๋ ARM ๊ธฐ๋ฐ์ ์ปดํจํฐ์ด๋ฏ๋ก, ๊ณต์ ์น์ฌ์ดํธ์์ ARM์ฉ Node.js ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
1. Node.js ์ค์น ํ์ธ
Raspberry Pi์ ๊ธฐ๋ณธ์ ์ผ๋ก Node.js๊ฐ ์ค์น๋์ด ์์ ์ ์์ต๋๋ค. ์ด๋ฅผ ํ์ธํ๋ ค๋ฉด ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
$ node -v
$ npm -v
์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ ๋ ๋ฒ์ ์ ๋ณด๊ฐ ๋์ค๋ฉด Node.js์ npm(Node.js ํจํค์ง ๋งค๋์ )์ด ์ด๋ฏธ ์ค์น๋์ด ์๋ ์ํ์ ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ์๋ ๋ฐฉ๋ฒ์ ํตํด Node.js๋ฅผ ์ค์นํ ์ ์์ต๋๋ค.
2. Node.js ์ค์น
Raspberry Pi์ ์ต์ ๋ฒ์ ์ Node.js๋ฅผ ์ค์นํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ํฐ๋ฏธ๋์ ์ ๋ ฅํฉ๋๋ค.
$ curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
$ sudo apt install -y nodejs
์ด ๋ช
๋ น์ด๋ NodeSource๋ฅผ ํตํด ์ต์ ๋ฒ์ ์ Node.js๋ฅผ ์ค์นํฉ๋๋ค. ์ค์น๊ฐ ์๋ฃ๋๋ฉด node -v
์ npm -v
๋ช
๋ น์ด๋ก ์ค์น๋ ๋ฒ์ ์ ํ์ธํ ์ ์์ต๋๋ค.
Raspberry Pi์์ Node.js ํ๋ก์ ํธ ์์ํ๊ธฐ
์ด์ Raspberry Pi์ Node.js๊ฐ ์ค์น๋์์ผ๋ฏ๋ก, ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์ด ์์ ์์๋ ์น ์๋ฒ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ๊ณผ Raspberry Pi์ GPIO ํ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
1. ๊ฐ๋จํ Node.js ์น ์๋ฒ ๋ง๋ค๊ธฐ
Node.js๋ ์น ์๋ฒ๋ฅผ ๊ฐ๋จํ ๋ง๋ค ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Raspberry Pi์์ ์น ์๋ฒ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
// server.js
const http = require('http');
// ์๋ฒ ์์ฑ
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, Raspberry Pi with Node.js!\n');
});
// ์๋ฒ ํฌํธ์ IP ์ค์
const port = 3000;
const hostname = '0.0.0.0';
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
์ด ์ฝ๋๋ HTTP ์๋ฒ๋ฅผ ์์ฑํ์ฌ "Hello, Raspberry Pi with Node.js!" ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค. ์๋ฒ๋ฅผ ์คํํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
$ node server.js
์ดํ ๋ธ๋ผ์ฐ์ ์์ Raspberry Pi์ IP ์ฃผ์์ ํฌํธ 3000์ ์
๋ ฅํ์ฌ ์๋ฒ๊ฐ ์ ๋๋ก ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์: http://192.168.1.10:3000
2. Raspberry Pi GPIO ํ ์ ์ดํ๊ธฐ
Raspberry Pi์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋๋ GPIO ํ์ ํตํด ํ๋์จ์ด๋ฅผ ์ ์ดํ ์ ์๋ค๋ ์ ์
๋๋ค. Node.js๋ฅผ ์ฌ์ฉํด LED๋ฅผ ์ผ๊ณ ๋๋ ๊ฐ๋จํ ์์ ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฅผ ์ํด onoff
๋ผ๋ Node.js ํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
GPIO ํ ์ ์ด๋ฅผ ์ํ ์ค๋น
๋จผ์ onoff
ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
$ npm install onoff
์ด์ GPIO ํ์ ์ ์ดํ๋ ๊ฐ๋จํ ์ฝ๋๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค. ์ด ์์ ์์๋ Raspberry Pi์ GPIO 17๋ฒ ํ์ ์ฐ๊ฒฐ๋ LED๋ฅผ ์ผ๊ณ ๋๋๋ค.
// gpio_control.js
const Gpio = require('onoff').Gpio;
const led = new Gpio(17, 'out'); // GPIO 17๋ฒ ํ์ ์ถ๋ ฅ ๋ชจ๋๋ก ์ค์
// LED๋ฅผ ์ผ๊ณ 1์ด ํ์ ๋๋ ํจ์
const blinkLED = () => {
led.writeSync(1); // LED ์ผ๊ธฐ
console.log('LED ON');
setTimeout(() => {
led.writeSync(0); // LED ๋๊ธฐ
console.log('LED OFF');
}, 1000);
};
// LED ๊น๋นก์ด๊ธฐ
blinkLED();
// ํ๋ก๊ทธ๋จ ์ข
๋ฃ ์ GPIO ๋ฆฌ์์ค ํด์
process.on('SIGINT', () => {
led.unexport();
});
์ด ์ฝ๋๋ GPIO 17๋ฒ ํ์ ์ฐ๊ฒฐ๋ LED๋ฅผ 1์ด ๋์ ์ผ ํ ๋๋๋ค. ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค.
$ sudo node gpio_control.js
์ฃผ์: GPIO ์ ์ด๋ ๋ฃจํธ ๊ถํ์ด ํ์ํ๋ฏ๋ก sudo
๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
Node.js์ Raspberry Pi๋ฅผ ํ์ฉํ ํ๋ก์ ํธ ์์ด๋์ด
Node.js์ Raspberry Pi๋ฅผ ํ์ฉํ๋ฉด ๋ค์ํ IoT ๋ฐ ํ๋์จ์ด ์ ์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ค์์ Raspberry Pi์ Node.js๋ฅผ ํ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ํ๋ก์ ํธ ์์ด๋์ด์ ๋๋ค.
- ์ค๋งํธ ํ ์๋ํ: Raspberry Pi์ Node.js๋ฅผ ์ฌ์ฉํด ์ง์์ ์กฐ๋ช , ์จ๋ ์กฐ์ ๊ธฐ ๋ฑ์ ์ ์ดํ๋ ์ค๋งํธ ํ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
- ์จ๋ ๋ฐ ์ต๋ ๋ชจ๋ํฐ๋ง: ์ผ์๋ฅผ ์ด์ฉํด ์ค์๊ฐ์ผ๋ก ์จ๋์ ์ต๋๋ฅผ ์ธก์ ํ๊ณ Node.js ์๋ฒ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ ์ ์์ต๋๋ค.
- ์นด๋ฉ๋ผ ๋ณด์ ์์คํ : Raspberry Pi ์นด๋ฉ๋ผ ๋ชจ๋๊ณผ Node.js๋ฅผ ์ฐ๋ํด ์ค์๊ฐ ๋น๋์ค ์คํธ๋ฆฌ๋ฐ ๋ฐ ๋ชจ์ ๊ฐ์ง ์์คํ ์ ๊ตฌํํ ์ ์์ต๋๋ค.
- ๋ก๋ด ์ ์ด: Node.js์ GPIO ํ์ ์ฌ์ฉํด ๋ชจํฐ์ ์ผ์๋ฅผ ์ ์ดํ์ฌ Raspberry Pi ๊ธฐ๋ฐ ๋ก๋ด์ ์ ์ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
Raspberry Pi์ Node.js๋ ๊ฐ๋ ฅํ ์กฐํฉ์ผ๋ก, ์น ์๋ฒ ๊ตฌ์ถ๋ถํฐ ํ๋์จ์ด ์ ์ด๊น์ง ๋ค์ํ ํ๋ก์ ํธ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ Raspberry Pi์ Node.js๋ฅผ ์ค์นํ๊ณ ๊ฐ๋จํ ์น ์๋ฒ์ GPIO ์ ์ด ์์ ๋ฅผ ์ดํด๋ณด์์ต๋๋ค. ์ด ๊ฐ์ด๋๋ฅผ ๋ฐํ์ผ๋ก IoT์ ํ๋์จ์ด ์ ์ด ํ๋ก์ ํธ๋ฅผ ์์ํด ๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ