Zanim zaczniemy zabawę należy pamiętać ze maksymalne obciążenie prądowe wynosi 12mA.
Dostępne linie GPIO(złącze J5):
| PCB | GPIO w sysfs |
|---|---|
| GP1 | GPIO0 |
| GP2 | GPIO1 |
| GP3 | GPIO3 |
| GP4 | GPIO4 |
| GP5 | GPIO5 |
| GP6 | GPIO6 |
| GP7 | GPIO7 |
Rezystor podciągający(10kom) (J33) - zwarcie 1 i 2 daje:
| PCB | Funkcja |
|---|---|
| GP1 | PULL DOWN |
| GP2 | PULL DOWN |
| GP3 | PULL DOWN |
| GP4 | PULL DOWN |
| GP5 | PULL UP |
| GP6 | PULL UP |
| GP7 | PULL UP |
PULL UP - zwarty do +5V
PULL DOWN - zwarty do masy
W celu używania GPIO należy zainstalować moduł:
opkg update opkg install kmod-gpio-dev
Włączenie jakiegoś GPIO, np. GPIO0 („0” wskazuje pin GPIO, od 0 do 7, z pominięciem „2”):
echo 0 > /sys/class/gpio/export
Wyłączenie pinu GPIO (oznaczenie j.w.):
echo 0 > /sys/class/gpio/unexport
Włączenie GPIO spowoduje powstanie katalogu /sys/class/gpio/gpio0
Teraz możemy ustawić pin jako wejście(in - domyślnie) lub wyjście(out)
echo out > /sys/class/gpio/gpio0/direction
oraz wpisać stan logiczny „1” lub „0” (domyślny stan po inicjacji GPIO wynosi „1”)
echo 0 > /sys/class/gpio/gpio0/value
Hello World
Prosty schemat. Dioda LED podłączona katodą(część ścięta) do masy oraz anodą do GP0. WAŻNE! Należy zastosować rezystor o wartość 200-220om, po to by zmniejszyć napięcie do wymaganego dla diody LED oraz zapobieżeniu zwarciu. Tyle „sprzętu”, programowo wygląda to tak:
echo 0 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio0/direction echo 1 > /sys/class/gpio/gpio0/value (dioda się zapala) echo 0 > /sys/class/gpio/gpio0/value (dioda gaśnie)
Push the Button
Wykorzystamy tutaj 3 piny GPIO. GP0 daje sygnał na diode, GP1 jako zasilanie 5V(brak takowego na płycie, może być zewnętrzne) oraz GP7 jak wejście. W przypadku GP7 włączamy wewnętrzny PULL UP(zwieramy piny na J5).
#/bin/sh # wlaczamy GPIO echo 0 > /sys/class/gpio/export echo 1 > /sys/class/gpio/export echo 7 > /sys/class/gpio/export # funkcje echo out > /sys/class/gpio/gpio0/direction echo out > /sys/class/gpio/gpio1/direction echo in > /sys/class/gpio/gpio7/direction while true; do val=`cat /sys/class/gpio/gpio7/value` if [ $val = '0' ]; then echo "swieci-wysoki"; echo 1 > /sys/class/gpio/gpio0/value fi if [ $val = '1' ]; then echo "nie swieci-niski"; echo 0 > /sys/class/gpio/gpio0/value fi done
Zwieranie przycisku powoduje zapalanie diody LED. Poniżej film wideo z działania układu i programu. http://vimeo.com/15812291
Czujnik temperatury
Baza wiedzy na stronie digi-led.pl
Literatura:
[1] http://www.ubnt.com/wiki/RouterStation_OpenWRT_SW_Setup_Guide
[2] http://www.ubnt.com/wiki/RouterStation_Pro
[3] http://www.ubnt.com/forum/showthread.php?p=118162
[4] http://www.ladyada.net/learn/arduino/lesson5.html
[5] http://www.elektroda.pl/rtvforum/topic441865.html
[6] http://www.kpsec.freeuk.com/components/led.htm
