IoT(사물인터넷) 보안 2016년 2학기 3. 라즈베리파이 gpio.

Slides:



Advertisements
Similar presentations
제어기 활용 -GPIO Ch.05 RaspberryPi Sejin Oh. Raspberry Pi 제어기 활용 -GPIO  GPIO (General Purpose Input Output)  마이크로프로세서가 주변장치와 통신하기 위해 범용으로 사용되는 입출력 포트 
Advertisements

시스템소프트웨어 김 영욱 양 오석. 목적  라즈베리파이에서 GPIO 를 이용하여 초음파 센서를 연결하고 거리를 측정해 일 정한 거리안에 사람이 들어오면 파이 카메라를 이용하여 사진을 찍고 데이터 베 이스에 올려 웹에서 사진을 보고 검색을.
Smart IoT 설계 시스템 Lecture 09. Smart IoT 시스템 소개. Smart IoT 설계 시스템 2.
Vision System Lab, Sang-Hun Han
IoT(사물인터넷) 보안 2016년 2학기 4. 라즈베리파이 카메라.
IoT(사물인터넷) 보안 2016년 2학기 2. 라즈베리파이 준비.
PIC는 우리의 친구 한국정보통신대학교 디지털미디어연구소.
원정초등학교 5학년1반 48번 윤민정.
2015년 2학기 PULSE 4 전자물리실험 11주차 – 초음파 거리 측정 실험 - DSU 메카트로닉스 융합공학부 -
Smart IoT 설계 시스템 Lecture 07. 센서와 액츄에이터 실습.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
IoT(사물인터넷) 보안 2016년 2학기 3. 라즈베리파이와 node.js.
(수) 실시 제7회 전국동시지방선거 정당 및 예비후보자를 위한 선거사무안내.
아두이노 프로그래밍 1일차 – Part2 아두이노 사양 강사: 김영준 목원대학교 겸임교수.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
컬러 LED바 이해하기 목차 재료준비 및 브레드 보드 배선 구성하기 컬러 LED바 이해 및 프로그램 실습 응용 작품 만들기.
에서 ( 탭 – [인기 다운로드 | 모든 다운로드] ) Visual Studio 2015
C 프로그래밍.
DC Motor Control.
임베디드 프로그래밍 Lecture #
GPIO RaspberryPi Sejin Oh.
GPIO RaspberryPi Sejin Oh.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
12. 아두이노와 센서를 이용한 제어 - 스마트 폰으로 제어하는 아두이노 -.
IPython Notebook + Spark + TensorFlow on Linux
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
JSON-RPC 서버 만들기 11장 Do it! Node.js 프로그래밍 이지스퍼블리싱 제공 강의 교안 2017/03
고등용 LED를 이용한 재미있는 표현.
스마트온도제어시스템 김수빈 박희준 이상인 (발표자)
사물인터넷(IoT) 융합실습을 위한 교육용 실습장비
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수.
-제어문, 함수, 클래스- IS lab. 김건영 Python -제어문, 함수, 클래스- IS lab. 김건영
2016년 2학기 PULSE 4 Experiment 14 클럭펄스 발생 회로.
2015년 2학기 PULSE 4 전자물리실험 12-클럭펄스 발생 회로 - DSU 메카트로닉스 융합공학부 -
C언어 프로그래밍의 이해 Ch13. 선행처리기와 주석문.
RPi2 SPI 8x8 Dot Matrix LED
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
Raspberry Pi GPIO PWM Servo Motor
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
라즈베리파이 기초과정 (1차시) ㈜헬로앱스 강사: 김영준 목원대학교 겸임교수.
IoT(사물인터넷) 보안 2016년 2학기 3. 라즈베리파이와 node.js.
쉽게 풀어쓴 C언어 Express 제15장 전처리 및 비트연산 C Express Slide 1 (of 29)
아두이노 프로그래밍 1일차 – Part4 값출력 및 디지털 읽기 강사: 김영준 목원대학교 겸임교수
2015년 2학기 PULSE 4 전자물리실험 09-Servo Motor 제어 - DSU 메카트로닉스 융합공학부 -
쉽게 풀어쓴 C언어 Express 제2장 프로그램 작성 과정 C Express.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
디지털공학 및 실험 디지털 공학: 부울대수를 기반으로 하는 논리적인 회로의 입출력에 대하여 공부하고 이를 응용한 기능을 설계하는 과목. 부울대수: 참, 거짓 두 종류의 입력(출력)데이터와 AND, OR, NOT 등의 연산자사이의 관계를 정의해 놓은 학문분야. 값의 명칭:
4. 아두이노로 LED 제어하기 - 스마트 폰으로 제어하는 아두이노 -.
【 6월 1일 】 (‘오늘의 용기 내일의 희망’ 중에서...)
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
전자물리실험 07-발광소자와 수광소자를 이용한 광신호 감지 - DSU 메카트로닉스 융합공학부 - PULSE 4
Ergonomic Multifunctional Celling
#1 배열 활용 #include int main(void) { int i; int grade[5]; grade[0] = 10; grade[1] = 20; grade[2] = 30; grade[3] = 40; grade[4] = 50; for(i=0;i.
-Part2- 제1장 1차원 배열이란 무엇인가.
Introduction to Lab. Instruments
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express Slide 1 (of 25)
결과보고서 실험 12주차. 클럭펄스 발생회로 실험 담당교수 : 이종익 교수(S12) 소속 학년 학번 성명 1.
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
코딩체험교실 아두이노 로봇 코딩 4차산업기술 체험 (SW코딩/자율주행기술).
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Node Red 컴퓨터공학과 오동근 1.
아두이노 프로그래밍 Lecture #
인천SW교육지원센터 체험프로그램 라즈베리파이 이용 포토부스 만들기.
C.
사물인터넷(IoT) 프로그래밍 기초 5. 시리얼통신.
임베디드 프로그래밍 Lecture #
Presentation transcript:

IoT(사물인터넷) 보안 2016년 2학기 3. 라즈베리파이 gpio

3. 라즈베리파이 GPIO

GPIO 기본 연결 방법

GPIO

GPIO

GPIO Extension Board

$ gpio readall

센서 종류

3가지 구현 프로그래밍 1. C 프로그래밍 2. node.js 프로그래밍 3. python 프로그래밍 루트 폴더에 프로젝트용 하부 폴더 작성 $ mkdir rpi $ mkdir c $ mkdir node $ mkdir python

3.1 LED 점등 예제 단자가 긴 쪽이 (+) LED소자의 깎인 쪽이 (-)

Breadboard (빵판) 납땜없이 회로를 손쉽게 구성 선 방향으로 회로 연결됨 - GND 연결 + VCC 연결

저항 (register) 성능이 낮은 전도체의 양쪽 끝 또는 측면에 도선이나 전 도체 2개가 붙어있는 형태로 되어 있음 단위는 옴(ohm) 이며, 기호로는 그리스어의 오메가를 사용 용도 캐패시터 충전율 제한 양극성 트랜지스터와 같은 반도체 부품의 전압 제어 LED 또는 기타 반도체 부품의 과다 전류 방지 다른 부품과 결합하여 사용하는 오디오 회로에서 주파수 응답의 조정 또는 제한 디지털 논리 회로에 입력되는 전압의 풀업 저항 또는 풀다운 저 항용 회로 내 한 지점에서의 전압 제어용

저항 (register)

회로 구성 GPIO.BOARD - 11번 GPIO.BCM – 17번 wiringPI GPIO – 0번 LED 불빛을 밝게 하려면 저항값이 작은 저항을 이용 http://blog.naver.com/elepartsblog/220284169123

blink.c - C언어 개발 blink.c // blink.c #include <wiringPi.h> int main(void) {   wiringPiSetup();   int pin=0;   pinMode(pin, OUTPUT);   for(;;)   {     digitalWrite(pin, HIGH);     delay(1000);     digitalWrite(pin, LOW);   }   return 0; } wiringPi 설치 $ sudo apt-get install wiringpi 소스 작성 $ nano blink.c 컴파일 $ gcc -Wall -o blink blink.c -lwiringPi 실행 $ sudo ./blink

blink.js – node.js 개발 $ cd rpi/node 패키지 설치 소스 작성 실행 $ npm install wiring-pi $ npm install sleep node_modules 폴더에 설치됨 소스 작성 $ vi blink.js 실행 $ sudo node blink.js 루트 권한이어야 실행 가능 컴파일 없이 직접 실행 // blink.js var wpi = require('wiring-pi'); var sleep = require('sleep'); wpi.setup('gpio'); wpi.wiringPiSetup(); wpi.pinMode(0, wpi.OUTPUT); while(true) {  wpi.digitalWrite(0, wpi.HIGH);  sleep.sleep(1);  wpi.digitalWrite(0, wpi.LOW); }

blink.py – python 개발 $ cd rpi/python 소스 작성 실행 $ vi blink.py $ sudo python blink.py 컴파일 없이 직접 실행 import RPi.GPIO as GPIO import time  GPIO.setmode(GPIO.BOARD) pin = 11 GPIO.setup(pin, GPIO.OUT) try:   while True:     GPIO.output(pin, True)     time.sleep(1)     GPIO.output(pin, False) finally:   print("Cleaning up")   GPIO.cleanup() GPIO.setmode(GPIO.BOARD) pin = 11 GPIO.setmode(GPIO.BCM) pin = 17

Python GPIO 번호 GPIO.BOARD GPIO.BCM Broadcom SOC channel

LED Blink – node.js 개발 회로 구성

회로 구성

LED 제어 프로그래밍 LED 제어 프로그램 패키지 설치 소스 작성 실행 두개의 LED를 번갈아 켜고 끄기 $ npm install wiring-pi $ npm install sleep 소스 작성 $ vi led.js 실행 $ sudo node led.js 루트 권한이어야 실행 가능 // 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); }

3.2 LED+스위치 활용 스위치와 LED를 이용한 활용 http://blog.naver.com/elepartsblog/220285369508 Yellow, Red, Green 3개의 LED를 3개의 스위치에 연결 스위치를 누르면 LED가 잠시 켜지도록 구성 프로그래밍에 의한 SW적인 스위치 동작

LED+스위치 활용 회로 구성

LED+스위치 활용 3.3v GND

LED+스위치 활용 $ vi sw-led.c for(;;) { digitalWrite(LED_Y, 0);   {     digitalWrite(LED_Y, 0);     digitalWrite(LED_R, 0);     digitalWrite(LED_G, 0);     if(digitalRead(SW_Y)==0) {       digitalWrite(LED_Y, 1);       delay(1000);     }     if(digitalRead(SW_R)==0) {       digitalWrite(LED_R, 1);     if(digitalRead(SW_G)==0) {       digitalWrite(LED_G, 1);   }   return 0; } #include <stdio.h> #include <wiringPi.h> #define SW_Y 21 // GPIO 5 Yellow SW #define SW_R 22 // GPIO 6 Red SW #define SW_G 23 // GPIO 13 Green SW #define LED_Y 27 // GPIO 16 Yellow LED #define LED_R 28 // GPIO 20 Red LED #define LED_G 29 // GPIO 21 Green LED int main(void) {   //  if(wiringPiSetup()== -1) return 1;   wiringPiSetup();   pinMode(SW_Y, INPUT);   pinMode(SW_R, INPUT);   pinMode(SW_G, INPUT);   pinMode(LED_Y, OUTPUT);   pinMode(LED_R, OUTPUT);   pinMode(LED_G, OUTPUT);

3.3 초음파 센서 제어 초음파 센서 제어 http://blog.naver.com/elepartsblog/220288246775 초음파 센서를 이용한 거리 측정 가까운 거리에 물체 또는 사람이 있는지 확인 음파를 발사하여 반사되는 신호의 시간을 측정하여 거리를 계산 거리 = uS / 58 centimeters HC-SR04 5V Supply Trigger Pulse Input Echo Pulse Output 0V Ground

초음파 센서 제어 회로 구성 VCC 위치 확인 GND 위치 확인

sonic.c for(;;) #include <stdio.h> { #include <wiringPi.h>   {     digitalWrite(TRIG,LOW);     usleep(2);     digitalWrite(TRIG,HIGH);     usleep(20);     while(digitalRead(ECHO)==LOW);     long startTime = micros();     while(digitalRead(ECHO)==HIGH);     long travelTime = micros() - startTime;     int distance = travelTime / 58;     printf("Distance %3d : %d cm \n", i, distance);     i++;     delay(500);   } } #include <stdio.h> #include <wiringPi.h> #define TRIG 5  #define ECHO 4 int main(void) {   int distance = 0;   int pulse = 0;   int i=0;   if(wiringPiSetup()==-1) return 1;   pinMode(TRIG,OUTPUT);   pinMode(ECHO,INPUT);

Sonic.js // sonic.js var wpi = require("wiring-pi"); var sleep = require("sleep"); var microtime = require('microtime'); var TRIG = 5; var ECHO = 4; wpi.setup('gpio'); wpi.wiringPiSetup(); wpi.pinMode(TRIG, wpi.OUTPUT); wpi.pinMode(ECHO, wpi.INPUT); function getDistance(TRIG, ECHO) { wpi.digitalWrite(TRIG, wpi.LOW); sleep.usleep(2); wpi.digitalWrite(TRIG, wpi.HIGH); sleep.usleep(20); while(wpi.digitalRead(ECHO) == wpi.LOW); var startTime = microtime.now(); while(wpi.digitalRead(ECHO) == wpi.HIGH); var endTime = microtime.now(); var travelTime = endTime - startTime; var distance = travelTime/58; return distance; } var i = 0; while(true) { var d = Math.round(getDistance(TRIG, ECHO)); console.log("Distance "+i+" : "+ d + " cm"); sleep.sleep(1); i++;

Sonic.py import RPi.GPIO as GPIO try: import time while True: GPIO.setmode(GPIO.BOARD) trig = 18 echo = 16 GPIO.setup(trig, GPIO.OUT) GPIO.setup(echo, GPIO.IN) distance = 0 i = 0 try: while True: GPIO.output(trig, False) time.sleep(0.5) GPIO.output(trig, True) time.sleep(0.00001) while GPIO.input(echo)==0 : timeStart = time.time() while GPIO.input(echo)==1 : timeEnd = time.time() travelTime = timeEnd - timeStart distance = travelTime * 17000 distance = round(distance, 2) print "Distance : ", distance, " cm" time.sleep(1) finally: print("Cleaning up") GPIO.cleanup()

초음파센서+LED 초음파센서와 LED의 결합 활용 접근을 감지하면 LED에 불을 켜도록 만들어보자. 앞의 두가지 소스를 결합 활용

sonic-led.c for(;;) { digitalWrite(TRIG,LOW); usleep(2);   {     digitalWrite(TRIG,LOW);     usleep(2);     digitalWrite(TRIG,HIGH);     usleep(20);     while(digitalRead(ECHO)==LOW);     long startTime = micros();     while(digitalRead(ECHO)==HIGH);     long travelTime = micros() - startTime;     int distance = travelTime / 58;     printf("Distance %3d : %d cm \n", i, distance);     if (distance < 10)      {       digitalWrite(pin, HIGH);       delay(500);       digitalWrite(pin, LOW);     }     i++;     delay(500);   } } #include <stdio.h> #include <wiringPi.h> #define TRIG 5  #define ECHO 4 #define pin 0 int main(void) {   int distance = 0;   int pulse = 0;   int i=0;   if(wiringPiSetup()==-1) return 1;   pinMode(TRIG,OUTPUT);   pinMode(ECHO,INPUT);   pinMode(pin,OUTPUT);

sonic-led.js // sonic.js var wpi = require("wiring-pi"); var sleep = require("sleep"); var microtime = require('microtime'); var TRIG = 5; var ECHO = 4; var led = 0; wpi.setup('gpio'); wpi.wiringPiSetup(); wpi.pinMode(TRIG, wpi.OUTPUT); wpi.pinMode(ECHO, wpi.INPUT); wpi.pinMode(led, wpi.OUTPUT); function getDistance(TRIG, ECHO) { wpi.digitalWrite(TRIG, wpi.LOW); sleep.usleep(2); wpi.digitalWrite(TRIG, wpi.HIGH); sleep.usleep(20); while(wpi.digitalRead(ECHO) == wpi.LOW); var startTime = microtime.now(); while(wpi.digitalRead(ECHO) == wpi.HIGH); var endTime = microtime.now(); var travelTime = endTime - startTime; var distance = travelTime/58; return distance; } var i = 0; wpi.digitalWrite(led, wpi.LOW); while(true) { var d = Math.round(getDistance(TRIG, ECHO)); console.log("Distance "+i+" : "+ d + " cm"); if (d < 10) { wpi.digitalWrite(led, wpi.HIGH); sleep.sleep(1); console.log(" - LED on"); } i++;

sonic-led.py try: import RPi.GPIO as GPIO while True: import time GPIO.setmode(GPIO.BOARD) led = 11 trig = 18 echo = 16 GPIO.setup(led, GPIO.OUT) GPIO.setup(trig, GPIO.OUT) GPIO.setup(echo, GPIO.IN) distance = 0 i = 0 try: while True: GPIO.output(trig, False) time.sleep(0.5) GPIO.output(trig, True) time.sleep(0.00001) while GPIO.input(echo)==0 : timeStart = time.time() while GPIO.input(echo)==1 : timeEnd = time.time() travelTime = timeEnd - timeStart distance = travelTime * 17000 distance = round(distance, 2) print "Distance : ", distance, " cm" if distance < 10 : GPIO.output(led, True) GPIO.output(led, False) print " -- LED on " time.sleep(1) finally: print("Cleaning up") GPIO.cleanup()

3.4 적외선 물체감지센서 제어 적외선 물체감지센서 제어 http://blog.naver.com/elepartsblog/220294594150 적외선을 이용하여 물체 존재를 감지

적외선 물체감지센서 제어 회로 구성

적외선 물체감지센서 제어 $ vi pir.c #include <stdio.h> #include <wiringPi.h> #define PIR 4 // BCM_GPIO 23 int main(void) { if(wiringPiSetup()==-1) return 1; pinMode(PIR, INPUT); for(;;) if(digitalRead(PIR)==0) { printf("Detected \n"); delay(1000); } else { printf(" -- not detected \n"); return 0;

3.5 온습도 센서 온습도 센서 DHT11 제품에 따라 핀 배치가 다르므로 주의

온습도 센서 회로 연결 VCC GND DOUT: GPIO 23

패키지 설치 Adafruit 패키지 설치 테스트 $ git clone https://github.com/adafruit/Adafruit_Python_DHT.git $ cd Adafruit_Python_DHT $ sudo python setup.py install 테스트 $ cd Adafruit_Python_DHT #소스코드 다운로드한 곳으로 이동 $ cd examples $ sudo ./AdafruitDHT.py 11 23 # 온도센서는 DHT11이고 GPIO 포트는 2번으로 설정 pi@rpi-sultan:~/rpi/python/Adafruit_Python_DHT/examples $ sudo ./AdafruitDHT.py 11 23 Temp=31.0* Humidity=41.0% pi@rpi-sultan:~/rpi/python/Adafruit_Python_DHT/examples $ 실행 파일

dht.py 코드 작성 실행 $ vi dht.py import Adafruit_DHT sensor = Adafruit_DHT.DHT11 # GPIO23 (pin no: #16) pin = 23 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: print "Temp={0:0.1f}*C Humidity={1:0.1f}%".format(temperature, humidity) else: print "Failed to get reading." pi@rpi-sultan:~/rpi/python/Adafruit_Python_DHT/examples $ sudo python dht.py Temp=31.0*C Humidity=41.0% pi@rpi-sultan:~/rpi/python/Adafruit_Python_DHT/examples $

dht.py import Adafruit_DHT import time sensor = Adafruit_DHT.DHT11 # GPIO23 (pin no: #16) pin = 23 try: while True: humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) print "Temp={0:0.1f}*C Humidity={1:0.1f}%".format(temperature, humidity) time.sleep(3) finally: print "Cleaning up"

GPIO GUI 스위치 Raspberry Pi Node.js Server - GPIO GUI 방법 https://www.youtube.com/watch?v=sRuG9X2dEOo https://tutorials-raspberrypi.com/setup-raspberry-pi-node-js- webserver-control-gpios/ 그래픽 UI를 이용한 스위치 조작 방법 $ git clone https://github.com/tutRPi/Raspberry-Pi-Simple- Web-GPIO-GUI $ cd Raspberry-Pi-Simple-Web-GPIO-GUI $ npm install $ sudo npm start 또는 sudo node ./bin/www

GPIO GUI 스위치 사용된 기술 Node.js Express Ajax Bootstrap Jade