Obsługa GPIO w OpenWrt
Ostatnia zmiana: 2023-09-05 18:12

GPIO (General Purpose Input/Output) są uniwersalnymi liniami wyprowadzonymi z układu SoC, które zwykle wykorzystywane są przez system operacyjny do sterowania innymi komponentami systemu. Może to być przełącznik, może to być realizacja magistrali np. i2c lub 1-wire, SDMOD albo do innych celów. Takie linie są zwykle programowalne i można jest ustawić jako wejście lub wyjście. Lini jest zwykle kilkadziesiąt, część z nich zwykle nie jest wykorzystywana i można je wykorzystać do własnych celów.

Jeżeli istnieje katalog /sys/class/gpio to najprawdopodobniej możemy programowo sterować liniami z wykorzystaniem mechanizmu tzw. "sysfs".

Włączenie obsługi GPIO

Aby sterować linią należy je najpierw udostępnić do przestrzeni użytkownika ("wyeksportować"). Robi się to podając odpowiedni numer GPIO do pliku export w w/w katalogu (w tym przykładzie gpio o numerze 2):


    # echo "2" > /sys/class/gpio/export

Powinien pojawić się katalog o nazwie /sys/class/gpio/gpio2. Jeżeli takiego nie ma - najprawdopodobniej GPIO o numerze 2 jest wykorzystywane przez system i nie można z niego skorzystać.

Linia wyjściowa

Linię można zdefiniować jako wyjście poleceniem:


    # echo out > /sys/class/gpio/gpio2/direction

Linię zdefiniowaną jako wyjście można sterować ustawiając odpowiednią wartość w pliku value


    # echo 1 > /sys/class/gpio/gpio2/value
    # echo 0 > /sys/class/gpio/gpio2/value

Jeżeli podłączymy pod tą linię np. diodę LED lub przekaźnik to można tak dane urządzenie włączyć i wyłączyć.

Należy pamiętać że włączona linia ma napięcie zwykle 3.3V (takie jak router), oraz ma niewielką obciążalność prądową (rzędu kilku - kilkunastu mA).

Linia wejściowa

Linię można zdefiniować jako wejście poleceniem:


    # echo in > /sys/class/gpio/gpio2/direction

Stan linii zdefiniowanej jako wejście można odczytać tak samo z pliku value


    # cat /sys/class/gpio/gpio2/value

Jeżeli podłączymy pod tą linię np. przycisk i odpowiednie np. podciągnięcie do VCC, to naciskając go można odczytać jego stan (załączony lub nie).

Zwolnienie linii

Jeżeli nie używamy już linii można "oddać" ją systemowi poleceniem


    # echo "2" > /sys/class/gpio/unexport


Patrz także GPIO w zastosowaniach

Zobacz także obsługę przycisków oraz LED - one także są sterowane przez GPIO!