리눅스데브코스 [3주차 - 5]<GPIO 이해하기>

심우열·2023년 4월 21일
0

1. GPIO ?

General purpose input-output pins

-> 범용 입출력, 라즈베리 파이에게/로 부터 입력 및 출력 가능한 인터페이스

2. GPIO pin Map

1. I2C (Inter Integrated Circuit)

  1. 아이투씨, 아이스퀘어씨
  2. SDA -> 데이터 선, SCL -> 클럭 선
  3. N 마스터 & M 슬레이브 구조(up to 127)
  4. 클럭을 사용하기 때문에 전송 시간에 자유롭다
  5. 긴 데이터에는 부적합

2. SPI (Serial Peripheral Interface)

  1. MOSI : Master out, Slave in -> 마스터에서 데이터 출력
  2. MISO : Master in, Slave out -> 슬레이브에서 데이터 출력
  3. SCK : Clock, SS : Slave select 슬레이브 선택 신호
  4. 1:N 연결, N 이 높아질수록 물리적 연결이 많아져야함(SS)
  5. 동시에 송수신 가능, I2C 대비 속도가 빠르다

3. PCM (Pulse-code Modulation)

  1. 펄스 부호 변조 방법
  2. 사람이 이해하는 데이터를 부호화 하는 방식
  3. ex) 음성 -> 0, 1

4. PVM (Pulse-width Modulation)

  1. 일정 주기내에서 전압이 올라가는 비율을 변경하는 것
  2. ex> 0.5 per 1, 0.25 per 1
  3. 모터 제어나 led 제어에 용이

3. GPIO로 LED Blink해보기 - Python, C

1. 저항이란?

  1. 흐르는 전류의 양을 조절
  2. V=IR -> 저항이 커지면 전류가 적게 흐르고 높으면 많이 흐른다.
  3. 높은 저항을 쓰면 자연히 LED가 옅게 켜지고, 낮은 저항을 쓰면 밝게 켜진다.

2. 파이썬?

1. 인터프리터 기반으로 Scripting 가능

2. Pip -> python의 패키지 관리 툴

다른 사람들이 만들어 놓은 library들을 쉽게 관리 해주는 툴

3. RPi.GPIO packagre -> 라즈베리파이 GPIO를 위한 라이브러리

4. Import 해보기

  1. import RPi.GPIO as rg -> 아까 설치한 패키지를 rg 라는 이름으로 불러온다
  2. import time -> 시간 관련 패키지를 불러온다
  3. python3 led.py 실행해보기

3. C

1. Header 를 include 해보기

  1. 사용할 저장소 생성
  2. git 에서 WiringPi 가져오기
git clone https://github.com/WiringPi/WiringPi
  1. Remote 에 저장된 WiringPi의 최신 소스를 local로 복사
  2. 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()

코드 설명

  1. 27번 GPIO를 ledPlusPin1로 지정하고, 22번 GPIO를 ledPlusPin2 로 선언
  2. 각 GPIO setup
  3. ledPlusPin1(초록) 이 꺼질때, ledPlusPin2(빨강) 이 켜짐
  4. sleep(1) 이후 ledPlusPin1(초록) 이 켜질때, ledPlusPin2(빨강) 이 켜짐
  5. 2개의 LED는 같은 전원에 연결된것이 아니고 개별 전원에 연결되어 각각을 개별로 조절해야 한다

동작 모습

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글