Raspberry Pi – Windows 10 IoT – pierwszy projekt

Po tym jak udało nam się pomyślnie zainstalować Windows 10 na naszym Raspberry Pi możemy iść o krok dalej i napisać swój pierwszy program na tenże system. W artykule przedstawię krok po kroku jak utworzyć nowy projekt w Visual Studio, dodać malinę jako urządzenie docelowe i wgrać na nią program, który napiszemy. Program też będzie bardzo prosty i zasadniczo będzie sprowadzał się do włączania i wyłączania diody po wciśnięciu przycisku na ekranie.

Nowy projekt

Pierwszą rzeczą, którą musimy zrobić jest stworzenie nowego projektu w programie Visual Studio. W tym celu należy wybrać z menu Plik opcję Nowy > Projekt…

W okienku, które nam się pokaże wybieramy pustą aplikację na platformę uniwersalną systemu Windows.

Możemy wybrać sobie także nazwę solucji (projektu), ja ustawiłem u siebie RaspberryBasicGPIO.

W kolejnym kroku zostaniemy poproszeni o wybór wersji Windowsa, na którym ma działać nasza aplikacja. Najlepiej zacząć od jak najniższej i w razie konieczności zwiększyć w ustawieniach projektu.

Elementy IDE

Najważniejszy element to Eksplorator rozwiązań znajdujący się z prawej strony. W nim znajdziemy wszystkie pliki na które składa się nasz projekt. Ekranem startowym naszej aplikacji jest plik MainPage.xaml, który zawiera w sobie MainPage.xaml.cs (kod źródłowy).

Klikając na niego dwukrotnie zobaczymy jego zawartość. Jeżeli klikniemy na niego prawym przyciskiem myszy, a następnie wybierzemy opcję Pokaż projektanta wyświetli nam się graficzny projektant interfejsu użytkownika. Tam z lewej strony z przybornika możemy wybrać odpowiednie kontrolki i przeciągnąć je na obszar aplikacji.

Po wybraniu kontrolki na ekranie aplikacji w prawym dolnym rogu zobaczymy okienko Właściwości. Tam możemy wyklikać sobie praktycznie wszystkei interesujące nas ustawienai kontrolki takie jak wygląd, tekst, czy jest włączona itp. Po dwukrotnym kliknięciu na kontrolkę IDE wygeneruje nam metodę w kodzie służącą do obsługi zdarzenia onClick na danej kontrolce. Więcej zdarzeń możemy wygenerować wybierając ikonkę błyskawicy z okienka Właściwości.

Kod źródłowy

W przypadku głównego ekranu aplikacji wszystko sprowadza się do klasy MainPage. To ona obsługuje zdarzenia przychodzące z widoku użytkownika takie jak wygenerowana przez nas (dwukrotnym kliknięciem) metoda Button_Click. W jej ciele obsłużymy sobie przełączanie stanu diody. Zanim jednak to nastąpi musimy zadeklarować stałą oraz dwa pola w naszej klasie:

private const int PIN_LED = 18;

private GpioController gpioController = GpioController.GetDefault();
private GpioPin ledPin;

W stałej PIN_LED przechowaujemy numer pinu do któego podłączymy naszą diodę LED. W celu ustalenia numeru pinu możemy skorzystać ze schematu na stronie dokumentacji Microsoft.

Pole gpioController to nasz kontroler GPIO. To do niego odwołamy się jeżeli beziemy chcieli przejąć kontrolę nad wybranym pinem, a to zrobimy w konstruktorze:

public MainPage()
{
    this.InitializeComponent();
    if(gpioController != null)
    {
        ledPin = gpioController.OpenPin(PIN_LED);
        ledPin.Write(GpioPinValue.Low);
        ledPin.SetDriveMode(GpioPinDriveMode.Output);
    }
}

Do pola ledPin przypisujemym wartość zwróconą przez metodę OpenPin. Następnie na ten pin stan niski, i ustawiamy go jako wyjście (dzięki takiej kolejnosci od razu po ustawieniu kierunku działania pinu mamy na nim odpowiedni stan).

Kiedy mamy już ustawione pole ledPin możemy zaimplementować listener do eventu onClick:

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (ledPin == null)
    {
        return;
    }

    GpioPinValue value = ledPin.Read();
    if (value == GpioPinValue.High)
    {
        ledPin.Write(GpioPinValue.Low);
    }
    else
    {
        ledPin.Write(GpioPinValue.High);
    }
}

Sprawdzamy, czy ledPin nie jest przypadkiem nullem, następnie czytamy jego wartość. Jeżeli jest High, to zmieniamy na Low i vice-versa.

Wgrywamy program na Raspberry

Aby wgrać napisany przez nas program na malinkę należy z paska na górze ustawić target kompilacji na ARM, a następnie wybrać z menu obok zielonej strzałki opcję „Maszyna zdalna”.

Otworzy nam się okienko z wyborem urządzeń. Powinno automatycznie wykryć naszą malinę z Windowsem 10. Wtedy możemy kliknąć przycisk Wybierz i wgrać program wciskając zieloną strzałkę.

Jeżeli program nie chce się wgrać możemy też wpisać bezpośrednio adres IP maliny w ustawienaich projektu. W tym celu klikamy prawym myszy na naszą solucję (w okienku eksploratora), wybieramy opcję Właściwości, a następnie przechodzimy do zakładki Debuguj. Tam w polu komputer zdalny możemy wpisać IP maliny.

Program wgrany

Teraz na rapsberry powinien wyświetlić się nasz program. Możemy za pomocą myszki wcisnąć przycisk „Przełącz diodę” i nasza dioda podłączona do pinu 18 powinna zmienić swój stan na przeciwny.