๋ค์ ์ธ ๊ฐ์ง ๋ช ๋ น์ด Raspbian(2014-01-07-wheezy-raspbian.zip)์ ์ฌ์ฉํ์ฌ Raspberry Pi์ ๋ช ๋ น์ค์์ ๊ฐ๋ณ์ ์ผ๋ก ์คํ๋๋ฉด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋ฉ๋๋ค.
pi<strong i="6">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/unexport
pi<strong i="7">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/export
pi<strong i="8">@raspberrypi</strong> ~ $ echo out > /sys/class/gpio/gpio23/direction
pi<strong i="9">@raspberrypi</strong> ~ $
๊ทธ๋ฌ๋ ๊ฐ์ ์ค์์ ํจ๊ป ์คํํ๋ฉด ๊ถํ ๊ฑฐ๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
pi<strong i="13">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/unexport; echo 23 > /sys/class/gpio/export; echo out > /sys/class/gpio/gpio23/direction
-bash: /sys/class/gpio/gpio23/direction: Permission denied
pi<strong i="14">@raspberrypi</strong> ~ $
๊ถํ ๊ฑฐ๋ถ ์ค๋ฅ๋ "/sys/class/gpio/gpio23/direction"์ ๋ํ ๊ทธ๋ฃน ๋ฐ ๊ถํ ๋นํธ๊ฐ ์ ์ ํ ๊ฐ์ผ๋ก ์ค์ ๋๊ธฐ ์ ์ "echo out > /sys/class/gpio/gpio23/direction"์ด ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค. . ๊ทธ๋ฃน ๋ฐ ๊ถํ ๋นํธ๋ "๋ฃจํธ" ๋ฐ "-rw-r--r--"์ด์ง๋ง "gpio" ๋ฐ "-rwxrwx---"์ฌ์ผ ํฉ๋๋ค.
์ด ํ์ด๋ฐ ๋ฌธ์ ๋ gpio 23์ ๋ด๋ณด๋ด๊ณ "/sys/class/gpio/gpio23/"์ ๋ด์ฉ์ ๋ ๋ฒ ๋์ดํ๋ ๋ช ๋ น ์ํ์ค์์ ๋ณผ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ls ๋ช ๋ น์ ์ถ๋ ฅ์ ๋ ๋ฒ์งธ ls ๋ช ๋ น์ ์ถ๋ ฅ๊ณผ ์๋นํ ๋ค๋ฆ ๋๋ค. ๋ชจ๋ ํ์ผ์ ๋ํ ๊ทธ๋ฃน๊ณผ ๊ถํ์ด ๋ชจ๋ ๋ณ๊ฒฝ๋์์ต๋๋ค.
pi<strong i="19">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/unexport; echo 23 > /sys/class/gpio/export; ls -l /sys/class/gpio/gpio23/; ls -l /sys/class/gpio/gpio23/
total 0
-rw-r--r-- 1 root root 4096 Mar 27 21:51 active_low
-rw-r--r-- 1 root root 4096 Mar 27 21:51 direction
-rw-r--r-- 1 root root 4096 Mar 27 21:51 edge
drwxr-xr-x 2 root root 0 Mar 27 21:51 power
lrwxrwxrwx 1 root root 0 Mar 27 21:51 subsystem -> ../../../../class/gpio
-rw-r--r-- 1 root root 4096 Mar 27 21:51 uevent
-rw-r--r-- 1 root root 4096 Mar 27 21:51 value
total 0
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 active_low
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 direction
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 edge
drwxrwx--- 2 root gpio 0 Mar 27 21:51 power
lrwxrwxrwx 1 root gpio 0 Mar 27 21:51 subsystem -> ../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 uevent
-rwxrwx--- 1 root gpio 4096 Mar 27 21:51 value
์ด๊ฒ์ ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ์ ๋๊น?
๋ฐฉ๊ธ ์์ ๊ธ์ ์์ ํ์ต๋๋ค. ์ฒ์์๋ "echo 23 > /sys/class/gpio/unexport"๊ฐ ๋ฐ์ํ์ง ์์์ต๋๋ค. ๋ด๋ณด๋ด๊ธฐ ์ทจ์๋ gpio๋ฅผ ๋ด๋ณด๋ด์ง ์์ ์ด๊ธฐ ์ํ๋ก ๋๋๋ฆฌ๊ธฐ ์ํด์๋ง ํ์ํฉ๋๋ค.
๋๋ ์ป๋ค:
pi<strong i="6">@raspberrypi</strong>:~ $ ls -l /sys/class/gpio/
total 0
--w------- 1 root root 4096 Mar 27 17:41 export
lrwxrwxrwx 1 root root 0 Mar 27 17:41 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
--w------- 1 root root 4096 Mar 27 17:41 unexport
pi<strong i="7">@raspberrypi</strong>:~ $ echo 23 > /sys/class/gpio/unexport
-bash: /sys/class/gpio/unexport: Permission denied
๋ด๊ฐ ๊ธฐ๋ํ๋ ๊ฒ์ ๋๋ค. ๋ฃจํธ๋ง /sys/class/gpio/unexport์ ์ก์ธ์คํ ์ ์๋ ๊ถํ์ด ์์ผ๋ฏ๋ก ํ์ด๊ฐ ์ด๋ฅผ ์๋ํ๋ฉด ๊ถํ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ฑฐ๋ถ๋ฉ๋๋ค.
"sudo su"๋ฅผ ๋จผ์ ์คํํ๋ฉด ๋ช ๋ น์ด ์์๋๋ก ์๋ํฉ๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ์ด์ ๋ฒ์ ์ด๋ Raspbian์์ ์ป์๋ ๊ฒ์ด์ง๋ง 2014-01-07-wheezy-raspbian์์๋ ๋ค์ ์ ์ป์ต๋๋ค.
pi<strong i="7">@raspberrypi</strong> ~ $ ls -l /sys/class/gpio/
total 0
-rwxrwx--- 1 root gpio 4096 Mar 28 16:58 export
lrwxrwxrwx 1 root gpio 0 Jan 1 1970 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
-rwxrwx--- 1 root gpio 4096 Mar 28 17:01 unexport
pi<strong i="8">@raspberrypi</strong> ~ $ echo 23 > /sys/class/gpio/export
pi<strong i="9">@raspberrypi</strong> ~ $
๋ชจ๋ ๊ฒ์ด ์ ์๋ํ๊ณ ์ค๋ฅ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฃน gpio์ ๋ชจ๋ ์ฌ์ฉ์๋ /sys/class/gpio/export์ ์ก์ธ์คํ ์ ์๋ ๊ถํ์ด ์์ผ๋ฉฐ pi๋ ๊ทธ๋ฃน gpio์ ๊ตฌ์ฑ์์ ๋๋ค.
pi<strong i="13">@raspberrypi</strong> ~ $ groups pi
pi : pi adm dialout cdrom sudo audio video plugdev games users netdev input spi gpio
uname์ ๋ค์์ ์ถ๋ ฅํฉ๋๋ค.
pi<strong i="17">@raspberrypi</strong> ~ $ uname -a
Linux raspberrypi 3.10.34+ #661 PREEMPT Thu Mar 27 00:36:02 GMT 2014 armv6l GNU/Linux
piface ์ฌ๋๋ค์ ์ผ๋ถ udev ํญ๋ชฉ์ ์ฌ์ฉํ๋ฉด์ ๋์์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. udev๊ฐ ์์ฑ๋ ์ฅ์น์ ๋ํ ๊ถํ์ ๋ณ๊ฒฝํ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ ๊ฒ์ด ๋ง์ต๋๋ค. ์ด๊ฒ์ ์ฌ์ฉ์ ๊ณต๊ฐ์ด๋ฏ๋ก ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์๋ ์ ํฉํ์ง ์์ง๋ง ๊ฐ์ ํ ๋ฐฉ๋ฒ์ด ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด๊ฒ์ด ์๋ํฉ๋๊น?
echo 23 > /sys/class/gpio/unexport; echo 23 > /sys/class/gpio/export; sleep 1; echo out > /sys/class/gpio/gpio23/direction
@asb ๋ค , ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค. ๊ถํ์ด ๋ณ๊ฒฝ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋๋ก onoff ์์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๊ฒ์ ๋๋ค. ์ฅ์ ์ onoff๋ฅผ ์ฌ์ฉํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ํผ์ ์ ๋ฌธ์ ๋ฅผ ํผํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
@popcornmix ์, ์๋ํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
GPIO ๊ถํ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉ์ ๊ณต๊ฐ์ผ๋ก ํ์ฅํ๋ ๊ฒ์ ๊ฐ์น๋ฅผ ๋ณผ ์ ์์ง๋ง ์ด ๊ตฌํ์
์ปค๋ GPIO ๋ด๋ณด๋ด๊ธฐ ์์
์ ์๋ฏธ๊ฐ ์์๋์์ต๋๋ค. /sys/class/gpio/export์ ์ฐ๊ธฐ
์ฐ๊ธฐ๊ฐ ๋ฐํ๋๊ธฐ ์ ์ ์ฌ์ฉ์ ๊ณต๊ฐ ํ๋ก์ธ์ค๊ฐ ์์
์ ์๋ฃํ๋ค๊ณ ๋ณด๊ณ ํ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
์ฌ์ฉ์๊ฐ sysfs ๋ฉํ๋ฐ์ดํฐ๊ฐ ์์ ํ๋ ๋๊น์ง ์ ์ ๊ธฐ๋ค๋ ค์ผ ํ๋ค๊ณ ๋งํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ ์๋ฃจ์
์ ํํ ๋๊ธฐ ๊ธฐ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ๋ด๋ณด๋ด๊ธฐ ์์
์ด ๋งค์ฐ ์ถ์
ํฉ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ ์ ๋ต
๋ฉํ๋ฐ์ดํฐ(์: gpio๋ก ์ค์ ๋ ๊ทธ๋ฃน)์ ๋ณ๊ฒฝ ์ฌํญ์ ์ฐพ๋ ๊ฒ์
์ฌ์ฉ์ ๊ณต๊ฐ ๊ถํ ํ๋ก์ธ์ค๋ ์ ์ฐ์ฑ์
๋๋ค. ๋ฃจํธ๊ฐ ์ ์ ํ ๊ทธ๋ฃน์ด๊ณ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ค๊ณ ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
๋ฐ์ํฉ๋๋ค.
์ปค๋ GPIO ๋ด๋ณด๋ด๊ธฐ ์์
์ ๋ํ ์๋ฏธ๋ก ์ ๋ณ๊ฒฝ์ ์ด์ ๊ฐ๋ฅํ ์ฝ๋์ ๋ํ ์ฅ์ ๋ฌผ์ผ ๋ฟ๋ง ์๋๋ผ
Raspberry Pi์ ๋ค๋ฅธ ํ๋์จ์ด ํ๋ซํผ ๊ฐ์๋ ๋ฌผ๋ก ๋ค๋ฅธ Linux ๊ฐ์๋
Raspberry Pi์ ๋ฐฐํฌํ.
๋์. ์๋ํ๋ sysfs ๊ตฌํ์ ์ ๊ณตํ๋ ๊ฒ์ ์ปค๋์ ์ฑ ์์ด๋ฉฐ, Raspbian์ ๊ตฌํ์ ๋ถ๋ช ํ ๋ชป์๊ธด ๋ฐฉ์์ผ๋ก ๊นจ์ ธ ์์ต๋๋ค. ์ด ๋ฌธ์ ๊ฐ ์ด๋ป๊ฒ ๋ซํ ๊ฒ์ผ๋ก ํ์๋์๋์ง ์ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ถ์ ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ํ์ํ ๋งค์ฐ ์ฑ๊ฐ์ ๋ฌธ์ ์ ๋๋ค. ๋ซํ์ง ๋ง์์ด์ผ ํ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ์ถ์ ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ํ์ํ ๋งค์ฐ ์ฑ๊ฐ์ ๋ฌธ์ ์ ๋๋ค. ๋ซํ์ง ๋ง์์ด์ผ ํ์ต๋๋ค.