본문 바로가기
Coding/Raspberry pi - node.js

실습 임베디드와 REST API를 이용한 LED 제어

by hyun-am 2019. 11. 18.

실습 문제

 

조건에 맞도록 원격서버(svr_led.js)와 클라이언트(client_led.js)를 프로그래밍 하시오

 

조건1 : 서버는 3색 LED를 클라이언트의 요청에 따라서 해당컬러를 켜거나 끈다.

조건2 : 서버는 클라이언트에게 다음의 REST API를 제공한다.

 

 

하드웨어

 

LED

 

G - 물리 : 28     wpi - 21

R - 물리 : 31     wpi - 22

B - 물리 : 33     wpi - 23

 

소스 코드

 

svr_led.js

 

const express = require('express');
const gpio = require('node-wiring-pi');
const bodyParser = require('body-parser');
const app = express();

const GREEN = 21;
const RED = 22;
const BLUE = 23;

var mydata = {
    actid:'LED3',
    redcolor:'OFF',
    greencolor:'OFF',
    bluecolor:'OFF'
};

app.use(bodyParser.urlencoded({extended:false}));
app.put('/led',led3control);
app.get('/led',(req,res)=>{
    console.log("Get method");
    res.send("OK");});

app.listen(60001,()=>{
    console.log('SVR_LED.js : 서버(60001)가동중...');
    gpio.wiringPiSetup();
    gpio.pinMode(GREEN,gpio.OUTPUT);
    gpio.pinMode(BLUE,gpio.OUTPUT);
    gpio.pinMode(RED,gpio.OUTPUT);
});

const led3control = (req,res)=>{
    console.log("PUT method로 데이터 수신...");
    if(req.body.actid == 'LED3'){
        if(req.body.redcolor == 'ON'){
            gpio.digitialWrite(RED,1);
            gpio.digitialWrite(GREEN,0);
            gpio.digitialWrite(BLUE,0);
            console.log("빨강LED켰음");
        }
        if(req.body.greencolor == 'ON'){
            gpio.digitialWrite(RED,0);
            gpio.digitialWrite(GREEN,1);
            gpio.digitialWrite(BLUE,0);
            console.log("초록LED켰음");
        }
        if(req.body.bluecolor == 'ON'){
            gpio.digitialWrite(RED,0);
            gpio.digitialWrite(GREEN,0);
            gpio.digitialWrite(BLUE,1);
            console.log("파랑LED켰음");
        }
        res.send("OK");
    }else res.send("FAIL");
}        
        

 

client_led.js

 

const request = require('request');

var data = {
    actid:'LED3',
    redcolor:'ON',
    greencolor:'OFF',
    bluecolor:'OFF'
};

request.put{
    {url:'http://IP주소:60001/led',
    form:data,
    headers:{"content-type":"apllication/x-www-form-urlencoded"}
    },
    function(error,response,body){
        if(!error && response.statusCode == 200){
            console.log(body);
        }
    }
};

댓글