GPIO 출력 테스트

Download Report

Transcript GPIO 출력 테스트

GPIO
RaspberryPi
Sejin Oh
GPIO
Raspberry Pi
2
GPIO
GPIO
 GPIO (General Purpose Input Output)
 마이크로프로세서가 주변장치와 통신하기 위해 범용으로 사용되는
입출력 포트
 입력과 출력을 마음대로 선택할 수 있고, 0과 1의 출력 신호를 임의
로 만들어줄 수 있는 구조를 가진다.
 GPIO 라이브러리
 라즈베리 파이의 GPIO를 제어할 수 있는 언어
• C, C++, C#, Python Perl, Ruby, Java등 매우 다양함
 각 언어에 따라 사용자들이 GPIO 라이브러리를 제작하여 공유하고
있다.
 wiringPi : 공개된 라이브러리 중 GPIO 제어 속도가 빠름
Raspberry Pi
3
GPIO
GPIO
 Raspberry Pi b+ GPIO 핀 배치
Raspberry Pi
4
GPIO
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/wiringPi
Raspberry Pi
5
GPIO
GPIO Library 설치
4. 빌드 및 설치 진행
$ cd wiringPi
$ ./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
6
GPIO
GPIO 출력 테스트
 GPIO의 출력을 이용하여 LED on/off 제어 테스트
 LED 회로를 구성하여 GPIO에 High 값을 출력해주면 LED는 켜짐
 GPIO에 Low 값을 출력하게 되면 LED는 꺼짐
 LED 2개, 저항 220Ω 2개, GPIO 23번 핀 이용
Raspberry Pi
7
GPIO
GPIO 출력 테스트
1. 작업 폴더 생성 및 이동
$ mkdir led
$ cd led
2. 프로그램 작성
$ sudo nano led.c
Raspberry Pi
8
GPIO
GPIO 출력 테스트
#include <stdio.h>
#include <wiringPi.h>
while(1)
{
digitalWrite(LED, 1);
#define LED 23
delay(500); // ms
int main(void)
{
if(wiringPiSetupGpio()==-1)
return 1;
digitalWrite(LED, 0);
}
pinMode(LED, OUTPUT);
return 0;
}
Raspberry Pi
delay(500);
9
GPIO
GPIO 출력 테스트
3. 프로그램 빌드
$ sudo gcc –o led led.c -lwiringPi
4. 프로그램 실행
$ sudo ./led
Raspberry Pi
10
GPIO
GPIO 출력 테스트
 GPIO의 출력을 이용하여 LED on/off 제어 테스트
 LED 회로를 구성하여 GPIO에 High 값을 출력해주면 LED는 켜짐
 GPIO에 Low 값을 출력하게 되면 LED는 꺼짐
 LED 2개, 저항 220Ω 2개, GPIO 23번 핀, 24번 핀 이용
Raspberry Pi
11
GPIO
GPIO 출력 테스트
1. 작업 폴더 생성 및 이동
$ mkdir led2
$ cd led2
2. 프로그램 작성
$ sudo nano led2.c
Raspberry Pi
12
GPIO
GPIO 출력 테스트
#include <stdio.h>
#include <wiringPi.h>
while(1)
{
digitalWrite(LED1, 1);
digitalWrite(LED2, 1);
#define LED1 23
#define LED2 24
delay(500); // ms
int main(void)
{
if(wiringPiSetupGpio()==-1)
return 1;
digitalWrite(LED1, 0);
digitalWrite(LED2, 0);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
}
delay(500);
return 0;
}
Raspberry Pi
13
GPIO
GPIO 출력 테스트
3. 프로그램 빌드
$ sudo gcc –o led2 led2.c -lwiringPi
4. 프로그램 실행
$ sudo ./led2
Raspberry Pi
14
GPIO
Five LED Lighting
Raspberry Pi
15
GPIO
Five LED Lighting
 결과확인
Raspberry Pi
16
GPIO
응용 – Five LED Lighting
 5개의 LED 순차적으로 ON/OFF
Raspberry Pi
17
GPIO
GPIO 출력 테스트
 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)
GPIO.output(23,
GPIO.output(24,
time.sleep(0.5)
Raspberry Pi
True)
True)
False)
False)
18
GPIO
GPIO 입력 테스트
 스위치 회로
 스위치의 on/off 신호에 따라 LED가 켜지고 꺼지는 실습
 GPIO 입력 테스트에 사용될 GPIO는 25번
 스위치에 10KΩ 연결
Raspberry Pi
19
GPIO
GPIO 입력 테스트
 프로그램 작성
1. 작업 폴더로 이동
•
2.
$ sudo cd ~/gpio
pinMode(SW, INPUT);
프로그램 작성
•
$ sudo nano input.c
while(1)
{
digitalWrite(LED1, 0);
digitalWrite(LED2, 0);
#include <stdio.h>
#include <wiringPi.h>
#define LED1 23 //gpio 23
#define LED2 24 //gpio 24
#define SW 25 //gpio 25
if(digitalRead(SW) == 1)
{
digitalWrite(LED1, 1);
digitalWrite(LED2, 1);
delay(1000);
}
int main(void)
{
if(wiringPiSetupGpio() == -1)
return 1;
}
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
Raspberry Pi
20
}
return 0;
GPIO
GPIO 입력 테스트
 프로그램 작성
3. 프로그램 빌드
•
4.
프로그램 실행
•
Raspberry Pi
$ sudo –o input input.c -lwiringPi
$ sudo ./input
21
GPIO
안전 종료를 위한 매크로 버튼
 종료 버튼
 라즈베리 파이에는 전원 종료/재 시작 버튼이 없다. GPIO 기능을 이
용하여 버튼을 누르면 안전하게 자동 재부팅 및 자동 종료가 되도록
할 수 있다.
 실습에서는 GPIO 입력으로 23, 16번을 사용, 스위치에 10KΩ 연결
Raspberry Pi
22
GPIO
안전 종료를 위한 매크로 버튼 – buttonforhalt.c
#include <stdio.h>
#include <wiringPi.h>
#define BT1 23
#define BT2 16
int main(void){
if (wiringPiSetupGpio() == -1){
return 1;
}
pinMode(BT1, INPUT);
pinMode(BT2, INPUT);
Raspberry Pi
}
while (1){
if (digitalRead(BT1) == 1){
printf("POWER OFF\n");
system("sudo poweroff");
delay(1000);
}
if (digitalRead(BT2) == 1){
printf("System Restart\n");
system("sudo reboot");
delay(1000);
}
}
23