사물인터넷 노트4_라즈베리파이기본

22
사물인터넷 Internet of Things (IoT) CHAPTER 4 _라즈베리파이 기본

Upload: dong-hwa-jeong

Post on 18-Jul-2015

278 views

Category:

Technology


8 download

TRANSCRIPT

Page 1: 사물인터넷 노트4_라즈베리파이기본

사물인터넷 Internet of Things (IoT)

CHAPTER 4 _라즈베리파이 기본

Page 2: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 1 라즈베리파이란

영국에서 개발된 신용카드보다 조금 더 큰 사이즈의 소형 컴퓨터 (single-board computer)로 학교에서 컴퓨터 프로그래밍 교육을 촉진하기 위해서 개발됨. 실제 컴퓨터와 마찬가지로, 모니터, 키보드, 마우스 등을 연결할 수 있고, 이더넷 포트가 있음. 컴퓨터와 마찬가지로 시간이 지나면서 성능면에서 진화되는 양상을 보임 독자적인 운영체제(Operating System, OS)를 가지고 있으며, 라즈베리파이 웹사이트에서 무료로 다운로드 받을 수 있는 리눅스 기반 OS.

라즈베리파이

Page 3: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 2 라즈베리파이 비교

Raspberry Pi1 A+ Raspberry Pi1 B+ Raspberry Pi2 B Beaglebone Black Intel Edison

CPU ARM11 ARM11 Cortex A7 Cortex A8 Atom+Quark

Cores 1 1 4 1 2+1

Clock 700MHz 700MHz 900MHz 1000MHz 500MHz

GPU Videocore IV Videocore IV Videocore IV PowerVR SGX530 없음

Memory 256MB 512MB 1GB 512MB 1GB

USB Ports 1 4 4 2 1*

Flash 없음 없음 없음 2GB 4GB

저장 microSD microSD microSD microSD mircoSD

GPIO 40핀 40핀 40핀 2x46핀 70핀

내장형 WIFI 없음 없음 없음 없음 있음

내장형 Bluetooth 없음 없음 없음 없음 있음

사이즈(cm) 6.5x5.3 8.5x5.3 8.5x5.3 8.6x5.3

가격(US) $20 $35 $35 $49 $85

Page 4: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 3 라즈베리파이 레이아웃 및 GPIO (B+, Pi2)

라즈베리파이1 B+와 라즈베리파이2 B의 레이아웃

파이카메라(PiCamera) 확장 쉴드들

Page 5: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 3 라즈베리파이 레이아웃 및 GPIO (B+, Pi2)

라즈베리파이1 B+와 라즈베리파이2 B의 GPIO는 동일

GPIO: General Purpose Input/Output)

import RPi.GPIO as GPIO ## Import GPIO Library import time ## Import 'time' library (for 'sleep') outPin = 7 ## LED connected to pin 7 inPin = 13 ## Switch connected to pin 13 GPIO.setmode(GPIO.BOARD) ## Use BOARD pin numbering GPIO.setup(outPin, GPIO.OUT) ## Set pin 7 to OUTPUT GPIO.setup(inPin, GPIO.IN) ## Set pin 13 to INPUT while True: ## Do this forever value = GPIO.input(inPin) ## Read input from switch if value: ## If switch is released GPIO.output(outPin, 0) ## Turn off LED else: ## Else switch is pressed GPIO.output(outPin, 1) ## Turn on LED GPIO.cleanup() ## Cleanup

Page 6: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 4 라즈베리파이 for 사물인터넷

Why 라즈베리파이?

• 사물인터넷의 꽃인, 센서 네트워크라는 도메인에 적합한 가성비가 훌륭한 모델

• 와이파이 및 이더넷과 연결함으로, 원격 제어 및 모니터링이 가능하며, IoT 컨셉에 맞음

• 다양한 프로그래밍 언어(Java, Python, C 등)을 지원하며, 카메라를 통한 스트리밍이 가능

• 초소형 제품에는 적합하지 않을 수 있으나, 개발 툴 키트로는 훌륭함

• 사물인터넷의 핵심인, 1) 디바이스, 2) 인터넷, 3) 서비스를 모두 충족시킬 수 있는 제품

Page 7: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 5 라즈베리파이에 OS 설치하기

http://www.raspberrypi.org/downloads/

Step 1. 라즈베리파이 웹사이트에 접속해서 압축된 NOOBS 파일을 풀어서 microSD 카드에 저장

Page 8: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 5 라즈베리파이에 OS 설치하기

Step 2. Micro SD 카드를 라즈베리파이에 끼운 후, 전원/HDMI, 키보드, 마우스 등을 연결하고 전원을 인가.

Page 9: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 5 라즈베리파이에 OS 설치하기

Step 3. 대부분의 사람들이 사용하는 Raspbian이라는 OS를 설치 (많은 사람들이 사용하고 있기 때문에, 에러 및 문제를 해결하기 용이)

Page 10: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 5 라즈베리파이에 OS 설치하기

Step 4. 비밀번호 변경, 국가 설정등을 하고 startx를 입력해서 GUI (Graphical User Interface)에 로그인

GUI (Graphical User Interface)

Page 11: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 5 라즈베리파이로 인터넷 연결하기

이더넷 연결시

WIFI 연결시

이더넷: 이더넷 케이블(LAN선)을 라우터에 연결 와이파이: WIFI 동글을 끼우고, 데스크탑의 WIFI config 사용

Page 12: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 5 라즈베리파이 끄고 켜기

Username: pi Password: raspberry

라즈베리파이에는 전원 스위치가 없기 때문에, 전원을 내리기 위해선 다음의 명령어를 통해 시스템을 정지 (halt)시킨 후, 전원 어댑터를 차단한다.

재부팅을 위해서는 –h 대신에 –r 파라미터를 통해 명령하고, 재부팅시 Username과 Password는 각각 pi 와 raspberry이다.

Page 13: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 6 라즈베리파이 에디터 VIM

$sudo apt-get update $sudo apt-get upgrade $sudo apt-get install vim $vim

Page 14: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 6 라즈베리파이 에디터 VIM

알파벳 i 를 누르면 입력상태로 변경

Esc를 누르면 아래 INSERT가 사라짐 저장하기

:w [파일명] ex) :w test.txt

Page 15: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 6 라즈베리파이 에디터 VIM

기본적인 세팅 구축하기 (색깔 Syntax 및 줄번호 등등 $vim ~/.vimrc

Page 16: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 7 라즈베리파이를 활용한 모터 제어

준비물: 라즈베리파이, 브레드보드, T-코블러 브레이크아웃보드, 2N2222 트랜지스터, SG90 1K 저항 2개, 5V 전원

Page 17: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 7 라즈베리파이를 활용한 모터 제어

wiringPi.h 설치 $cd $sudo apt-get update $sudo apt-get upgrade $sudo apt-get install git-core $git clone git://git.drogon.net/wiringPi $cd wiringPi $./build $gpio readall

$gpio readall 결과

Page 18: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 7 라즈베리파이를 활용한 모터 제어

#include <wiringPi.h> //wiringPi.h 선언 #include <stdio.h> #include <stdlib.h> #include <softPwm.h> int main (int argc, char *argv[]) { int pos = 180 ; int dir = 1 ; if (wiringPiSetup() == -1) exit(1) ; //init wiringPi pinMode(0, OUTPUT) ; //set the 0 pin as OUTPUT digitalWrite(0, LOW) ; //0 pin output LOW voltage softPwmCreate(0, 0, 200) ; //pwm initialize HIGH time 0, LOW time 200ms while(1) { pos += dir ; if (pos < 180 || pos > 194) dir *= -1 ; softPwmWrite(0, pos) ; delay(50) ; } return 0 ; }

import RPi.GPIO as gpio import time gpio.setmode(gpio.BCM) gpio.setup(27, gpio.OUT) val = 1 inc = 0.1 try : while True : gpio.output(27, False) time.sleep(val / 1000.0) gpio.output(27, True) time.sleep((20 - val) / 1000.0) val += inc time.sleep(0.05) if val > 2 or val < 0.6 : inc *= -1 except KeyboardInterrupt : gpio.cleanup()

$mkdir ~/py_sources $cd ~/py_sources $vim servo.py

$gcc servo.c -o servo –lwiringPi

$sudo ./servo

$mkdir ~/c_sources $cd ~/c_sources $vim servo.c

$sudo python servo.py

C 코딩 파이썬 코딩

Page 19: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 8 라즈베리파이를 활용한 초음파 센서 사용

준비물: 라즈베리파이, 브레드보드, T-코블러 브레이크아웃보드, 2N2222 트랜지스터, SG90 1K 저항 2개, 5V 전원

5.0V

GND

13번핀 (BCM기준)

19번핀 (BCM기준)

Page 20: 사물인터넷 노트4_라즈베리파이기본

#include <wiringPi.h> #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { int trig = 23 ; int echo = 24 ; int start_time, end_time ; float distance ;

$cd $cd ~/c_sources $vim servo.c

$gcc ultra.c -o ultra –lwiringPi

$sudo ./ultra

C 코딩

Chapter 4. 8 라즈베리파이를 활용한 초음파 센서 사용

if (wiringPiSetup() == -1) exit(1) ; pinMode(trig, OUTPUT) ; pinMode(echo , INPUT) ; while(1) { digitalWrite(trig, LOW) ; delay(500) ; digitalWrite(trig, HIGH) ; delayMicroseconds(10) ; digitalWrite(trig, LOW) ; while (digitalRead(echo) == 0) ; start_time = micros() ; while (digitalRead(echo) == 1) ; end_time = micros() ; distance = (end_time - start_time) / 29. / 2. ; printf("distance %.2f cm\n", distance) ; } return 0 ; }

Page 21: 사물인터넷 노트4_라즈베리파이기본

import RPi.GPIO as gpio import time gpio.setmode(gpio.BCM) trig = 13 echo = 19 print "start" gpio.setup(trig, gpio.OUT) gpio.setup(echo, gpio.IN)

$cd $cd py_sources $vim ultra.py

$sudo python ultra.py

파이썬 코딩

Chapter 4. 8 라즈베리파이를 활용한 초음파 센서 사용

try : while True : gpio.output(trig, False) time.sleep(0.5) gpio.output(trig, True) time.sleep(0.00001) gpio.output(trig, False) while gpio.input(echo) == 0 : pulse_start = time.time() while gpio.input(echo) == 1 : pulse_end = time.time() pulse_duration = pulse_end - pulse_start distance = pulse_duration * 17000 distance = round(distance, 2) print "Distance : ", distance, "cm" except : gpio.cleanup()

Page 22: 사물인터넷 노트4_라즈베리파이기본

Chapter 4. 8 라즈베리파이를 활용한 초음파 센서 사용

• 초음파센서의 거리에 따른 값을 출력 • 프로그램을 멈추려면 ctrl + c

결과 화면