[3ํ์ฐจ-4] ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด GPIO ์ค์ต - 1
1. Thonny Python IDE
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ Windows ํ๊ฒฝ์์ Python ํ๋ก๊ทธ๋จ์ ์ค์นํ๊ณ IDLE์ ์คํํ์ฌ Python ํ๋ก๊ทธ๋๋ฐ์ ํด์์ต๋๋ค. ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ ๋ผ์ฆ๋น์ ์ด์์ฒด์ ๋ฅผ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก Python ํ๋ก๊ทธ๋จ์ด ์ค์น๋์ด์์ต๋๋ค. Windows์์ IDLE ์ญํ ์ ํ๋ Thonny Python IDE๋ฅผ ์คํํ์ฌ Python ํ๋ก๊ทธ๋๋ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
๊ฐ. ๋ฐํํ๋ฉด์ ์์ด์ฝ ๋ง๋ค๊ธฐ
์๋ ์ฌ์ง์ ๋ฐ๋ผ ํ์ฌ ๋ฐํํ๋ฉด์ Thonny Python IDE ์์ด์ฝ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
๋ฐํํ๋ฉด์ ๋ง๋ค์ด์ง ์์ด์ฝ์ ๋๋ธํด๋ฆญํ์ฌ ํ๋ก๊ทธ๋จ์ ์คํํด์ค๋๋ค.
๋. Thonny Python IDE ์คํํ๋ฉด
ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ์๋์ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค. ํ๋ฉด์ 3 ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์๋๋ฐ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ IDLE๊ณผ ๋ฌ๋ฆฌ ํ๋ก๊ทธ๋จ ์ฝ๋ฉํ๋ ๋ถ๋ถ๊ณผ Shell ๋ถ๋ถ์ด ํ ํ๋ฉด์ ์์นํ์ฌ ํ๋ก๊ทธ๋จ ์คํ ์ ๊ฒฐ๊ณผ๋ฅผ ์ข ๋ ํธ๋ฆฌํ๊ฒ ๋ณผ ์ ์์ต๋๋ค.
๊ฐ์ด๋ฐ Debug, Over, Info, Out์ ํ์ฌ ์์ค์์๋ ์ค์ํ์ง ์์ง๋ง ๋ค๋ฅธ ์์ด์ฝ๋ค์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ์ ๋ ฅ ์ฐฝ์ ํ๋ก๊ทธ๋จ์ ์ ๋ ฅํ๊ณ [Run] ์์ด์ฝ์ ํด๋ฆญํ์ฌ ์คํํ ์ ์์ต๋๋ค.
IDLE์์ New File๋ก ๋ณ๋ ์ ๋ ฅ ์ฐฝ์ ๋ถ๋ฌ์๋ ๊ฒ์ ๊ธฐ์ตํ๊ณ ์์ ๊ฒ์ ๋๋ค. Thonny Python IDE ํ๋ก๊ทธ๋จ์์๋ ํ๋ฉด์ ๋ณด์ด๋ ์ ๋ ฅ ์ฐฝ์ Python ํ๋ก๊ทธ๋จ์ ์ ๋ ฅํ์ฌ ์คํํ ์ ์์ต๋๋ค.
Shell์ ํ๋ก๊ทธ๋จ ์คํ ๊ฒฐ๊ณผ ํ์ธ, ํค๋ณด๋ ์ ๋ ฅ, ๊ฐ๋จํ ํ๋ก๊ทธ๋จ ๋ช ๋ น์ด ์์ฑ, ์ค๋ฅ ์๋ด ๋ฑ IDLE์์์ ๊ฐ์ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
๋ค. ์ค์ต ํด๋ ๋ง๋ค๊ธฐ
Thonny Python IDE๋ IDLE๊ณผ ๊ฐ์ด ์ ๋ ฅํ ํ๋ก๊ทธ๋จ์ ์ ์ฅํ ํ ์คํํฉ๋๋ค. ์์ผ๋ก๋ ์ฌ๋ฌ๋ถ์ด ๋ค์ํ ์ค์ต ์์ ๋ฅผ ์ ์ฅํ ํด๋๋ฅผ ๋ง๋ค์ด ๊ด๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฐํํ๋ฉด์์ ํด๋ ์์ด์ฝ์ ํด๋ฆญํ์ฌ /home/pi ํด๋ ์์ ์๋ก์ด ํด๋๋ฅผ ๋ง๋ญ๋๋ค. ์๋ก์ด ํด๋๋ฅผ ๋ง๋ค ํด๋ ์์์ [๋ง์ฐ์ค ์ฐํด๋ฆญ] - [New Folder]๋ฅผ ์คํํฉ๋๋ค.
์ฌ๋ฌ๋ถ์ด ์์๋ณผ ์ ์๋ ํด๋ ์ด๋ฆ์ ์ ๋ ฅํ์ฌ [ํ์ธ]์ ๋๋ฆ ๋๋ค.
/home/pi ํด๋ ์์ [robot] ํด๋๊ฐ ๋ง๋ค์ด์ง ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์์ผ๋ก Thonny Python IDE์์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๊ฒฝ์ฐ์๋ ์ [robot] ํด๋ ์์ ์ ์ฅํ๋๋ก ํฉ๋๋ค.
๋ผ. ํ์ผ ์ ์ฅํ๊ธฐ
Thonny Python IDE์์ ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ณ ํด๋์ ์ ์ฅํด์ ์คํํด๋ณด๊ฒ ์ต๋๋ค.
2. ์ ์ํ๋ก
๊ฐ. Vcc, Gnd
์ ๊ทธ๋ฆผ์ ์ฐ๋ฆฌ๊ฐ ๋ง์ด ๋ณด๋ AA ๊ฑด์ ์ง์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ RC์นด๋ ์ฅ๋๊ฐ, ๋ฆฌ๋ชจ์ปจ ๋ฑ์๋ ํฌ๊ธฐ๋ ๋ค๋ฅด์ง๋ง ์์ ๊ฐ์ ํํ์ ๊ฑด์ ์ง๋ฅผ ๋ฃ์ด ์๋ํฉ๋๋ค. ๊ฑด์ ์ง์๋ +๊ทน๊ณผ -๊ทน์ด ์์ด ๊ทธ ๋ฐฉํฅ์ ๋ง์ถ์ด์ ๋ฃ์ด์ฃผ์ด์ผ ๊ธฐ๊ธฐ๊ฐ ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Vcc +๊ทน์ ์๋ฏธํฉ๋๋ค. ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์์๋ 3.3v๋ 5v๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Gnd -๊ทน์ ์๋ฏธํฉ๋๋ค. 0v๋ฅผ ๋ปํ๋ฉฐ ๊ธฐ๊ธฐ๊ฐ ๋์ํ๋ ค๋ฉด Vcc์ Gnd๊ฐ ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค.
๋. Pin Numbering
GPIO๋ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์์ ์ ์ถ๋ ฅ ์ฅ์น๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๋ถ๋ถ์ผ๋ก ์ด๋ฅผ ์ด์ฉํด์ ์ ๋ ฅ์ฅ์น์ธ ์จ๋์ผ์, ์ด์ํ ์ผ์์ ๊ฐ์ ์ ๋ ฅ๋ฐ์ ์ ์์ผ๋ฉฐ LED. ์๋ณด๋ชจํฐ ๊ฐ์ ์ถ๋ ฅ์ฅ์น๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ ์ดํ ์ ์์ต๋๋ค.
์ ์ 2๊ฐ์ 5Vํ๊ณผ 2๊ฐ์ 3.3Vํ, 8๊ฐ์ 0V GNDํ์ด ์์ต๋๋ค.
๋๋จธ์ง ํ์ ๋ชจ๋ 3.3V ์ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ GPIO ํ์ ๋๋ค.
์ถ๋ ฅ ์ถ๋ ฅ ํ์ผ๋ก ์ง์ ๋ GPIO๋ ๋์(HIGH, 3.3V) ๋๋ ๋ฎ์(LOW, 0V)์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์ ๋ ฅ ์ ๋ ฅ ํ์ผ๋ก ์ง์ ๋ GPIO๋ ๋์(HIGH, 3.3V) ๋๋ ๋ฎ์(LOW, 0V)์ผ๋ก ์ฝ์ ์ ์์ต๋๋ค.
(GPIO2 ๋ฐ GPIO3์๋ ๊ณ ์ ํ์ ์ ํญ์ด ์์)
PWM ๋ชจ๋ ํ์์ ์ํํธ์จ์ด PWM ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
(ํ๋์จ์ด PWM์ GPIO12, GPIO13, GPIO18, GPIO19)
3. LED ์ค์ต
๊ฐ. LED
LED๋ ์ ๊ธฐ ์๋์ง๋ฅผ ๋น ์๋์ง๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ฐ๋์ฒด์ ๋๋ค. LED๋ ๋ฐฑ์ด์ ๊ตฌ๋ ํ๊ด๋ฑ์ ๋นํด ์๋น์ ๋ ฅ์ด ์ ๊ณ , ์๋ช ์ด ๊ธด ์ฅ์ ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ LED๋ ๋จ์ LED๋ก ๋ค๋ฆฌ๊ฐ ๊ธด ์ชฝ์ด +๊ทน, ์งง์ ์ชฝ์ด -๊ทน์ ํด๋น๋ฉ๋๋ค. LED์ ๊ณผ๋ํ ์ ๋ฅ๊ฐ ํ๋ฅด๋ฉด ์ ๋ฉ๋๋ค. 1.8~2V์ ์ ์์์ ์๋ํ๋ฉฐ, ๊ทธ ์ด์์ ์ ์์ ๊ฐํ ๊ฒฝ์ฐ ๊ณ ์ฅ์ ์์ธ์ด ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ง๋ ฌ๋ก ์ ํญ์ ์ฐ๊ฒฐํด์ ํฐ ์ ๋ฅ๊ฐ ํ๋ฅด๋ ๊ฒ์ ๋ฐฉ์งํด ์ฃผ์ด์ผ ํฉ๋๋ค. ๋ง์ฝ ์ ํญ์ ์ฐ๊ฒฐํ์ง ์์ผ๋ฉด LED์ ํฐ ์ ๋ฅ๊ฐ ํ๋ฌ์ ํ๋ฒ๋ฆด ์ ์์ต๋๋ค.
LED์๋ ๋ค๋ฆฌ๊ฐ ๋ ๊ฐ๋ฐ์ ์์ผ๋ฏ๋ก LED๋ฅผ ์ผ๋ ค๋ฉด ๊ธด ์ชฝ ๋ค๋ฆฌ์ Vcc๋ฅผ ์ฐ๊ฒฐํ๊ณ , ์งง์ ์ชฝ ๋ค๋ฆฌ์ Gnd๋ฅผ ์ฐ๊ฒฐํ๋ ํํ๋ก ํ๋ก๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ฌ๊ธฐ์ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ 5V๋ 3.3V์ ์ ํญ์ ์ฐ๊ฒฐํ์ฌ ์ง์ ์ฐ๊ฒฐํด์ฃผ๋ฉด LED๋ ์ ๊ธฐ๊ฐ ๊ณต๊ธ๋๋ ํ ๊ณ์ LED๊ฐ ์ผ์ ธ ์์ด LED๋ฅผ ์ ์ด(๋ถ์ ์ผ๊ฑฐ๋ ๋๋ ๊ฒ)ํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค.
์ด๋ GPIO๋ฅผ ์ฌ์ฉํ๋ฉด LED๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. LED์ ๊ธด ๋ค๋ฆฌ๋ฅผ GPIO์ ์ฐ๊ฒฐํ์ฌ ์ฐ๊ฒฐ๋ GPIO์ ์ ํธ(3.3V)๋ฅผ ๋ณด๋ด๋ฉด ๋ถ์ ์ผ๊ฑฐ๋ ๋ ์ ์์ต๋๋ค.
๋. Vcc, Gnd ๋ธ๋ ๋๋ณด๋ ์ฐ๊ฒฐํ๊ธฐ, LED๊ทน ์คํ
์ฝ๋ธ๋ฌ๊ฐ ์ฐ๊ฒฐ๋ ๋ธ๋ ๋๋ณด๋์ Vcc์ Gnd ํ๋ก๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ณด๊ฒ ์ต๋๋ค. ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ ์ ์ ์ด์ฉํ์ฌ ๋ธ๋ ๋๋ณด๋ ์ผ์ชฝ์๋ 3.3V์ ์ ์๊ณผ Gnd๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฃผ๊ณ , ์ค๋ฅธ์ชฝ์๋ 5V์ ์ ์๊ณผ Gnd๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ค๋๋ค.
์ด์ LED๋ฅผ ํ๋ ์ค๋นํ์ฌ ์ค๋๋ค. ์๋ LED๋ฅผ ์์ธํ ๋ณด๋ฉด ํ์ชฝ ๋ค๋ฆฌ๊ฐ ๋ ๊ธด ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด์ ์ ์ดํด๋ณธ ๋ด์ฉ์์ ๊ธด ์ชฝ ๋ค๋ฆฌ๊ฐ +๊ทน์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ตํ๊ณ ์๋์? ์ด์ LED๋ฅผ ํ๋ก์ ์ฐ๊ฒฐํ์ฌ ๋ณด๊ฒ ์ต๋๋ค.
LED๋ฅผ ๋ธ๋ ๋๋ณด๋์ ์ฐ๊ฒฐ๋ 3V์ GND์ ์๋์ ๊ฐ์ด ์ฐ๊ฒฐํ์ฌ LED๊ฐ ์ผ์ง๋์ง ํ์ธํ์ฌ ๋ด ๋๋ค. ์ ํญ์ ์ฐ๊ฒฐํ์ง ์์ LED๊ฐ ๊ณ ์ฅ์ด ๋ ์๋ ์์ง๋ง 3V์ ์ฐ๊ฒฐํ์์ผ๋ฏ๋ก ๊ณ ์ฅ๋ฅ ์ด ๋ฎ์ต๋๋ค. ๋ธ๋ ๋๋ณด๋ ์ค๋ฅธ์ชฝ 5V์๋ ์ ํญ ์์ด ์ฐ๊ฒฐํ์ง ๋ง์ธ์.
LED๊ฐ ์ ์์ ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋์์ผ๋ฉด ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด LED๊ฐ ์ผ์ง๋๋ค. ์ด๋ฒ์๋ LED๋ฅผ ๋ฐ๋๋ก ๊ธด ์ชฝ ๋ค๋ฆฌ๋ฅผ Gnd์ ๊ฝ๊ณ ์งง์ ์ชฝ ๋ค๋ฆฌ๋ฅผ 3.3V์ ๊ฝ์ ๋ถ์ด ์ผ์ง๋์ง ํ์ธํด๋ด ์๋ค.
์ ๊ทธ๋ฆผ๊ฐ์ด LED๊ฐ ์ผ์ง์ง ์์์ผ ํฉ๋๋ค. LED๊ฐ ์ผ์ง๋ค๋ฉด ํ๋ก์ Vcc์ Gnd๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
LED์ ๊ธด ์ชฝ ๋ค๋ฆฌ๋ฅผ ์ด๋ฒ์๋ GPIO 5๋ฒ์ ์ฐ๊ฒฐํ์ฌ ์ด๋ค ๋ณํ๊ฐ ์๋์ง ๊ด์ฐฐํ์ฌ ๋ด ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์ผ๋ก GPIO 5๋ฒ์ ๋ถ์ ์ผ๋๋ก ํ์ง๋ ์์๋๋ฐ ์ฝํ๊ฒ ๋ถ์ด ์ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ์์ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ํตํด GPIO์ ์ฝํ ์ ๋ฅ๊ฐ ํ๋ฅด๊ณ ์์์ ์ ์ ์์ต๋๋ค.
๋ค. ํ๋ก ๊ตฌ์ฑ
LED๋ฅผ ํ์ด์ฌ์ผ๋ก ์ ์ดํ๊ธฐ ์ํด์ ํ๋ก๋ฅผ ๊ตฌ์ฑํ์ฌ ๋ณด๊ฒ ์ต๋๋ค.
์ค๋น๋ฌผ LED, ์ ์ , ์ ํญ(์ฌ๊ธฐ์๋ 330โฆ)
LED์๋ ๋ค๋ฆฌ๊ฐ ๋ ๊ฐ๋ฐ์ ์์ผ๋ฏ๋ก LED๋ฅผ ์ผ๋ ค๋ฉด ๊ธด ์ชฝ ๋ค๋ฆฌ์ Vcc๋ฅผ ์ฐ๊ฒฐํ๊ณ , ์งง์ ์ชฝ ๋ค๋ฆฌ์ Gnd๋ฅผ ์ฐ๊ฒฐํ๋ ํํ๋ก ํ๋ก๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ฌ๊ธฐ์๋ LED๋ฅผ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์ผ๊ณ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ธด ์ชฝ ๋ค๋ฆฌ๋ฅผ GPIO 13๋ฒ์ ์ฐ๊ฒฐํ๊ฒ ์ต๋๋ค.
์ ์ ์ GPIO 13๋ฒ์ ์ฐ๊ฒฐํ์ฌ ๋ค๋ฅธ ์ชฝ ์ ์ LED ๊ธด ์ชฝ ๋ค๋ฆฌ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ ํญ์ Gnd์ ์ฐ๊ฒฐํ๊ณ ๋๋จธ์ง ํ์ชฝ์ LED์ ์งง์ ๋ค๋ฆฌ์ ์ฐ๊ฒฐ๋๋๋ก ํ๋ก๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์ ์ฌ์ง์ ์์ฑ๋ ํ๋ก์ ๋ชจ์ต์ ๋๋ค. ์ด๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ๋ฌ๋ถ์ ํ๋ก๋ฅผ ์์ฑํด๋ด ์๋ค.
๋ค. ํ๋ก๊ทธ๋๋ฐ
GPIO.setmode(GPIO.BOARD) : ํค๋ ํ์ ๋ฒํธ๋ฅผ ์์๋๋ก ๋์ด
GPIO.setmode(GPIO.BCM) : ์ฝ์๋ GPIO ๋ฒํธ๋ก ํ์ํ๋ ๊ฒ
While True: True๋ ์ฐธ์ด๋ผ๋ ๋ง์ด๋ฏ๋ก ๋ช ๋ น๋ฌธ1์ ๋์์ด ๋ฐ๋ณตํจ.
๋ช ๋ น๋ฌธ1
์์ ์์ค(1-led1.py) | ์์ ์์ค(1-led(1).py) |
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) while True: |
from gpiozero import LED while True: |
-
์์ ์์ค(1-led2.py) | ์์ ์์ค(1-led(2).py) |
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) for i in range(3): |
from gpiozero import LED for i in range(3): |
-
์์ ์์ค(1-led3.py) | ์์ ์์ค(1-led(3).py) |
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) for i in range(0,50): |
from gpiozero import LED for i in range(0,50): |
-
์์ ์์ค(2-led_blink.py) | |
from gpiozero import LED led.blink() pause() |
-
์์ ์์ค(3-led_PWM_pulse.py) | ์์ ์์ค(3-led_PWM_value.py) |
from gpiozero import PWMLED led.pulse() pause() |
from gpiozero import PWMLED led = PWMLED(13) while True: |
-
์์ ์์ค(4-led1.py) | ์์ ์์ค(4-led(1).py) |
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) while True: |
from gpiozero import PWMLED |
์ค์ต) ์ง๊ธ๊น์ง ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๋ค์ํ๊ฒ LED๋ฅผ ์ผ๊ณ ๋๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๋ด ์๋ค.