RaspberryPi, Pi 2 с Microsoft Windows 10 (часть2)
Для работы приложения на локальном компьютере и на удаленном устройстве это очень важно на этапе прототипирования, и он обеспечивает гораздо большую скорость, например, на этапах проектирования интерфейса. Очевидно, что по мере добавления функций для взаимодействия с оборудованием платы к приложению мы будем обязаны условно управлять присутствием или отсутствием необходимых устройств. Теперь мы хотим попытаться включить светодиод, щелкнув по кнопке, отображаемой на экране монитора. Для этого примера мы должны подключить светодиод к одному из GPIO от Raspberry Pi: мы будем использовать вывод 18.
Учитывая, что мы еще не взаимодействовали с аппаратным обеспечением платы, мы не рассматривали пакет, необходимый для этого, до сих пор. Для этого, в первую очередь, давайте нажмем правой кнопкой мыши на «Ссылки» (в то время как в Visual Studio «View Solution Explorer»), и давайте создадим контекстное меню. Из него мы выберем «Добавить ссылку», как только появится диалоговое окно со списком записей справа.Выберем «Windows Universal» и введите «IoT» в текстовое поле поиска вверху и справа/ Таким образом, список должен показать нам один элемент: «Windows IoT Extension SDK».Выберем его и нажмите «ОК», чтобы установить его.
Пакет «Windows IoT Extension SDK» предлагает нам все конкретные расширения, необходимые для работы с оборудованием; Из них мы будем использовать классы, которые позволят взаимодействовать с GPIO платы. Итак, приступим к изменению кода, чтобы адаптировать его к новым потребностям: в первую очередь мы будем модифицировать XAML-файл, чтобы создать необходимый интерфейс; Содержимое MainPage.xaml будет показано в листинге 2.
<Page
x:Class=”App2.MainPage”
xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”
xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
xmlns:local=”using:App2”
xmlns:d=”http://schemas.microsoft.com/expression/blend/2008”
xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006”
mc:Ignorable=”d”>
<Grid Background=”{ThemeResource ApplicationPageBackgroundThemeBrush}” >
<StackPanel HorizontalAlignment=”Center” VerticalAlignment=”Center”>
<TextBlock Foreground=”Blue” HorizontalAlignment=”Center”
FontSize=”48”>LED Control</TextBlock>
<Button Click=”Button_Click” HorizontalAlignment=”Center” Margin=”
0,50,0,0” FontSize=”64” >OFF</Button>
</StackPanel>
</Grid>
</Page>
Мы добавили StackPanel, который необходим для управления содержимым, когда мы хотим иметь больше элементов в нашем распоряжении в интерфейсе. В частности, StackPanel позволяет расположить элементы в столбце один за другим (при необходимости можно работать с горизонтальной ориентацией). Внутри StackPanel есть тот же TextBlock, что и в первом примере, который просто служит заголовком для страницы. В TextBlock мы вставим кнопку, целью которой является создание кнопки в интерфейсе. Кнопка является активным элементом управления в том смысле, что он способен разблокировать действие перед событием. Атрибут Click = "Button_Click" указывает, что при нажатии кнопки будет выполнен код метода с именем Button_Click. Давайте посмотрим на код, который выполняется при нажатии кнопки, как показано в листинге 3.
bool state = false;
const int LED_PIN = 18;
GpioPin pin;
private void Button_Click(object sender, RoutedEventArgs e)
{
state = !state;
var pinValue = state ? GpioPinValue.High : GpioPinValue.Low;
pin.Write(pinValue);
Button btn = (Button)sender;
btn.Content = state ? “ON” : “OFF”;
}
Кнопка действует как переключатель, который включает и выключает светодиод, в зависимости от переменной состояния. В то же время метка кнопки изменяется и устанавливается в положение «ON» или «OFF», чтобы указать состояние светодиода; Как видно из кода, используемого для изменения ярлыка кнопки, свойство «Content» является ценным.Взаимодействие с GPIO осуществляется с помощью элемента «pin», очевидно, что этот элемент должен быть определен где-то и настроен с указанием вывода, на котором он будет работать, а также при вводе или в выводе. Все это происходит в методе, названном при загрузке приложения, как показано в листинге 4.
private void InitGPIO()
{
var gpio = GpioController.GetDefault();
pin = gpio.OpenPin(LED_PIN);
pin.SetDriveMode(GpioPinDriveMode.Output);
pin.Write(GpioPinValue.Low);
}
InitGPIO делает именно то, что только что было описано, поскольку первое, что он получает экземпляр GpioController, который, как вы можете себе представить, представляет собой класс управления GPIO. После того, как экземпляр контроллера был приобретен, он используется для создания элемента «pin», и указан контакт, на котором он должен действовать (в нашем случае LED_PIN, то есть номер 18). Путем настройки режима работы на выходе и установки выводов на низком уровне инициализация завершена. Очевидно, InitGPIO нужно будет вспомнить при загрузке приложения.
Полный пример программы управления светодиодами можно скачать здесь
Мы экспериментировали с Raspberry Pi и обнаружили, что создавать приложения очень просто.Однако, продвигаясь к более сложным приложениям, придется столкнуться с необходимостью контролировать параметры функции системы. Windows 10 IoT Core предлагает управляющий веб-интерфейс по умолчанию, это параметры, которые могут быть достигнуты на следующем веб-адресе: http: //minwinpc.local: 8080 . Адрес указывается именем по умолчанию, которое назначено на плату; Очевидно, его можно изменить, и в этом случае также изменится URL-адрес, в качестве альтернативы можно использовать IP-адрес вместо minwinpc.local .Учетными данными по умолчанию являются «Администратор» с «p @ ssw0rd» в качестве пароля (и, очевидно, было бы лучше изменить его, если вы используете плату за пределами вашей лаборатории).Интерфейс очень простой, но из-за этого он не менее эффективен: он позволяет просматривать список выполняемых процессов, анализировать загрузку процессора и потребление ОЗУ в реальном времени, выполнять или останавливать приложения, И имеет много других интересных функций.
Интересной функцией является возможность развертывания приложений без необходимости проходить через Visual Studio: это отличная помощь, когда плата не подключена к среде разработки. Несмотря на такой поверхностный взгляд на IOT Core Windows 10, мы могли бы воспринимать некоторые возможности, которые мы бы назвали захватывающими. Прежде всего следует отметить, что, говоря о Universal Apps, мы говорим о приложениях, которые могут быть практически выполнены на всех устройствах, поддерживаемых Windows 10. Простые примеры, которые мы показали в статье, могут быть выполнены, например , На Windows Phone, очевидно, с соответствующими элементами управления для использования определенного оборудования, такого как GPIO. Рассматривая только поле встроенных плат, мы обнаружим, что есть не только Raspberry Pi, но, например, мы найдем Intel Galileo, и в этом случае наше приложение может быть выполнено на разных платформах с минимальными изменениями, которые в некоторых случаях Может даже оказаться ненужным.Другим отличительным фактором является эффективность разработки, связанная с использованием профессионального инструмента, такого как Visual Studio, и рабочего цикла, который позволяет разрабатывать, отлаживать и развертывать полностью интегрированным способом. Мы не рассматривали возможности, предлагаемые взаимодействием с облаком Microsoft, Azure, который позволяет переносить приложения с уровня хобби на профессиональный уровень, но сохраняя ту же простоту на работе.