GPIO RaspberryPi Sejin Oh
GPIO
GPIO GPIO GPIO (General Purpose Input Output) 마이크로프로세서가 주변장치와 통신하기 위해 범용으로 사용되는 입출력 포트 입력과 출력을 마음대로 선택할 수 있고, 0과 1의 출력 신호를 임의로 만들어줄 수 있는 구조를 가진다. GPIO 라이브러리 라즈베리 파이의 GPIO를 제어할 수 있는 언어 C, C++, C#, Python Perl, Ruby, Java등 매우 다양함 각 언어에 따라 사용자들이 GPIO 라이브러리를 제작하여 공유하고 있다. wiringPi : 공개된 라이브러리 중 GPIO 제어 속도가 빠름
GPIO GPIO Raspberry Pi b+ GPIO 핀 배치
GPIO GPIO Library 설치 라즈베리 파이의 업데이트 및 업그레이드 실시 소스 관리 툴인 git을 다운로드 Git을 이용하여 “Wiring Pi” 라이브러리를 다운로드 $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install git-core $ git clone git://git.drogon.net/wiringPi
GPIO GPIO Library 설치 빌드 및 설치 진행 설치 확인 $ cd wiringPi $ ./build $ 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
GPIO GPIO 출력 테스트 GPIO의 출력을 이용하여 LED on/off 제어 테스트 LED 회로를 구성하여 GPIO에 High 값을 출력해주면 LED는 켜짐 GPIO에 Low 값을 출력하게 되면 LED는 꺼짐 LED 2개, 저항 220Ω 2개, GPIO 23번 핀 이용
GPIO GPIO 출력 테스트 작업 폴더 생성 및 이동 프로그램 작성 $ mkdir led $ cd led $ sudo nano led.c
GPIO GPIO 출력 테스트 #include <stdio.h> #include <wiringPi.h> #define LED 23 int main(void) { if(wiringPiSetupGpio()==-1) return 1; pinMode(LED, OUTPUT); while(1) { digitalWrite(LED, 1); delay(500); // ms digitalWrite(LED, 0); delay(500); } return 0; }
GPIO GPIO 출력 테스트 프로그램 빌드 프로그램 실행 $ sudo gcc –o led led.c -lwiringPi $ sudo ./led
GPIO GPIO 출력 테스트 GPIO의 출력을 이용하여 LED on/off 제어 테스트 LED 회로를 구성하여 GPIO에 High 값을 출력해주면 LED는 켜짐 GPIO에 Low 값을 출력하게 되면 LED는 꺼짐 LED 2개, 저항 220Ω 2개, GPIO 23번 핀, 24번 핀 이용
GPIO GPIO 출력 테스트 작업 폴더 생성 및 이동 프로그램 작성 $ mkdir led2 $ cd led2 $ sudo nano led2.c
GPIO GPIO 출력 테스트 #include <stdio.h> #include <wiringPi.h> #define LED1 23 #define LED2 24 int main(void) { if(wiringPiSetupGpio()==-1) return 1; pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); while(1) { digitalWrite(LED1, 1); digitalWrite(LED2, 1); delay(500); // ms digitalWrite(LED1, 0); digitalWrite(LED2, 0); delay(500); } return 0; }
GPIO GPIO 출력 테스트 프로그램 빌드 프로그램 실행 $ sudo gcc –o led2 led2.c -lwiringPi $ sudo ./led2
GPIO Five LED Lighting
GPIO Five LED Lighting 결과확인
GPIO 응용 – Five LED Lighting 5개의 LED 순차적으로 ON/OFF
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, True) GPIO.output(24, True) time.sleep(0.5) GPIO.output(23, False) GPIO.output(24, False)
GPIO GPIO 입력 테스트 스위치 회로 스위치의 on/off 신호에 따라 LED가 켜지고 꺼지는 실습 스위치에 10KΩ 연결
GPIO GPIO 입력 테스트 LED : 220Ω Button : 10KΩ 스위치 회로 - 회로도
GPIO GPIO 입력 테스트 프로그램 작성 작업 폴더로 이동 $ sudo cd ~/gpio $ sudo nano input.c pinMode(SW, INPUT); while(1) { digitalWrite(LED1, 0); digitalWrite(LED2, 0); if(digitalRead(SW) == 1) digitalWrite(LED1, 1); digitalWrite(LED2, 1); delay(1000); } return 0; #include <stdio.h> #include <wiringPi.h> #define LED1 23 //gpio 23 #define LED2 24 //gpio 24 #define SW 25 //gpio 25 int main(void) { if(wiringPiSetupGpio() == -1) return 1; pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT);
GPIO GPIO 입력 테스트 프로그램 작성 프로그램 빌드 프로그램 실행 $ sudo –o input input.c -lwiringPi 프로그램 실행 $ sudo ./input
GPIO 안전 종료를 위한 매크로 버튼 종료 버튼 실습에서는 GPIO 입력으로 23, 16번을 사용, 스위치에 10KΩ 연결
안전 종료를 위한 매크로 버튼 – buttonforhalt.c 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); 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");