1. GPIO ?
-> 범용 입출력, 라즈베리 파이에게/로 부터 입력 및 출력 가능한 인터페이스
2. GPIO pin Map
1. I2C (Inter Integrated Circuit)
- 아이투씨, 아이스퀘어씨
- SDA -> 데이터 선, SCL -> 클럭 선
- N 마스터 & M 슬레이브 구조(up to 127)
- 클럭을 사용하기 때문에 전송 시간에 자유롭다
- 긴 데이터에는 부적합
2. SPI (Serial Peripheral Interface)
- MOSI : Master out, Slave in -> 마스터에서 데이터 출력
- MISO : Master in, Slave out -> 슬레이브에서 데이터 출력
- SCK : Clock, SS : Slave select 슬레이브 선택 신호
- 1:N 연결, N 이 높아질수록 물리적 연결이 많아져야함(SS)
- 동시에 송수신 가능, I2C 대비 속도가 빠르다
3. PCM (Pulse-code Modulation)
- 펄스 부호 변조 방법
- 사람이 이해하는 데이터를 부호화 하는 방식
- ex) 음성 -> 0, 1
4. PVM (Pulse-width Modulation)
- 일정 주기내에서 전압이 올라가는 비율을 변경하는 것
- ex> 0.5 per 1, 0.25 per 1
- 모터 제어나 led 제어에 용이
3. GPIO로 LED Blink해보기 - Python, C
1. 저항이란?
- 흐르는 전류의 양을 조절
- V=IR -> 저항이 커지면 전류가 적게 흐르고 높으면 많이 흐른다.
- 높은 저항을 쓰면 자연히 LED가 옅게 켜지고, 낮은 저항을 쓰면 밝게 켜진다.
2. 파이썬?
1. 인터프리터 기반으로 Scripting 가능
2. Pip -> python의 패키지 관리 툴
다른 사람들이 만들어 놓은 library들을 쉽게 관리 해주는 툴
3. RPi.GPIO packagre -> 라즈베리파이 GPIO를 위한 라이브러리
4. Import 해보기
- import RPi.GPIO as rg -> 아까 설치한 패키지를 rg 라는 이름으로 불러온다
- import time -> 시간 관련 패키지를 불러온다
- python3 led.py 실행해보기
3. C
- 사용할 저장소 생성
- git 에서 WiringPi 가져오기
git clone https://github.com/WiringPi/WiringPi
- Remote 에 저장된 WiringPi의 최신 소스를 local로 복사
- cd WiringPi;./build
4. LED 두개 켜보기 - Python
import RPi.GPIO as rg
import time
rg.setmode(rg.BCM)
ledPlusPin1 = 27
ledPlusPin2 = 22
rg.setup(ledPlusPin1, rg.OUT)
rg.setup(ledPlusPin2, rg.OUT)
try:
while True:
rg.output(ledPlusPin1, rg.LOW)
rg.output(ledPlusPin2, rg.HIGH)
time.sleep(1)
rg.output(ledPlusPin1, rg.HIGH)
rg.output(ledPlusPin2, rg.LOW)
time.sleep(1);
except KeyboardInterrupt:
rg.cleanup()
코드 설명
- 27번 GPIO를 ledPlusPin1로 지정하고, 22번 GPIO를 ledPlusPin2 로 선언
- 각 GPIO setup
- ledPlusPin1(초록) 이 꺼질때, ledPlusPin2(빨강) 이 켜짐
- sleep(1) 이후 ledPlusPin1(초록) 이 켜질때, ledPlusPin2(빨강) 이 켜짐
- 2개의 LED는 같은 전원에 연결된것이 아니고 개별 전원에 연결되어 각각을 개별로 조절해야 한다
동작 모습

