[K-디지털 트레이닝 45일] Ch.

230303 Fr 45급

채널 5 Raspberry Pi GPIO 및 센서 사용
진행: p. 126 ~ (튜토리얼: Raspberry Pi 4 Standards for IoT Internet of Things, 저자: 최주호, 김재범, 정동진)
교과서 소스 및 PPT: http://jspstudy.co.kr/main/main.jsp
작가 카페: https://cafe.naver.com/metacoding

오늘 배운 내용을 기억하기 위해 요약했습니다.


5장 Raspberry Pi GPIO 및 센서 사용

목차
01 _ GPIO 제어 및 테스트
01-1 LED 실습
01-2 푸시 버튼 스위치 실습(폴링 방식)
01-3 푸시 버튼 스위치 실습(이벤트 알림 방법)
01-4 버튼 입력으로 LED 실습

02_ PWM 제어
02-1 PWM을 이용한 LED 실습
02-2 PWM을 이용한 버저연습
02-3 PWM을 이용한 서보 모터 실습

03 _ 초음파센서(HC-SR04) 실습

04 _ PIR 센서(HC-SR501) 실습

05 _ 아날로그 신호 및 SPI 통신
05-1 라즈베리 파이에 아날로그 신호 읽기
05-2 SPI 통신의 이해
SPI Raspberry Pi에서 05-3 설정
05-4 MCP3008에 아날로그 전압 읽기
05-5 LDR 센서 실습
05-6 조이스틱 실습

06_ I2C 통신
06-1 I2C 라즈베리 파이에 설정
06-2 BMP180(기압센서)실습
06-3 OLED 디스플레이 실습

1GPIO(G에너지 목적 기입 영형출구) 확인 및 테스트


Raspberry Pi 3 및 4 GPIO PINOUT

일반 입력 출력(GPIO): 마이크로프로세서가 주변 장치와 통신하는 데 사용하는 범용 입출력(I/O) 포트입니다.
항구: 전기 신호 데이터가 오고 가는 경로

핀 번호를 읽는 방법

하나. 널빤지(물리적 PIN 번호):
왼쪽 상단에서 하나~로 시작하다
바로 아래 40롤빵 펜

2. BCM(프로그래밍 가능한 PIN 번호):
GPIO+ 숫자

3. 특수 기능(기능)
지피오 기능외에 특별한 기능도 가능

질량 => 바닥 (-)

5V => 5V 모두 ( + )

3.3V => 3.3V 모두 ( + )

누르다(출력: GPIO출력 설정 전류(0V) 높음(3.3V) 다음과 같이 출력
기입(입력) : GPIO구성 입력 3.3V 입력 => 높음, 0V 입력 => 낮음


1.1 LED 실습

(1) 브레드보드 연결하기


GPIO4핀 1의 저항 LED연결하다

(2) 파이썬 프로그래밍 준비

(2.1) 천재(기니) 프로그램 설정

메뉴 => 생산하는 => 빌드 설정

다하다~에 파이썬3변화
수행하다~에 파이썬3변화



(2.2) RPi.GPIO 도서관 이용

한국어 댓글 코드 상단에 “#-- 인코딩: utf-8 --”에 추가


로드 모듈


라즈베리 파이 지피오 스핀들 제어 모듈
시간 관련 모듈

지피오 PIN 번호 모드 설정 ( 물리적 숫자BCM)


물리적 PIN 번호 ( 접지, VCC, 모든 프로그래밍 핀 등 포함)
프로그래밍 가능한 PIN 번호

지피오 먼저 핀을 출력으로 사용할지 입력으로 사용할지 결정


GPIO.OUT(누르다)
GPIO.IN(기입)


(2.3) Python 실행 버전 설정



# -*- coding: utf-8 -*-

#필요한 모듈을 불러옵니다.
import RPi.GPIO as GP10
import time

#사용할 GPIO핀의 번호를 선정한다.(BCM 모드)
led_pin = 4				#GPIO 4

#불필요한 warning 제거
GPIO.setwarnings(False)

#GPIO핀의 번호 모드 설정
GPIO.setmode(GPIO.BCM)

#LED핀의 IN/OUT 설정
GPIO.setup(led_pin, GPIO.OUT)

#10번 반복문
for i in range(10):
	GPIO.output(led_pin, 1) #LED ON
    time.sleep(1) 			#1초동안 대기상태
    GPIO.output(led_pin, 0) #LED OFF
    time.sleep(1) 			#1초동안 대기상태
GPIO.cleanup() 				#GPIO 설정 초기화

코드 끝에서 GPIO.cleanup()은 GPIO 모드 설정을 초기화하고 스크립트가 실행될 때 목록을 반환하여 중복 사용 또는 GPIO 핀 단락과 같은 하드웨어 문제를 방지합니다.

짧은: 접촉해서는 안되는 두 도체, 즉 그 사이에 부하가 거의 없는 상태에서 전류가 접촉하는 현상이는 쇼트 발생 시 의도하지 않은 과전류가 흐르는 현상으로 막대한 전기 에너지에 의해 발생하는 열로 인해 화재가 발생할 수 있습니다.

= VI, : 전력, V: 전압, I: 전류


1.2 푸시 버튼 스위치 실습(폴링 방식)


누름 단추 3.3V가다 GPIO15 핀에 입력 GPIO15 PIN 입력( 높은 ) 신호가 온다.


(2) RPI.GPIO 라이브러리 사용

GPIO 핀을 입력하고 풀업/다운을 설정합니다.

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP) #=> 풀업 설정
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) #=> 풀다운 설정

브레드보드 연결시 스위치 한쪽이 3.3V(1)로 연결되어 있으므로 PUD_DOWN으로 설정합니다.
GPIO 핀의 입력 상태를 확인하는 if 문을 작성합니다.

if GPIO.input(channel) == GPIO.HIGH:
	print('HIGH)
else:
	print('LOW')

if 문의 GPIO.HIGH는 1과 같습니다.
즉, 입력 핀에 3.3V 입력이 있으면 Raspberry Pi는 이를 디지털 1로 받아들이고 HIGH(1)로 출력합니다.
그렇지 않으면 LOW(0)를 반환합니다.


# -*- coding: utf-8 -*-

#필요한 라이브러리를 불러옵니다.
import RPi.GPIO as GP10
import time

#사용할 GPIO핀의 번호를 선정합니다.
button_pin = 15

#불필요한 warning 제거
GPIO.setwarnings(False)

#GPIO핀의 번호 모드 설정
GPIO.setmode(GPIO.BCM)

#버튼 핀의 입력 설정 , PULL DOWN 설정
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

while 1 #무한반복
#만약 버튼핀에 High(1) 신호가 들어오면, "Button pushed!"을 출력합니다.
if GPIO.input(button_pin) == GPIO.HIGH:
	print("Button pushed!")
time.sleep(0.1) #0.1초 딜레이

1.3 푸시 버튼 스위치 실습(이벤트 알림 방법)


콜백 함수의 정의 (버튼_콜백)
def button_callback(channel):
    print("Button pushed!")

이 기능이 실행되면 “버튼을 눌렀다!” 문자열 인쇄.

(2) 파이썬 코드 작성

#-*-coding:utf-8-*-

# 필요한 라이브러리를 불러옵니다.
import RPi.GPIO as GPIO 
import time

# button_callback 함수를 정의합니다.
def button_callback(channel):
    print("Button pushed!")

# 사용할 GPIO핀의 번호를 선정합니다.
button_pin = 15

# GPIO핀의 번호 모드 설정
GPIO.setmode(GPIO.BCM) 

# 버튼 핀의 IN/OUT 설정 , PULL DOWN 설정 
GPIO.setup(button_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 

# Event 방식으로 핀의 Rising 신호를 감지하면 button_callback 함수를 실행합니다.
GPIO.add_event_detect(button_pin,GPIO.RISING,callback=button_callback)

while 1:
     time.sleep(0.1) # 0.1초 딜레이

1.4 누름 버튼 입력으로 LED 실습



단계별로 브레드보드에 연결합니다..
기능 정의 (버튼을 클릭했을 때 수행되는 기능)


부울 변수가 참이다(진실) 또는 잘못(잘못된) 값만 가질 수 있음.
버튼을 눌렀을 때 button_callback 기능이 실행됩니다, 이때 불을 켜다 변수 값 거짓말하다(원래 값)먼저 만약 LED켜다 “LED 켜짐” 문자열 인쇄. 사실이라면 반대 LED끄다 “LED 꺼짐” 문자열 인쇄.
함수 끝에서 변수 값 반전. ( 정말 ,==> 거짓말하다 )




2 PWM 제어
2.1 PWM을 이용한 LED 실습
2.2 PWM을 이용한 부저 연습
2.3 PWM을 이용한 서보모터 실습


3 초음파 센서(HC-SR04) 실습


4 PIR 센서(HC-SR501) 실습


5 아날로그 신호 및 SPI 통신
5.1 Raspberry Pi에 아날로그 신호 읽기
5.2 SPI 통신의 이해
5.3 SPI Raspberry Pi에서 설정
5.4 MCP3008로 아날로그 전압 읽기
5.5 LDR 센서 실습
5.6 조이스틱 연습


6 I2C 통신
6.1 I2C Raspberry Pi에서 설정
6.2 BMP180(기압센서) 실습
6.3 OLED 디스플레이 실습