GPIO Ch 05 Raspberry Pi Sejin Oh GPIO
제어기 활용-GPIO Ch. 05 Raspberry. Pi Sejin Oh
제어기 활용-GPIO v Raspberry Pi b+ GPIO 핀 배치 Raspberry Pi 3
제어기 활용-GPIO Library 설치 1. 라즈베리 파이의 업데이트 및 업그레이드 실시 $ sudo apt-get update $ sudo apt-get upgrade 2. 소스 관리 툴인 git을 다운로드 $ sudo apt-get install git-core 3. Git을 이용하여 “Wiring Pi” 라이브러리를 다운로드 $ git clone git: //git. drogon. net/wiring. Pi Raspberry Pi 4
제어기 활용-GPIO Library 설치 4. 빌드 및 설치 진행 $ cd wiring. Pi $. /build 5. 설치 확인 $ gpio -v 설치 확인 (예시) Gpio version: 2. 08 Copyright © 2012 -2013 Gordon Henderson This is free software with ABSOLUTELY NO WARRANTY For details type: gpio –warranty This Raspberry Pi is a reversion 2 board Raspberry Pi 5
제어기 활용-GPIO 출력 테스트 #include <stdio. h> #include <wiring. Pi. h> while(1) { digital. Write(LED 1, 1); digital. Write(LED 2, 1); #define LED 1 23 #define LED 2 24 delay(500); // ms int main(void) { if(wiring. Pi. Setup. Gpio()==-1) return 1; digital. Write(LED 1, 0); digital. Write(LED 2, 0); pin. Mode(LED 1, OUTPUT); pin. Mode(LED 2, OUTPUT); } delay(500); return 0; } Raspberry Pi 8
제어기 활용-GPIO 출력 테스트 3. 프로그램 빌드 $ gcc –o output. c -lwiring. Pi 4. 프로그램 실행 $ sudo. /output Raspberry Pi 9
제어기 활용-GPIO 출력 테스트 v python을 이용한 LED on/off 테스트 § $ sudo python import RPi. GPIO as GPIO import time GPIO. setmode(GPIO. BCM) GPIO. setup(23, GPIO. OUT) GPIO. setup(24, GPIO. OUT) while (True): GPIO. output(23, GPIO. output(24, time. sleep(0. 5) Raspberry Pi True) False) 10
제어기 활용-GPIO 입력 테스트 v 프로그램 작성 1. 작업 폴더로 이동 • $ sudo cd ~/gpio pin. Mode(SW, INPUT); 2. 프로그램 작성 • $ sudo nano input. c while(1) { digital. Write(LED 1, 0); digital. Write(LED 2, 0); #include <stdio. h> #include <wiring. Pi. h> #define LED 23 //gpio 23 #define LED 24 //gpio 24 #define SW 25 //gpio 25 if(digital. Read(SW) == 1) { digital. Write(LED 1, 1); digital. Write(LED 2, 1); delay(1000); } int main(void) { if(wiring. Pi. Setup. Gpio() == -1) return 1; } pin. Mode(LED 1, OUTPUT); pin. Mode(LED 2, OUTPUT); Raspberry Pi 12 } return 0;
제어기 활용-GPIO Ultra Sonic Sensor Raspberry Pi 15 VCC 5 V연결 GND연결 Echo GPIO 23 연결 Trigger GPIO 24 연결
제어기 활용-GPIO Ultra Sonic Sensor – ultrasonic. c #include <stdio. h> #include <wiring. Pi. h> digital. Write(TRIG, LOW); #define TRIG 24 #define ECHO 23 while(digital. Read(ECHO) == LOW); long start. Time = micros(); while(digital. Read(ECHO) == HIGH); long travel. Time = micros() - start. Time; int main(void) { int distance = 0; int pulse = 0; if(wiring. Pi. Setup. Gpio() == -1) return 1; pin. Mode(TRIG, OUTPUT); pin. Mode(ECHO, INPUT); } } int distance = travel. Time / 58; printf("Distance: %d cmn", distance); delay(100); for(; ; ){ digital. Write(TRIG, LOW); usleep(2); digital. Write(TRIG, HIGH); usleep(20); Raspberry Pi 16
제어기 활용-GPIO Ultra Sonic Sensor Raspberry Pi 17
제어기 활용-GPIO 온습도 센서 v 온습도 센서(DHT 11 Sensor) Raspberry Pi 18 VCC 3 V연결 GND연결 Data GPIO 4 연결 Resistance 10 K
제어기 활용-GPIO 온습도 센서 v Raspberry Pi b+ GPIO 핀 배치 Raspberry Pi 19
제어기 활용-GPIO 온습도 센서 – C file #include <wiring. Pi. h> #include <stdio. h> #include <stdlib. h> #include <stdint. h> #define MAXTIMINGS 83 #define DHTPIN 7 void read_dht 11_dat() { uint 8_t laststate = HIGH ; uint 8_t counter = 0 ; uint 8_t j = 0, i ; uint 8_t flag = HIGH ; uint 8_t state = 0 ; float f ; int dht 11_dat[5] = {0, } ; uint 8_t는 unsigned 8 bit 타입 변수 char, int가 word의 크기에 따라 달라지는 것을 방지하기 위함 Raspberry Pi 20
제어기 활용-GPIO 온습도 센서 – C File dht 11_dat[0] = dht 11_dat[1] = dht 11_dat[2] = dht 11_dat[3] = dht 11_dat[4] = 0 ; pin. Mode(DHTPIN, OUTPUT) ; digital. Write(DHTPIN, LOW) ; delay(18) ; 처음 신호선으로 LOW를 18 ms 동안, 20~40 us 동안 HIGH 신호를 보내주면 Start 신호 본소스에서는 중간값 30 사용 digital. Write(DHTPIN, HIGH) ; delay. Microseconds(30) ; pin. Mode(DHTPIN, INPUT) ; 라즈베리 파이가 신호를 받아야하므로 INPUT MAXTIMINGS 83 40개 데이터 비트 * 2(Low, High) + 3개 처음비트 for (i = 0; i < MAXTIMINGS; i++) { counter = 0 ; high->low/low->high 반대안되면 while ( digital. Read(DHTPIN) == laststate) { 카운트 증가 시키며 200 us 대기 counter++ ; delay. Microseconds(1) ; if (counter == 200) break ; 200 us 동안 변화 없을시 break } Raspberry Pi 21
제어기 활용-GPIO 온습도 센서 – C File 온습도 센서는 신호의 길이로 데이 터를 쓰기 때문에 counter가 20넘 어가면 1을 씀(or연산 사용) laststate = digital. Read(DHTPIN) ; if (counter == 200) break ; } //0~3비트 버리고 짝수 번째 비트인지 확인 if ((i >= 4) && (i % 2 == 0)) { dht 11_dat[j / 8] <<= 1 ; if (counter > 20) dht 11_dat[j / 8] |= 1 ; j++ ; } // 0, 1, 2, 3 더해서 패리티 비트 4와 비교 if ((j >= 40) && (dht 11_dat[4] == ((dht 11_dat[0] + dht 11_dat[1] + dht 11_dat[2] + dht 11_dat[3]) & 0 xff))) { printf("humidity = %d. %d %% Temperature = %d. %d *C n", dht 11_dat[0], dht 11_dat[1], dht 11_dat[2], dht 11_dat[3]) ; } 체크썸 0 xff else printf("Data get failedn") ; } Raspberry Pi 22
제어기 활용-GPIO 온습도 센서 – C File int main(void) { printf("dht 11 Raspberry pin") ; if (wiring. Pi. Setup() == -1) exit(1) ; } while (1) { read_dht 11_dat() ; delay(1000) ; } return 0 ; Raspberry Pi 23
제어기 활용-GPIO Web. IOPi 설치 v webiopi 다운로드 및 설치 § $ wget http: //webiopi. googlecode. com/files/Web. IOPi-0. 6. 0. tar. gz § $ tar xvzf Web. IOPi-0. 6. 0. tar. gz § $ cd Web. IOPi-0. 6. 0 § $ sudo. /setup. sh Raspberry Pi 27
제어기 활용-GPIO Web. IOPi 설치 v webiopi Patch § $ wget http: //sourceforge. net/projects/webiopi/files/Web. IOPi 0. 7. 1. tar. gz § $ tar xvzf Web. IOPi-0. 7. 1. tar. gz § $ cd Web. IOPi-0. 7. 1 § $ wget https: //raw. githubusercontent. com/doublebind/raspi/master/webio pi-pi 2 bplus. patch § $ patch -p 1 -i webiopi-pi 2 bplus. patch § $ sudo. /setup. sh Raspberry Pi 28
제어기 활용-GPIO Web. IOPi 설치 v webiopi 시작 § $ sudo service webiopi start v webiopi 종료 § $ sudo service webiopi stop Raspberry Pi 29
제어기 활용-GPIO Web. IOPi를 이용한 LED 제어 v LED 제어 예제 프로그램 다운로드 § $ git clone https: //github. com/rasplay/traffic_light. git § $ cd traffic_light § $ sh setup. sh v 접속 후 예제 프로그램 확인 § 브라우저에서 http: //IP주소: 8000 접속 확인 Raspberry Pi 31
Thank you Raspberry Pi 34
- Slides: 34