IoT(사물인터넷) 보안 2016년 2학기 3. 라즈베리파이와 node.js
3. 라즈베리파이와 Node.js
Node.js 개발환경의 장점 사물인터넷의 최종 사용자 환경은 웹서비스 Node.js는 자바스크립트 기반의 서버 개발 환경 MEAN stack을 이용하면 서버, 클라이언트, DB 등의 전체 웹 플 랫폼을 자바스크립트 기반으로 개발할 수 있음 개발자들에게 최근 자바스크립트가 인기가 높아지고 있음
Node.js 설치 라즈베리파이 설치, 로그인, 터미널 열기 시스템 업그레이드, 업데이트 Node.js 설치 $ sudo apt-get upgrade $ sudo apt-get update Node.js 설치 $ sudo apt-get install nodejs $ node -v : node.js의 버전 확인 (v0.10.29) $ npm –v : 노드 설치 관리자 npm의 버전 확인 (1.4.21) 오래된 버전이 설치됨 Node.js 지우기 $ sudo apt-get remove nodejs
Node.js 최신 버전 설치 최신버전 패키지 다운로드 설치 버전 확인 $ wget http://node-arm.herokuapp.com/node_latest_armhf.deb 설치 $ sudo dpkg -i node_latest_armhf.deb 설치 후 로그아웃 후 다시 로그인 버전 확인 $ node –v (v4.2.1) $ npm –v (2.14.7)
Node.js 웹서버 테스트 Express 를 이용한 간단한 웹서버 https://github.com/scotch-io/mean-machine- code/tree/master/06-node-server/express-server 새로운 폴더 생성 및 이동: md test 프로젝트 초기화: npm init Express 설치 : npm install express # index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Super Cool Site</title> <style> body { text-align:center; background:#EFEFEF; padding-top:50px; } </style> </head> <body> <h1>Hello Universe!</h1> </body> </html> # Server.js // load the express package and create our app var express = require('express'); var app = express(); // set the port based on environment (more on environments later) var port = 1337; // send our index.html file to the user for the home page app.get('/', function(req, res) { res.sendFile(__dirname + '/index.html'); }); // start the server app.listen(1337); console.log('1337 is the magic port!');
Node.js 웹서버 테스트 Mean machine code 참조 07-node-routing 테스트 https://github.com/scotch-io/mean-machine-code 07-node-routing 테스트 프로젝트 폴더 만들기: node/07-node-routing 프로젝트 폴더로 이동 $ npm init 명령 실행 Index.html 카피 Server.js 카피 express 패키지 설치 $ npm install express --save 서버 실행 $ node server.js 웹브라우저로 테스트 http://localhost:1337/users/
MongoDB 설치 mongoDB는 문서 기반의 NoSQL 데이터베이스 설치 서버 시작 클라이언트로 서버에 연결 https://www.mongodb.com/ 설치 $ sudo apt-get install mongodb-server 서버 시작 $ sudo service mongod start 클라이언트로 서버에 연결 $ mongo
Node.js로 라즈베리파이 다루기 Npm을 이용한 관련 패키지 설치 Raspberry pi 관련 패키지 Npm (node package manager) https://www.npmjs.com/ Raspberry pi 관련 패키지 Wiring-pi gpio pi-gpio rpi-gpio raspberry
라즈베리파이+node.js IoT 프로젝트 Circulus 프로젝트 http://circul.us/view/common/index.html Opensource H/W + Node JS IoT 따라잡기 Lesson 1 - Introduction Opensource H/W + Node JS IoT 따라잡기 Lesson 2 - Linux Opensource H/W + Node JS IoT 따라잡기 Lesson 3 - NodeJS Opensource H/W + Node JS IoT 따라잡기 Lesson 4 - Sensor Opensource H/W + Node JS IoT 따라잡기 Lesson 5 - Project
Wiring-pi를 이용한 GPIO 제어 Wiring-pi 설치 Wiring-pi의 활용 API 문서 참조 도전 과제 $ npm install wiring-pi Wiring-pi의 활용 Node.js 프로그램에서 활용 var wpi = require('wiring-pi'); API 문서 참조 https://github.com/WiringPi/WiringPi- Node/blob/master/DOCUMENTATION.md 도전 과제 GPIO를 이용한 LED 제어 프로그래밍
GPIO
LED 동작 단자가 긴 쪽이 (+) LED소자의 깎인 쪽이 (-)
Breadboard (빵판) 회로 연결 방향
저항 (register) 성능이 낮은 전도체의 양쪽 끝 또는 측면에 도선이나 전 도체 2개가 붙어있는 형태로 되어 있음 단위는 옴(ohm) 이며, 기호로는 그리스어의 오메가를 사용 용도 캐패시터 충전율 제한 양극성 트랜지스터와 같은 반도체 부품의 전압 제어 LED 또는 기타 반도체 부품의 과다 전류 방지 다른 부품과 결합하여 사용하는 오디오 회로에서 주파수 응답의 조정 또는 제한 디지털 논리 회로에 입력되는 전압의 풀업 저항 또는 풀 다운 저 항용 회로 내 한 지점에서의 전압 제어용
저항 (register)
회로 구성 (-) GND (+) GPIO 3 (-) GND (+) GPIO 4
회로 구성
LED 제어 프로그래밍 LED 제어 프로그램 패키지 설치 소스 작성 실행 두개의 LED를 번갈아 켜고 끄기 $ npm install wiring-pi $ npm install sleep 소스 작성 $ vi led.js 실행 $ sudo node led.js 루트 권한이어야 실행 가능 var wpi = require('wiring-pi'); var sleep = require('sleep'); wpi.setup('gpio'); wpi.wiringPiSetup(); wpi.pinMode(3, wpi.OUTPUT); wpi.pinMode(4, wpi.OUTPUT); while(true) { wpi.digitalWrite(3, wpi.LOW); wpi.digitalWrite(4, wpi.HIGH); sleep.sleep(1); wpi.digitalWrite(4, wpi.LOW); wpi.digitalWrite(3, wpi.HIGH); }
실행 결과