Archive for september, 2015

Aplikácie pre Raspberry Pi2 s Windows 10

1. septembra 2015

Pripomeňme, že doska (v Alze stojí 59 €, v zahraničných zásielkových obchodoch ju zoženiete lacnejšie) využíva štvorjadrový procesor ARM Cortex-A7 taktovaný na 800MHz a 1GB SDRAM. Umožňuje aj pripojenie klasického externého monitora cez rozhranie HDMI, alebo displeja ako súčiastky cez 15-pinový Display Serial Interface (DSI). Externý displej môžete využiť buď ako súčasť scenára nasadenia dosky, napríklad v informačnom paneli, alebo len v etape ladenia aplikácie na výpis obsahu premenných a podobne. Na doske je aj ďalší 15-pinový MIPI Camera Serial Interface (CSI-2) konektor na pripojenie kamery. Napájanie je štandardne riešené z micro USB portu (5V, 2A). K dispozícii sú 4 porty USB 2.0, Ethernet 10/100 a audio 3.5mm jack konektor.

Pri “elektrickom” zakomponovaní dosky do zariadenia, ktoré bude ovládať využijete 40-pinový systémový konektor. Obsahuje 27 vstupno – výstupných portov, pričom niektoré z nich sa dajú prekonfigurovať tak aby fungovali ako špeciálne porty (SPI, I2C, RS232…).

Ukážeme dva logicky na seba nadväzujúce príklady Hello World a Blinky. “Hello world” aplikácia bude zobrazovať text a grafiku cez monitor pripojený HDMI káblom. Názov druhej aplikácie “Blinky” je notoricky známy v komunite vývojárov aplikácií pre mikrokontroléry. Cieľom je rozblikať LED diódu pripojenú k GPIO portu. Po úspešnom spustení takejto aplikácie na doske bez displeja máte istotu, že všetko je správne prepojené a nakonfigurované a môžete sa pustiť do vývoja reálnych aplikácií. Pre jednoduchosť, druhý projekt popísaný v tomto článku vznikne doplnením aplikácie HelloWorld o obsluhu časovača a GPIO portu. Okrem blikania LED diódou bude zobrazovať na obrazovke aj synchrónne blikajúci kruh

Hello World

Na vývoj potrebujete fyzický, alebo virtuálny počítač s Windows 10 a vývojovým prostredím Visual Studio Vytvorte projekt typu Blank App v zložke Windows Universal a nazvite ho Hello World. Využijeme programovací jazyk C#.

Keďže neskôr v rámci UWP aplikácie pre dosku Raspberry Pi 2 s Windows 10, budeme využívať funkcionalitu špecifickú pre IoT Core edíciu tohto univerzálneho operačného systému, najskôr musíme do projektu pridať referenciu na Windows IoT SDK. Otvorte dialógové okno Reference Manager (v okne Soluton Explorer v kontextovom menu Referencess, položka Add) a označte položku Windows IoT Extension SDK

Používateľské rozhranie v súbore MainPage.xaml bude obsahovať len dva prvky – TextBox a tlačidlo

<Grid Background=”{ThemeResource ApplicationPageBackgroundThemeBrush}”>


<StackPanel HorizontalAlignment=”Center” VerticalAlignment=”Center”>


<TextBox x:Name=”HelloMessage” Text=”Hello, World!” Margin=”10″ IsReadOnly=”True”/>


<Button x:Name=”ClickMe” Content=”Klikni sem!”
Margin=”10″ HorizontalAlignment=”Center”/>


</StackPanel>

</Grid>

Obsluha zatlačenia tlačidla v súbore MainPage.xaml.cs je taktiež triviálna

private
void ClickMe_Click(object sender, RoutedEventArgs e)

{


this.HelloMessage.Text = “Hello, Windows IoT Core!”;

}

Keďže je to univerzálna aplikácia, ktorá pobeží nielen na Raspberry Pi2, ale na akomkoľvek Windows 10 zariadení, a zatiaľ sme do nej nepridali žiadnu funkcionalitu špecifickú len pre IoT Core môžete aplikáciu najskôr spustiť na svojom vývojárskom počítači. Všimnite si, že v poli Solution Platform je nastavená platforma x86, takže nemusíte nič meniť.

V druhej fáze pripojíme vývojovú dosku Raspberry Pi2 cez sieť k počítaču, na ktorom aplikáciu vyvýjame a spustíme aplikáciu priamo na nej. Pripojte k doske ethernetový kábel, monitor, klávesnicu a myš. Po nábehu operačného systému je doska pripravená na zavedenie aplikácie. Doska musí byť pripojená v rovnakej sieti ako vývojársky počítač a musí mať unikátny názov. Názov môžete zmeniť tak, že sa k doske pripojíte cez Power Shell a nový názov nastavíte príkazom

setcomputername <nový-názov>

Najskôr je potrebné v poli Solution Platform nastaviť ako hardvérovú platformu ARM a vo vedľajšom poli zmeniť voľbu Local Machine na Remote Machine. V dialógu Remote Connections vyberte pripojenú vývojovú dosku. Klávesom F5, alebo z menu Debug | Start Debugging aplikáciu spustíte.

Ak sa vám zobrazí oznam Unable to connect to the Microsoft Visual Studio Remote Debugger , je potrebné spustiť na doske externý debugger msvsmon.exe. Jeho spúšťanie nastavíte cez PowerShell príkazom

schtasks /run /tn StartMsvsmon.

Vo finále je potrebné nastaviť, aby sa vaša aplikácia spustila automaticky po nabootovaní Windows 10 IoT Core na Raspberry Pi2, je potrebné cez PowerShell zadať príkaz

iotstartup add headed HelloWorld.

Blinky

Námetom aplikácie je rozblikať LED diódu pripojenú k niektorému GPIO portu, v tomto prípade konkrétne ku GPIO5, ktorý je na pine konektora 29. LED diódu je potrebné zapojiť cez obmedzovací odpor, tak ako je naznačené na schéme. Môžete využiť univerzálnu prepojovaciu dosku, alebo jednoduchšie pripojiť LED diódu s odporom priamo na 40 pinový konektor pomocou dvoch dutiniek.


Pripojenie LED diódy k vhodnému GPIO pinu. Hodnotu odporu odporúčame 220 ohm

Rasbperry6 Príklad zapojenia na univerzálnej prepojovacej doske

Keďže je to úvodný príklad, bola by škoda nevyužiť možností výpisu ladiacich informácií, preto aplikáciu vytvoríme pre konfiguráciu s monitorom pripojeným cez HDMI. Pre jednoduchosť upravíme už vytvorený projekt Hello World, v ktorom už máte pridanú referenciu na Windows IoT Extension SDK. Používateľské rozhranie aplikácie v súbore MainPage.xaml bude obsahovať virtuálnu LED, údaj o perióde časovača a pole pre prípadný oznam.

<StackPanel HorizontalAlignment=”Center” VerticalAlignment=”Center”>

<Ellipse x:Name=”LED” Fill=”LightGray” Stroke=”White”

Width=”100″ Height=”100″ Margin=”10″/>

<TextBlock x:Name=”DelayText” Text=”500ms” Margin=”10″

TextAlignment=”Center” FontSize=”26.667″ />

<TextBlock x:Name=”GpioStatus” Text=”Inicializujem GPIO…”

Margin=”10,50,10,10″ TextAlignment=”Center” FontSize=”26.667″ />

</StackPanel>

 

Najskôr ukážeme príklad procedúry, ktorá nastaví výstup GPIO 5 na hodnotu logická 1. V príklade využijeme sofistikovanejší kód v obsluhe tiku časovača, ktorý bude diódu rozsvecovať a zhášať.

using Windows.Devices.Gpio;

 

public void GPIO()

{

//implicitný GPIO controller

GpioController gpio = GpioController.GetDefault();

if (gpio == null) return; //GPIO nedostupné

 

//Otvorenie GPIO 5

using (GpioPin pin = gpio.OpenPin(5))

{

//Nastavenie HIGH value (logická 1) – ipmlicitná hodnota pre výstup

pin.Write(GpioPinValue.High);

 

//Mód pinu výstup

pin.SetDriveMode(GpioPinDriveMode.Output);

}

}

 

Kód v súbore MainPage.xaml.cs obsahuje definovanie parametrov a inicializáciu časovača s periódou 500 ms.

private const int LED_PIN = 5;

private GpioPin pin;

private GpioPinValue pinValue;

private DispatcherTimer timer;

private SolidColorBrush redBrush = new SolidColorBrush(Windows.UI.Colors.Red);

private SolidColorBrush grayBrush = new SolidColorBrush(Windows.UI.Colors.LightGray);

 

public MainPage()

{

InitializeComponent();

 

timer = new DispatcherTimer();

timer.Interval = TimeSpan.FromMilliseconds(500);

timer.Tick += Timer_Tick;

InitGPIO();

if (pin != null)

{

timer.Start();

}

}

 

Procedúra pre inicializáciu GPIO portu najskôr testuje, či zariadenie takýto typ portov má a následne nastaví GPIO pin 5 do výstupného módu

private void InitGPIO()

{

var gpio = GpioController.GetDefault();

if (gpio == null)

{

pin = null;

GpioStatus.Text = “Zariadenie nemá GPIO”;

return;

}

 

pin = gpio.OpenPin(LED_PIN);

pinValue = GpioPinValue.High;

pin.Write(pinValue);

pin.SetDriveMode(GpioPinDriveMode.Output);

GpioStatus.Text = “GPIO inicializované.”;

}

 

Napokon vytvorte procedúru, ktorá sa volá v každom tiku časovača a ktorá periodicky rozsvecuje a zháša LED diódu a zároveň mení farbu kruhu na obrazovke

private void Timer_Tick(object sender, object e)

{

if (pinValue == GpioPinValue.High)

{

pinValue = GpioPinValue.Low;

pin.Write(pinValue);

LED.Fill = redBrush;

}

else

{

pinValue = GpioPinValue.High;

pin.Write(pinValue);

LED.Fill = grayBrush;

}

}

Používateľské rozhranie aplikácie. Pridali sme prvok typu slider, pomocou ktorého môžeme meniť periódu blikania.

Ľuboslav Lacko