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.

Pytest, GPIO

Raspberry Pi w testach embedded (Cz. 4) – Pytest, GPIO i przekaźniki


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:

Raspberry Pi w testach embedded (Cz. 4) – Pytest i GPIO image

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).

Raspberry Pi w testach embedded (Cz. 4) – Pytest i GPIO image

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.

Raspberry Pi w testach embedded (Cz. 4) – Pytest i GPIO image

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.

close

Newsletter