라즈베리파이 GPIO 다루기
이번 포스팅에서는 라즈베리파이의
GPIO(General Pulpose Input Output)의 사용법에 대한 포스팅입니다.
🤔 GPIO란?
GPIO는 Port가 어떤 신호가 드나드는 지점을 말합니다.
1 또는 0에 해당하는 논리 레벨의 전기신호 (Logical Level Signal)이
출력되거나 연결된 장치로부터 입력되는 경우 입, 출력 포트, 통신을 하기 위해 존재합니다.
GPIO 포트는 입력이나, 출력, 또는 부가기능 (Alternavtive Function I/O)으로 사용될 수 있는
포트로서, 사용자가 작성한 프로그램으로 제어할 수 있는 포트를 말합니다.
다음 그림은 라즈베리파이 40 핀 헤더에 할당된 GPIO 및 AFIO기능입니다.
녹색으로 표시된 번호는 WiringPi 라이브러리에서 사용하는 GPIO 핀 번호
(WiringPi 라이브러리에서만 사용)
푸른색으로 표시된 번호는 Python, Node.js 등의 WiringPi 라이브러리를 제외한
대부분의 라이브러리에서 사용됩니다.
매우 다양한 프로그래밍 언어가 라즈베리파이의 GPIO 제어 프로그래밍을 위한 라이브러리를 제공합니다.
Python의 경우, 라즈베리파이에서 제공하는 GPIO 라이브러리와 카메라 모듈 라이브러리가
일반적으로 사용됩니다.
C 언어의 경우, 아두이노에서 사용하는 API 와 같은 사용법을 제공하는 wiringPi 라이브러리가 주로 사용됩니다.
그 외에도 pigpio, BCM2835 그리고 Python, PHP, Node.js 를 위한 wiringPi 라이브러리 등이 있습니다.
(wiringPi 라이브러리는 2018년 04월 18일 이 후, raspbian-with-desktop 사용할 경우 이미 설치되어있다.)
그 이전, raspbain lite 버전을 사용할 경우에는 다음과 같이 설치한다.
1. 'wiringPi' 라이브러리 소스 코드를 'git' 저장소에서 라즈베리파이로 복사
pi@raspberrypi:~ $ git clone git://git.drogon.net/wiringPi
2. 'git clone' 결과 확인 후, '~/wiringPi'로 경로 변경
pi@raspberrypi:~ $ ls
Downloads Pictures Scratch wiringPi Public Desktop
Documents python_games
pi@raspberrypi:~ cd wiringPi
pi@raspberrypi:~/wiringPi $
3. 빌드
pi@raspberrypi:~ /wiringpi $ ./build
4.확인 (gpio -v, gpio read all)
pi@raspberrypi:~ /wiringpi $ cd
pi@raspberrypi:~ $ gpio –v
gpio version: 2.44
Copyright (c) 2012-2017 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
Raspberry Pi Details:
Type: Pi 3, Revision: 02, Memory: 1024MB, Maker: Embest
* Device tree is enabled.
*--> Raspberry Pi 3 Model B Rev 1.2
* This Raspberry Pi supports user-level GPIO access.
pi@raspberrypi:~ $
pi@raspberrypi:~ $ gpio readall
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 0 | IN | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 0 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
pi@raspberrypi:~ $
GPIO 출력 예시
LED 다루기
( GPIO23 - LED(적) 1 - 저항(220Ω) - GND, GPIO23 - LED(녹) 1 - 저항(220Ω) - GND )
https://github.com/sermain2/RaspberryPi_project
GitHub - sermain2/RaspberryPi_project
Contribute to sermain2/RaspberryPi_project development by creating an account on GitHub.
github.com
파이썬으로 작성된 코드 입니다.
위 회로의 LED를 다루는 예제가 포함되어 있습니다.
동작 감지 센서
적외선 인체 감지 센서 (PIR 센서: Passive InfraRed Sensor)라고도 불립니다.
열을 가진 물체는 열 에너지를 복사합니다.
PIR 센서는 초전소자의 초전효과를 이용하여 주변과의 온도차를 감지합니다.
위 회로와 같이 동작 감지에 의한 센서 출력이 유지되는 동안은 적색 LED를
출력이 없을 경우녹색 LED를 점등시키는 과정을 포함 하였습니다.
https://github.com/sermain2/RaspberryPi_project
GitHub - sermain2/RaspberryPi_project
Contribute to sermain2/RaspberryPi_project development by creating an account on GitHub.
github.com