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
IoT용 Raspberry Pi 4 표준 IoT | 최주호 – 교보문고
IoT용 Raspberry Pi 4 표준 IoT | 『사물인터넷(IoT)을 위한 라즈베리파이 4 표준』은 기본적인 전기전자 원리를 기반으로 하여 초보자도 라즈베리파이로 다양한 IoT를 직접 개발할 수 있습니다.
product.kyobobook.co.kr
오늘 배운 내용을 기억하기 위해 요약했습니다.
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에너지 피목적 나기입 영형출구) 확인 및 테스트
일반 입력 출력(GPIO): 마이크로프로세서가 주변 장치와 통신하는 데 사용하는 범용 입출력(I/O) 포트입니다.
항구: 전기 신호 데이터가 오고 가는 경로
핀 번호를 읽는 방법
하나. 널빤지(물리적 PIN 번호):
왼쪽 상단에서 하나~로 시작하다
바로 아래 40롤빵 펜
2. BCM(프로그래밍 가능한 PIN 번호):
GPIO+ 숫자
3. 특수 기능(기능)
지피오 기능외에 특별한 기능도 가능
질량 => 바닥 (-)
5V => 5V 모두 ( + )
3.3V => 3.3V 모두 ( + )
1.1 LED 실습
(1) 브레드보드 연결하기
(2) 파이썬 프로그래밍 준비
(2.1) 천재(기니) 프로그램 설정
메뉴 => 생산하는 => 빌드 설정
(2.2) RPi.GPIO 도서관 이용
한국어 댓글 코드 상단에 “#-- 인코딩: utf-8 --”에 추가
로드 모듈
지피오 PIN 번호 모드 설정 ( 물리적 숫자BCM)
지피오 먼저 핀을 출력으로 사용할지 입력으로 사용할지 결정
(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 푸시 버튼 스위치 실습(폴링 방식)
(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 실습

