W tej części kursu zajmiemy się napisaniem i uruchomieniem naszej pierwszej, prostej aplikacji wyposażonej w graficzny interfejs użytkownika, dalej nazywany skrótem GUI (ang. Graphical User Interface).
Nasz program zostanie napisany w języku Python, z uwagi na niski próg wejścia dla osób rozpoczynających swoją przygodę z Linuksem w systemach wbudowanych. W następnych odcinkach kursu będziemy się zajmowali pisaniem naszych aplikacji w językach takich jak C i C++. Wtedy również zaczniemy poznawać zasady tworzenia plików Makefile, niezbędnych do budowania aplikacji. Nie wybiegajmy jednak zanadto w przyszłość.
Hello World w Pythonie
Jak już wspomniałem na początku artykułu, w tym odcinku zajmiemy się napisaniem i uruchomieniem prostej aplikacji w Pythonie z obsługą GUI. Nie będziemy jednak musieli tutaj tworzyć żadnych plików (oczywiście poza głównym skryptem) w celu zbudowania naszej aplikacji.
Do opracowywania kodu używam środowiska VSCode z zainstalowaną wtyczką Pythona i – jak napisałem już w pierwszym odcinku naszego cyklu – pracuję na systemie Linux.
Kod zawarty na listingu 1 jest krótki.
# Ustaw wymaganą wersję GTK na 3.0
gi.require_version(‘Gtk’, ‘3.0’)
from gi.repository import Gtk
# Definiujemy funkcję, która wypisuje “Hello World!” w konsoli, gdy zostanie wywołana
def print_hello(widget):
print(“Hello World!”)
# Definiujemy główną funkcję, która inicjalizuje aplikację GUI
def activate(app):
# Tworzymy główne okno aplikacji i przypisujemy je do aplikacji
window = Gtk.ApplicationWindow(application=app)
window.set_title(“Window”) # Ustawiamy tytuł okna
window.set_default_size(200, 200) # Ustawiamy domyślny rozmiar okna
# Tworzymy pudełko na przyciski i ustawiamy jego orientację na poziomą
button_box = Gtk.ButtonBox.new(Gtk.Orientation.HORIZONTAL)
window.add(button_box) # Dodajemy pudełko na przyciski do okna
# Tworzymy przycisk z napisem “Hello World”
button = Gtk.Button.new_with_label(“Hello World”)
# Łączymy zdarzenie “clicked” przycisku z funkcją print_hello
button.connect(“clicked”, print_hello)
# Łączymy zdarzenie “clicked” przycisku z funkcją zamykającą okno
button.connect(“clicked”, lambda w: window.destroy())
# Dodajemy przycisk do pudełka na przyciski
button_box.add(button)
# Wyświetlamy okno i wszystkie jego elementy
window.show_all()
# Główna funkcja, która inicjalizuje i uruchamia aplikację
def main():
# Tworzymy nową aplikację GTK z unikalnym identyfikatorem aplikacji
app = Gtk.Application.new(“Demo.example”, 0)
# Łączymy sygnał “activate” aplikacji z funkcją activate
app.connect(“activate”, activate)
# Uruchamiamy aplikację.
app.run(None)
# Uruchamiamy główną funkcję, jeśli ten skrypt jest wykonywany bezpośrednio
if __name__ == “__main__”:
main()
Listing 1. Kod aplikacji
Efektem jego działania będzie wyświetlenie na ekranie naszej płytki okienka aplikacji z przyciskiem „Hello World” (rysunek 1).
Po naciśnięciu przycisku w terminalu otrzymamy komunikat „Hello World!” (rysunek 2) a okno zostanie automatycznie zamknięte.
Dzianie aplikacji pokazano na fotografiach 1 i 2.
Wgrywanie kodu aplikacji na mikrokontroler
Aby wgranie naszej aplikacji na mikrokontroler było w ogóle możliwe, w pierwszej kolejności należy podpiąć zasilanie naszego zestawu ewaluacyjnego, a następnie podłączyć płytkę do Internetu. Ważne jest, by płytka i komputer, na którym pracujemy, były podłączone z tą samą siecią LAN. W moim przypadku zastosowałem bezpośrednie połączenie płytki z routerem za pomocą patchcorda. Osobnym kablem mam podpięty komputer, również do tego samego routera.
Aby uzyskać adres IP naszej płytki na ekranie głównym wyświetlanym przez płytkę, wybieramy zieloną ikonkę „netdata” (rysunek 3).
Po jej naciśnięciu pojawi się możliwość włączenia sieci Wi-Fi, jak również zostanie wyświetlony adres IP połączenia sieciowego, co widać na rysunku 4.
Za pomocą terminalu zainstalowanego na głównym komputerze PC nawiązujemy połączenie z płytką za pomocą narzędzia ssh – stosujemy komendę (rysunek 1):
Po poprawnym nawiązaniu połączenia uzyskamy zdalny dostęp do terminalu linuksowego na płytce z poziomu komputera.
W tym momencie możemy wgrać kod naszej aplikacji na płytkę. W tym celu otwieramy drugie okno terminalowe i – podając ścieżkę do miejsca, gdzie zapisaliśmy kod naszej aplikacji – za pomocą komendy:
przesyłamy plik do pamięci zestawu uruchomieniowego. Rysunek 2 pokazuje działanie komendy scp w terminalu. Użytkownicy systemów Linux korzystający z tmux nie muszą otwierać dodatkowego okna terminalu, wystarczy dodać nową sesję (rysunek 5).
Uruchomienie naszej aplikacji
Korzystając z wcześniej nawiązanego połączenia ssh z naszą płytką, po poprawnym wgraniu kodu aplikacji, przyszedł nareszcie czas na jej uruchomienie. Używamy w tym celu komendy:
Jako nazwę pliku podajemy nazwę naszej aplikacji, w moim przypadku jest to po prostu main.py. Widok wpisanego polecenia można zobaczyć na rysunku 6.
Po naciśnięciu klawisza Enter komenda zostanie wykonana – program uruchomi się, wyświetlając na ekranie płytki okienko, widoczne na fotografii 1.
inż. Wiktor Hubaj