Raspberry Pi w testach embedded #4: Pytest i GPIO
W tej części użyjemy w testach złącz GPIO. GPIO to interfejs składający się z pinów do komunikacji na przykład między Raspberry Pi a urządzeniami peryferyjnymi. Będziemy sterowali przekaźnikiem używając GPIO i jednocześnie sprawdzali, czy sam przekaźnik działa poprawnie. Przekaźniki mogą okazać się bardzo przydanymi elementami naszego środowiska testowego. Mogą symulować np. naciśnięcie przycisku w testowanym urządzeniu.
W tej części użyjemy w testach złącz GPIO. GPIO to interfejs składający się z pinów do komunikacji na przykład między Raspberry Pi a urządzeniami peryferyjnymi. Będziemy sterowali przekaźnikiem używając GPIO i jednocześnie sprawdzali, czy sam przekaźnik działa poprawnie. Przekaźniki mogą okazać się bardzo przydanymi elementami naszego środowiska testowego. Mogą symulować np. naciśnięcie przycisku w testowanym urządzeniu. W przykładzie, który zaprezentuje poniżej, będziemy zmieniać stan przekaźnika, wysyłając sygnał z jednego z pinów GPIO do przekaźnika i sprawdzać, czy przekaźnik zadziałał poprawnie. Użyłem przekaźnika, który możesz znaleść w linku poniżej:
Instalacja gpiozero
Aby umożliwić sterowania GPIO w RPi Zero z poziomu Pythona wystarczy zainstalować biblioteki: gpiozero i RPi.GPIO
pi@raspberrypi:~# sudo pip3 install gpiozero
pi@raspberrypi:~# sudo pip3 install RPi.GPIO
Po instalacji sprawdźmy, czy mamy możliwość importowania biblioteki. Wejdź do interpretatora pythona (pythonowy rodzaju linii komend) za pomocą komendy „python” i zaimportuj bibliotekę gpiozero.
pi@raspberrypi:~# python
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import gpiozero
>>>
Aby wyjść z interpretera, wciśnij Ctrl+a+d lub wpisz quit()
GPIO w RPi posiada różne typy pinów. By dowiedzieć się jakie piny odpowiadają za zasilanie, uziemienie lub które z nich możemy użyć do komunikacji z RPi, wpisujemy komendę „pinout” w linii komend malinki:
Otrzymujemy podstawowe informacje o możliwościach GPIO naszego Rasberry, z którymi możemy rozpocząć zabawę z przekaźnikiem.
Podłączenie przekaźnika do Rapberry Pi
Do zasilenia przekaźnika (pin VCC) wykorzystamy pin (4) Raspberry Pi. GND Raspberry (ja użyłem pinu 6) łączymy z pinem GND przekaźnika. Na poniższym rysunku widzimy, że mój przekaźnik ma cztery kanały, w przykładzie testów wykorzystam tylko jeden. Więc nie musisz się martwić, jeżeli posiadasz przekaźnik z inną liczbą kanałów. Sterowanie pierwszym przekaźnikiem (pin IN1 Przekaźnika) podłączyłem do GPIO17 (RPi pin 11).
Tak podłączonym przekaźnikiem możemy już sterować. Tylko jak sprawdzimy, czy działa? Możemy wyjścia przekaźnika podłączyć do Raspberry i sprawdzić, czy przekaźnik działa jak „przycisk”. Podłącz pierwsze wyjście przekaźnika do GND (pin 9) a drugie do GPIO27 (pin 13).
W ten sposób, gdy przełączymy RPi w stan wysoki na GPIO17 przełączymy przekaźnik i zewrzemy pin 13 i pin 9. Możemy to sprawdzić za pomocą interpretera pythona:
pi@raspberrypi:~# python
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from gpiozero import LED, Button
>>> stan = LED(17)
>>> stan.on()
Test sprawdzający przekaźnik
Gdy już mamy zainstalowane potrzebne biblioteki i połączone RPi z przekaźnikiem możemy rozpocząć pisanie testu.
Jeżeli to nie wiesz jak tworzyć testy zapraszam do artykułu o podstawach pisania testów w pyteście.
Poniżej zamieszczam kod z testem. Jest to prosty test bez zabezpieczeń. Test w początkowej fazie powinien sprawdzać, czy sprzęt jest gotowy do testów i czyścić wszystkie stany do tych sprzed testu po zakończeniu testu. Jednak spójrzmy na przykład poniżej:
from gpiozero import LED, Button
from time import sleep
stan = LED(17)
przycisk = Button(27)
def test_zien_stan():
stan.on()
sleep(0.1)
assert przycisk.is_pressed is True
stan.off()
sleep(0.1)
assert przycisk.is_pressed is False
W tym przykładzie krok po kroku (jak najbardziej czytelnie), pokazałem stan przycisku po włączeniu przekaźnika (przycisk przyciśnięty — True) i po jego wyłączeniu (przycisk zwolniony – False). Dodałem funkcję „sleep” aby przekaźnik zdążył się przełączyć, zanim sprawdzimy jego stan.
Gratulacje, napisałeś swój pierwszy test z użyciem GPIO i przekaźników. Ta umiejętność może ci bardzo ułatwić przyszłą automatyzację systemów wbudowanych.