Если вы уже установили Windows 10 на Raspberry — значит пришло самое время обсудить, как правильно использовать пины и I2C. Конечно, если вы собираетесь создавать приложение, которое не работает с GPIO, вы не должны делать что-то особенное — нужно попросту создать обычное универсальное приложение, такое же как для настольного компьютера или телефона с использованием C# или других языков и задеплоить его на ARM платформы непосредственно из Visual Studio. Но GPIO устройства особенные, фичи которых нет смысла включать в общую библиотеку. Так что, если вы собираетесь использовать специфические особенности IoT необходимо добавить IoT расширение в ваш проект.
Это расширение описывает только два контракта: Windows.Devices.DevicesLowLevelContract и Windows.System.SystemManagementContract. Их легко найти по данному пути: C:\Program Files (x86)\Windows Kits\10\Extension SDKs\WindowsIoT\10.0.10069.0 и проверить SDKManifest.xaml. SystemManagement не содержит ничего особенного — просто классы, которые помогают выключать устройство и изменять часовой пояс. А вот DevicesLowLevelContract содержит много важных классов. Давайте посмотрим на Raspberry и поймем, чего же мы можем достичь благодаря этим классам.
В случае GPIO можно использовать желтые пины, чтобы посылать сигналы датчикам или принимать данные от них. В Raspberry все выводы генерируют напряжения в 3,3 вольта. Розовые контакты поддерживает протокол SPI, которые позволяют вам подключить до двух устройств/датчиков (возможно и три, но я никогда не пробовал так сделать). Наконец, синие пины позволяют использовать I2C концентратор, который поддерживает более ста устройств/датчиков. НУ и напоследок: GND пины для земли и еще четыре пина питания (два 5V и два 3,3V).
Начнем с GPIO. Вы можете найти необходимые классы и перечисления в пространстве имен Windows.Devices.Gpio, и они позволяют разработчикам контролировать GPIO пины. Первый класс это GpioController, который позволяет получить доступ к контроллеру и получить ссылку на необходимые контакты. Если вы собираетесь использовать GPIO, то вы должны начать с вызова метода GetDefault, который возвращает ссылку на текущий контроллер GPIO (если он есть):
var controller=GpioController.GetDefault();
Если вы собираетесь написать действительно универсальный код, то вам необходимо проверить контроллер на null (убедиться в том, что он есть). Если это так (равно null) это значит, что у вашего устройства нет GPIO (дектоп, телефон и т.п.) Такого рода проверки очень полезны, т.к. начиная с Windows 10 у нас есть универсальная платформа, которую вы можете запустить на любом поддерживаемом устройстве.
Если у вас есть доступ к контроллеру, это значит, что вы можете попробовать получить ссылку на контакты. Метод OpenPin позволяет получить ссылку на штифт блокировки пина. Конечно, этот метод не поможет вам настроить пин и просто предоставить ссылку на объект GpioPin. Тут необходимо поступить так же, как поступали выше — проверить объект на null, потому что другие процессы могут заблокировать штифт для собственных целей.
var pin = controller.OpenPin(0); if (pin == null) { return; }
Метод OpenPin должен получить номер пина. Вы должны использовать те же самые номера, как и на изображении выше. Наконец, если вы получили доступ к пину — вы можете попробовать работать с ним. Есть три важных метода: SetDriveMode, Read и Write. С помощью первого Вы можете установить пин как вход или выход. Остальные два позволяют принимать и отправлять сигнал соответственно.
Так что, если вы уже работали с подобными устройствами — вы не найдете ничего особенного, но если вы новичок в IoT — вы можете начать с создания простого проекта Blinky от Microsoft, который вы можете найти здесь.
Необходимо признать, что наиболее интересные классы находятся в Windows.Devices.I2C и Windows.Devices.SPI пространствах имен. Но о них мы поговорим в следующий раз.
Ссылка на источник: Windows 10: How to use IoT extension for Raspberry Pi 2 (part 1)
Добавить комментарий