Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Onion Omega 2 — sterujemy pinami GPIO

W pierwszym wpisie zaprezentowałem i opisałem samą płytkę Onion Omega2. Zaś w tym wpisie zaprezentuję jak steruje się pinami GPIO z poziomu CLI. Do samej Cebuli mam dokupioną płytkę rozszerzającą Onion Expansion Doc i do niej podłączyłem główny moduł. Teraz sterowanie i obsługa Cebuli jest wygodna i możemy to robić bezpośrednio przez konsolę za pomocą kabla USB od smartfona, bo jak czytaliście we wcześniejszym wpisie cebula nie współpracuje z moim routerem od Mikrotika.

Specyfikacja Onion Expansion Dock

  • port microUSB - do zasilania i komunikacji
  • port USB A
  • wbudowana dioda LED RGB
  • przyciski Reset oraz włącznik Power
  • 30 pinowe złącze umożliwiające podłączenie nakładek

Złącza GPIO

30 piniowe złącze posiada wyprowadzenia z cebuli ale również dodatkowo piny 5V zasilane z microUSB.
Jak widać mamy wszystko przedstawione co znajduje się na danych pinach. Warto tutaj dodać, że 2 piny PWM znajdujące się na 18 i 19 pinie i mają swoje kanały oscylatora. Sterowanie samymi pinami możemy wykonywać podając ich numery zaś jeśli chcemy użyć PWM musimy posłużyć się numerami kanałów czyli CH0 > 0 i CH1 > 1.

fast-gpio

Narzędzie fast-gpio powala sterować pinami cyfrowymi oraz generować tylko programowo PWM. Generowanie PWM odpala nam osobny proces, który generuje nam wskazany sygnał na wybranym pinie. Taki PWM być może nada się np do LEDów i jeśli nie będziemy zbytnio niczym innym obciążać procesora to nada się też do sterowania silnikami, ale o płynnym sterowaniu serwami możemy zapomnieć.
Z mojego komputera połączyłem się do płytki za pomocą kabla usb-microusb a następnie za pomocą programu PuTTY podłączyłem się do portu COM13 (jaki ustawił mi system) z prędkością 115200.
Po wydaniu polecenia fast-gpio w putty otrzymamy informację o dostępnych poleceniach tego narzędzia.

Opcja set-input ustawia nam pin jako wejściowyfast-gpio set-input 0powyższe polecenie ustawi nam pin 0 jako wejściowy, dzięki czemu możemy np. odczytywać sygnał naciśnięcia przycisku. Opcja set-output ustawi nam dany pin jako wyjściowy tak abyśmy mogli np zapalać diodę itd.fast-gpio set-output 1Polecenie to ustawia pin 1 jako wyjściowy. Teraz za pomocą opcji get-direction możemy sprawdzić jak dany pin jest ustawionyfast-gpio get-direction 0otrzymamy informacji na konsoli czy pin jest w stanie wejścia input czy wyjścia output.

Następną opcja jest read, która odczytuje stan pinu zwracając 0 (stan niski) lub 1 (stan wysoki)fast-gpio read 0
Natomiast za ustawianie pinów na stan wysoki lub niski odpowiada opcja set podając jako pierwszy parametr nr pinu a drugi parametr 0 jako stan niski lub 1 jako wysokifast-gpio set 1 1
Wreszcie dotarliśmy do programowego PWM a za sterowanie jego odpowiada opcja pwm z trzema parametrami. Pierwszy parametr to nr pinu, drugi to ilość sygnałów na sekundę (w Hz) zaś kolejny to procent wypełnienia od 0-100fast-gpio pwm 2 50 100Polecenie to ustawia PWM na pinie 2 z częstotliwością sygnału 50Hz i wypełnieniem 100% jako osobny proces, który możemy zobaczyć np. za pomocą programu top
Aby wyłączyć programowy PWM na pinie 2 musimy go ustawić na stan niskifast-gpio set 2 0O ostatniej opcji pulses nie znalazłem informacji jak tego używaćfast-gpio pulses <gpio> <path_pulses_file> <repeats>Ale służy zapewne do asynchronicznego sterowania stanami danego pinu i ich powtórzeń.

Sprzętowy PWM

Do sterowania sprzętowym PWM w konsoli służy narzędzie pwm-exp. Jak wspominałem wcześniej tutaj posługujemy się numerami kanałów oscylatora wbudowanego w układ cebuli.
Sama cebula posiada 2 kanały CH0 (na pinie 18) i CH1 (na pinie 19) zaś do sterowania używamy numerów 0 i 1. Przed korzystaniem z oscylatora i generowania PWM musimy go w pierwszej kolejności uruchomić wydając poleceniepwm-exp -i
Konstrukcja polecenia wygląda takpwm-exp [Opcje] <kanał> <Procent wypełnienia>Opcje jakie mamy dostępne to
  • -i - włączenie oscylatora
  • -s - wyłączenie oscylatora
  • -p - pozwala na ustawienie na określony czas w ms
  • -f - ustawia częstotliwość impulsów w Hz
  • -q - nie wyświetla informacji po wydaniu polecenia
  • -v - wyświetla dodatkowe informacje po poleceniu
Kanał możemy podać albo konkretny lub wybierając wszystkie dodając zamiast nr kanału allpwm-exp all 50
Powyższe polecenie ustawia wszystkie kanały z częstotliwością 50Hz (domyślna gdy nie podajemy parametru z opcja -f) z wypełnieniem 50%.
Sterowanie pojedynczym kanałem z ustawieniem np. częstotliwości 100Hz i wypełnieniu 70% wygląda takpwm-exp -f 100 0 70
Jak widać wykonałem również ustawienie 1 kanału z opcją -q dzięki czemu polecenie nie zwróciło nam informacji zwrotnych.
Jak wspominałem gdy nie podajemy parametru -f odpowiadającego za częstotliwość polecenie ustawia jego wartość domyślną na 50Hz
Wyłączenie oscylatora możemy wykonać za pomocą opcji -s co wiąże się z zatrzymaniem ustawionych sprzętowych PWM-ów.pwm-exp -s

omega2-ctrl

Za pomocą narzędzia omega2-ctrl możemy przełączyć tryby pinów GPIO przełączając np. funkcje UART, SPI czy I2C na zwykłe piny GPIO. Za pomocą poniższego polecenia możemy sprawdzić jak w obecnej chwili są ustawione grupy pinów funkcyjnych.omega2-ctrl gpiomux get
Ustawione obecnie tryby znajdują się w nawiasach kwadratowych []. Aby zmienić tryb danych grup należy wykonać polecenieomega2-ctrl gpiomux set <Grupa> <Tryb>Czyli np. gdy chcemy zmienić tryb dla pinów I2C na gpio musimy wykonać polecenie omega2-ctrl gpiomux set i2c gpio
i analogicznie dla pozostałych.

Podsumowanie

Mam nadzieję, że przybliżyłem wam informację jak w prosty sposób sterować GPIO w cebulach. Pominąłem we wpisie narzędzie gpioctl, które ma dość małą funkcjonalność i jest wolniejsze niżeli fast-gpio. Myślę, że w późniejszym czasie przygotuje kolejny wpis już z konkretnym działającym przykładem. Muszę przyznać że cebula pomimo moich problemów z routerem wciągnęła mnie mocno i zamierzam zagłębiać się w jej możliwości z wykorzystaniem również bibliotek dla C, Javascript i Python-a. A więc do następnego wpisu. 

sprzęt oprogramowanie hobby

Komentarze

0 nowych
  #1 01.05.2017 20:31

Dzięki, tego szukałem!

DjLeo MODERATOR BLOGA  18 #2 01.05.2017 20:31

Codziennie jeden wpis o Cebuli?

0011010101   6 #3 01.05.2017 22:28

Masz jakiś pomysł na projekcik z użyciem tego maleństwa?

  #4 01.05.2017 22:42

podaj ile to to zuzywa pradu, ale w jakims rozsadnym czasie np. doba
powiedzmy wifi i jakis czujnik temperatury.

cyryllo   17 #5 02.05.2017 01:47

@DjLeo: obiecuje że jutro tj. dziś już nie będzie ;) więc nie będzie po twojemu ;)

cyryllo   17 #6 05.05.2017 17:43

@wwwwwww2 (niezalogowany): Nie mam obecnie żadnego miernika aby to zmierzyć. Ale rzeczywiście warto kupić i sobie zmierzyć. Nie ma pewnie co porównywac z esp i raczej jest to bardziej do rozwiązań z stałym zasilaniem. Choć zapewne dało by się zbudować jakiś układ z akumulatorem/bateria + panel solarny. Muszę poczytać czy cebula ma możliwość jakiegoś usypiania lub coś w ten deseń, ale zapewne będzie trzeba zmniejszać taktowanie + wyłączanie wifi i zbędnych modułów i wybudzanie ich wg potrzeb

Gratulacje!

znalezione maszynki:

Twój czas:

Ogól Naczelnego!
Znalazłeś(aś) 10 maszynek Wilkinson Sword
oraz ogoliłeś(aś) naszego naczelnego!
Przejdź do rankingu
Podpowiedź: Przyciśnij lewy przycisk myszki i poruszaj nią, aby ogolić brodę.