KursyPoradnikiInspirujące DIYForum

Odroid C2 – pierwszy program w C, obsługa GPIO

Odroid C2 – pierwszy program w C, obsługa GPIO

Odroid C2, to najnowszy zestaw od Hardkernela. Podobnie jak w większości jednopłytkowców, do dyspozycji użytkownika przekazano też GPIO.

Każde z wyprowadzeń może pełnić rolę wejścia lub wyjścia. Część z nich pozwala na sprzętowe generowanie sygnałów zgodnych z popularnymi magistralami (np. I2C, UART).

Od strony technicznej, Odroid C2 ma wyprowadzone linie GPIO na złącze szpilkowe o czterdziestu stykach i rastrze 2,54 mm. Oprócz tych sygnałów, na złączu występują również napięcia 3,3 V oraz 5 V, mogące posłużyć do zasilania nakładanych modułów rozszerzających (tzw. shieldów).

Do sterowania liniami GPIO koniecznie jest załadowanie systemu operacyjnego. Ma to oczywiście szereg korzyści, do obsługi linii GPIO można użyć wtedy terminala lub stworzyć aplikację do ich sterowania, zaś potrzebne biblioteki da się pobrać z Internetu przy pomocy prostych komend. W przykładowej wersji Linuxa Ubuntu 16.04 zainstalowany jest zestaw kompilatorów GCC.

Instalacja biblioteki wiringPi

W tym przykładzie, do obsługi linii GPIO posłużymy się gotową biblioteką wiringPi. Jak widać, biblioteka zamieszczona została na GitHubie, a więc warto na początek zainstalować w systemie program "Git" – w tym celu należy wykonać w terminalu komendy:

Po zakończeniu instalacji GIT'a wykonujemy polecenie:

Pozwoli ono na skopiowanie folderu z podanej ścieżki WWW na pamięć Odroida. Bibliotekę wiringPi należy następnie skompilować przy użyciu następujących komend:

W tym momencie mamy na komputerze zainstalowany program, pozwalający na obsługę GPIO bezpośrednio z linii komend. Warto zapoznać się z możliwościami wiringPi – na przykład wywołując komendę gpio readall (z folderu /home/odroid/wiringPi/gpio).

Otrzymamy wtedy graficzną ilustrację konfiguracji i stanów dostępnych linii, podobną do przedstawionej poniżej. Jak widać, z tabeli można odczytać nazwy portów, ich tryby pracy oraz obecne stany logiczne. W tym przypadku będą nas interesowały numery w rubryce wPi.

odroid_tabela

Graficzne przedstawienie konfiguracji GPIO.

Przy użyciu komendy gpio read x (gdzie x – numer linii wPi) możliwe jest odczytanie stanu na linii, poleceniem gpio mode x ustawiamy trybu pracy linii jako wejście lub wyjście, zaś przy pomocy gpio write x możemy zapisać nowy stan logiczny dla linii x.

Program testowy - podłączenie

W naszym przykładzie do linii GPIO.225 (numer wPi: 11) podłączamy diodę zieloną katodą do masy, zaś anodą, poprzez rezystor ograniczający (o wartości 330Ω) do GPIO.225 (fizycznie jest to pin 26 złącza). Można w tym celu użyć pojedynczych kabelków, jednakże producent Odroida wyszedł naprzeciw potrzebom klientów, wprowadzając do oferty zestaw C Tinkering Kit.

Po pierwszych, nieprzyjemnych próbach dołączenia diody z rezystorem z użyciem pojedynczych kabelków żeńsko-żeńskich, sięgnęliśmy po ten właśnie zestaw od Hardkernela:

Podłączenie diody do wyprowadzeń płytki.

Podłączenie diody do wyprowadzeń płytki.

Następnie poniższą komendą odczytujemy stan linii:

Program zwraca wartość binarną. W tym przypadku jest to logiczne 0, a podłączona do tej linii dioda nie świeci. Ustawiamy więc tryb pracy portu jako wyjście przy użyciu komendy:

Żeby zaświecić podłączoną diodę, wystarczy teraz wystawić na linię logiczną jedynkę:

Dioda świeci, a ponowne wywołanie gpio read 11 zwróci wartość logiczną 1.


Warto dodać, że za pomocą poniższej komendy odczytać można również stan linii, na której wymuszamy napięcie z zewnątrz (np. przy pomocy przycisku).

W tym przypadku jednak, linia musi być ustawiona w tryb wejścia komendą:

 Efekt wywołania komendy:

Sprawdzanie stanu GPIO.

Sprawdzanie stanu GPIO.

Aplikacja sterująca GPIO w C

Do obsługi diody, podłączonej do linii GPIO wykorzystamy tym razem kod napisany w języku C. Z założenia program ma wyświetlić napis w terminalu i wysterować diodę tak, by migała w rytmie 3 mignięcia – przerwa. Kod wykorzystuje bibliotekę wiringPi, dzięki czemu jest przejrzysty i łatwy w zrozumieniu.

Na początku programu zdefiniowane zostały użyte biblioteki i linia, która będzie sterowana. Podobnie jak w poprzednim przykładzie, numer interesującej nas linii odczytujemy z kolumny "wPi" komendy gpio readall – w tym przypadku jest to linia 11. Dyrektywa #define LINIA 11 przypisuje jej nazwę LINIA, po czym rozpoczyna się podprogram główny main(); znajduje się w nim instrukcja wyświetlania napisu oraz konfiguracja parametrów wiringPi.

Biblioteka ta jest inicjowana, a tryb pracy linii 11 zmieniany na wyjście. Rozpoczyna się pętla while(1) w której, przy pomocy instrukcji for, trzykrotnie powtarzana jest sekwencja mignięć. W ciele instrukcji for znajdują się instrukcje wystawiające stan wysoki: digitalWrite (x, HIGH) oraz niski: digitalWrite (x,LOW), a także opóźnienia o wartości około 200 milisekund - Delay(200).

Po zakończeniu działania instrukcji for ma miejsce kolejna, jedno-sekundowa przerwa w działaniu programu, po czym następuje powrót na początek pętli while(1). Komenda Return 0; kończy podfunkcję main(), lecz kod programu nigdy jej nie wykona.

Kompilacja i uruchamianie programu

Podany kod należy oczywiście skompilować. Warto w tym momencie stworzyć oddzielny folder dla programu. W terminalu wprowadzamy kolejno:

W stworzonym właśnie folderze uruchamiamy edycję tekstową nieistniejącego jeszcze pliku o dowolnej nazwie (w tym przykładzie nazwany został "migaj"), zakończonej rozszerzeniem .c – wykonujemy komendę:

Wprowadzamy do automatycznie stworzonego pliku treść kodu programu. Należy zapisać zmiany w pliku (kombinacja klawiszy Ctrl+O oraz potwierdzenie nazwy). Po zapisaniu treści programu w pliku migaj.c, rozpoczynamy kompilację programu.

Wprowadzamy do terminala następującą komendę:

Proces kompilacji powinien przebiec bez błędów (o ile poprawnie wykonaliśmy poprzednie kroki). Stworzony został nowy plik o nazwie migaj -  możemy przystąpić do jego uruchomienia za pomocą komendy:

W efekcie dioda na płytce stykowej powinna migać w ustalonym tempie, a na ekranie powinien pojawić się napis: Migająca dioda GPIO. Program będzie pracował w pętli,  w celu zakończenia jego działania trzeba użyć kombinacji klawiszy Ctrl+C.

Cały proces kompilacji i uruchomienia kodu ukazany został poniżej:

Kompilacja i uruchomienie programu na Odroidzie.

Kompilacja i uruchomienie programu na Odroidzie.

Oficjalnym dystrybutorem Odroida jest KAMAMI.pl

Oficjalny dystrybutor Odroida.

Oficjalny dystrybutor Odroida.

Autor: Włodzimierz Hepner
Edycja, formatowanie: Damian (Treker) Szymański

C, Odroid, program, wiringPi

Trwa ładowanie komentarzy...