IoT:Windows Remote Arduino и универсальные приложения
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Об этом проекте
Примечание. Смотрите обновления в комментариях внизу.
Приложение Windows 10 UWP может быть создано на основе удаленного подключения библиотека, чтобы приложение могло взаимодействовать с устройством Arduino, на котором запущена Firmata. Разработано приложение, подобное примеру Windows Remote Arduino «Blinky», но с добавлением функций. Он выполняет GPIO (выход и вход), а также некоторый аналоговый ввод-вывод. Это приложение функционально такое же, как версия Windows 8.1 из предыдущего блога этой серии. В этом блоге используется тот же материал (т. Е. Большая его часть), что и в предыдущем блоге, но из контекста универсальной платформы Windows (UWP), а не из контекста универсального приложения Windows 8.1. Целью приложения является рабочий стол Win 10, телефон Win 10 и Raspberry PI2 (под управлением Win 10 IoT). Последняя цель - «работа в стадии разработки». Этот блог можно читать без ссылки на предыдущий.
Этот проект подробно описан в моем блоге по адресу http://embedded101.com/Blogs/David-Jones/entryid/636/Windows-10-IoT-Windows-Remote-Arduino-and-Universal-Windows-Platform-Apps
Пример Windows Remote Arduino «Blinky» находится на ms-iot.github.io.
Универсальные приложения и приложения универсальной платформы Windows
Универсальные приложения (UA) достигли своего апогея в Windows 8.1. Вы можете реализовать приложения, ориентированные на рабочий стол Windows Intel, ARM RT Surface и Windows Phone (ARM), все в одном решении. Они могут использовать общий код, такой как обработчики событий, общие вычисления и данные. Код XAML должен быть специфичным для целевого объекта. Вы просто скомпилировали отдельные подпроекты для каждой цели. Во время компиляций был включен общий код.
Благодаря сдвигу парадигмы «Единая Windows» в Windows 10 один и тот же код для всех целей, включая код XAML, может использоваться для всех целей. Один и тот же проект просто нужно перекомпилировать для разных целей. Поскольку имя UA применялось к приложениям Windows 8, требовалось новое имя для действительно универсальных приложений. Отсюда и название «Приложения универсальной платформы Windows» было придумано для Windows 10.
Все платформы Windows 10 поддерживают приложения UWP. Но есть расширения, специфичные для каждой платформы. Например, расширения Windows 10 IoT поддерживают GPIO, I2C, SPIO и т. Д. Мобильные расширения поддерживают функции телефона. И т. Д. UWP обеспечивает гарантированный базовый уровень API для всех устройств.
Пакеты SDK расширений Windows 10. Проверены расширения Desktop, Mobile и IoT.
Для этого блога мы используем шаблон UWP, а не UA, как в предыдущем блоге. Нам не нужны никакие SDK расширения.
[1] Настройте связь Bluetooth с устройством Arduino.
Вы можете пропустить этот раздел, если вы уже выполнили действие с Win 8.1.
USB или Bluetooth могут использоваться для обмена данными Firmata между устройством Arduino и устройством Windows. Для Windows 10 можно использовать оба варианта, тогда как для Windows 8.1 можно использовать только Bluetooth. В этой версии приложения будет использоваться Bluetooth. Я использовал Sparkfun Bluetooth Mate Gold, тогда как Sparkfun Bluetooth Mate Silver использовался с примером «Blinky», упомянутым выше. Основное отличие заключается в том, что дальность действия золота составляет до 100 метров, а у серебра - 10 метров. Настройки квитирования по умолчанию также отличаются. Оба они имеют интерфейс UART уровня TTL, который можно использовать как для настройки режима работы устройства Bluetooth, так и для взаимодействия с последовательным портом Arduino.






Если вам необходимо настроить устройство Bluetooth, для настройки устройства через последовательный терминал настольного компьютера можно использовать устройство Sparkfun или Freetronics USB-Serial или Free. Вы также можете выполнить сброс устройства до заводских настроек по умолчанию, подключив вывод PIO6 (на самом деле PIO4) к высокому уровню и трижды переключив его.
Bluetooth Mate имеет те же контакты, что и Sparkfun FTDI Basic, поэтому их можно использовать взаимозаменяемо. вы не можете напрямую подключить Bluetooth Mate к плате FTDI Basic (вам придется поменять местами TX и RX). Эту конфигурацию можно использовать с настольным последовательным терминалом, с USB-устройством FTDI, подключенным к рабочему столу, для настройки устройства Bluetooth (или для использования устройства Bluetooth для последовательной связи с рабочего стола.
Настройки последовательного порта TTL UART по умолчанию:
- · Скорость передачи 115 200
- · 8 бит
- · Без паритета
- · 1 стоповый бит.
- · Аппаратное управление потоком включен (на Mate Silver это Нет)
- · Профиль последовательного порта (SPP): FireFly-WXYZ
где WXYZ - это последние 4 цифры MAC-адреса BT устройства. - · Пароль 1234
Обратите внимание, что на устройстве может храниться до 8 сопряжений устройств.
Документация к устройству Bluetooth находится по адресу:
http://www.sparkfun.com/datasheets/Wireless/Bluetooth/rn-bluetooth-um.pdf
Конфигурация Firmata предназначена для скорости передачи 57600, которую необходимо изменить, или для этого настроено устройство Bluetooth. В этом упражнении мы изменим конфигурацию Firmata, что является более простым подходом. Аппаратный поток управления также может быть обработан путем настройки устройства Bluetooth, но для этого упражнения выполняется путем подключения RTS к CTS.
Поскольку устройство Bluetooth можно установить на макетной плате и подключить оттуда к устройству Arduino, я решил установить для него разъем на Prototyping Shield.
6-контактный разъем Arduino Shield был припаян к устройству Bluetooth на контактах TTL UART разъемом наружу. Штифты были загнуты на 900 вниз, чтобы устройство можно было вертикально вставить в другой коллектор экрана. Затем разъем BT можно использовать для прямого подключения к аналогичному установленному модулю FTDI Basic, если требуется конфигурация. Позже к PIO6 (PIO4) на модуле Bluetooth был припаян провод для восстановления заводских настроек.
Рис. 3. Модуль Bluetooth с заголовком экрана на выводах UART и заголовками экрана
Заголовок щита 8 был установлен в середине щита прототипа внизу. Также добавьте заголовки на внешней стороне щита, чтобы он мог подключаться напрямую к Uno.
Рис. 4. Экран прототипа Arduino для установки модуля Bluetooth
Затем модуль Bluetooth вставляется лицом к контактам GPIO по направлению к контактам 0 и 1 (Rx / Tx), оставляя желтое место свободным. Один из них можно использовать в качестве временного места для провода сброса к заводским настройкам.
Рис. 6. Установленный модуль Bluetooth на устройстве Arduino
[2] Настроить фирму
Вы можете пропустить этот раздел, если вы уже выполнили действие с Win 8.1.
Примечание. Контакты 0 и 1 UART Arduino Uno недоступны, когда он программируется через USB из Arduino IDE. Эти же контакты подключаются к интерфейсу TTL UART модуля Bluetooth, когда он используется для связи Firmata. Следовательно, когда устройство Arduino должно быть запрограммировано в этом разделе, устройство Bluetooth не должно подключаться.
2.1 Предполагая, что вы ранее разработали для устройства Arduino (Uno), создайте новый щит Standard Firmata:
2.2 Необходимо сделать одно изменение - скорость передачи данных. В среде IDE выполните поиск 57600. Замените его 115200. Сохраните скетч, я назвал его Firmata_115200. Запрограммируйте Uno, и эта часть готова.
[3] Настройте программный стек Universal App Firmata
Этот раздел лишь немного отличается от того, что уже выполнялось в Win 8.1.
Программный стек состоит из трех уровней:
API удаленного подключения реализует свойства (конфигурацию), методы и события на концептуально высоком уровне для взаимодействия с оборудованием Arduino. Например, GPIO (например, Get and Set Pin, On Pin изменены и т. Д.). Он взаимодействует с уровнем Firmata, используя протокол Firmata. Firmata обменивается данными по стеку через последовательный протокол, который реализован как транспортные уровни Bluetooth и USB-Serial на последовательном уровне. Опция USB недоступна в Windows 8.1.
Этот программный стек доступен для двух источников:
- https://github.com/ms-iot/windows-remote-arduino-samples
- https://github.com/ms-iot/remote-wiring/
Оба содержат версии Windows 8.1 и Windows 10. Хотя обе версии Windows 10 будут собираться, я обнаружил, что Windows 8.1 второй не будет. Я использовал версию Visual Studio 2015 RC:
- Microsoft Visual Studio Community 2015 RC
- Версия 14.0.22823.1 D14REL
- Microsoft .NET Framework
- Версия 4.6.00076
3.1 Скачайте первую версию. Чтобы сделать это правильно, вам необходимо клонировать репозиторий (не загружайте zip-архив):
- Установите git или GitHub
- В оболочке git или GitHub Desktop Shell (это Powershell) введите следующее из подходящего каталога:
git clone --recursive https://github.com/ms-iot/windows-remote-arduino-samples.git
Структура каталогов того, что вы получаете, выглядит следующим образом:
windows-remote-arduino-samples
o удаленное подключение
Microsoft.Maker.win8_1
Microsoft.Maker.win10
источник
o win8_1
o win10
Последние две папки (win8_1 и win10) - это просто примеры приложений (включая «мигающий» пример), которые мы пока проигнорируем. Обе версии Maker используют одну и ту же папку источников, поэтому для Windows 10 нам нужно только:
windows-remote-arduino-samples
o удаленное подключение
Microsoft.Maker.win10
источник
в подходящую папку. Я предлагаю один в корне диска, скажем, c:\ wras10, поскольку я обнаружил, что вы можете получить некоторые ошибки при сборке ARM из-за слишком длинных имен путей. Вы также можете скопировать файлы .md для справки. Их можно открыть в VS.
3.2 Откройте файл решения в Microsoft.Maker.win10
3.3 Задайте для Win32 цель построения решения.
Сделано три сборки. По одному для каждого из трех уровней в стеке программного обеспечения.
3.4 Сделайте то же самое для конфигурации ARM. Если у вас есть машина x64, вы можете попробовать и эту сборку.
[4] Создайте приложение HW LED UWP
В этом разделе есть «короткое замыкание» для тех, кто выполнял предыдущие действия с Win 8.1.
Для этой начальной версии приложений одна программная кнопка включает аппаратный индикатор, а другая - выключает. Светодиод будет подключен к контакту 5 GPIO.
В документации «Blinky» говорится, что есть несколько способов получить и использовать эти библиотеки. В конечном итоге Nuget будет подходящим вариантом, но он пока недоступен. Вы можете ссылаться на эти встроенные версии в общем виде в своей системе разработки. Самый простой способ - просто добавить необходимое универсальное приложение в решение и сослаться на них. Мы воспользуемся этим методом.
4.1 Добавьте новое универсальное приложение C # Windows Blank в решение . (Обратите внимание, на этот раз не Windows 8.1):

Дайте ему подходящее имя. Я назвал свой wrauwp:Windows Remote Arduino Universal app UWP.
Обратите внимание, что на этот раз создан только ОДИН проект (UWP). Код XAML и CSharp одинаков для настольной и мобильной версий приложения. Разница в том, как он компилируется.
Возможности последовательного порта и Bluetooth необходимы в манифесте пакета:
4.2 Откройте package.appmanifest в текстовом редакторе (не в его графическом интерфейсе) с помощью View Code. Возможности Интернет-клиента включены внизу. Измените этот раздел на:
В packkage.appmanifest
Кроме того, если бы мы использовали USB-последовательный порт, а не Bluetooth-последовательный на рабочем столе, мы бы добавили возможность для этого.
Ссылка на каждый из соответствующих уровней программного обеспечения обязательна:
4.3 Добавьте ссылки Firmata, RemoteWiring и Serial для настольного UA (опять же, это нужно сделать только для одного проекта):

ПОДСКАЗКА: Для тех, кто уже работал с предыдущей версией Windows 8.1, теперь вы можете сократить следующее :
- Скопируйте XML-код сетки из этого проекта в MainPage.xaml в этом новом проекте.
- Теперь вы можете перейти к тестированию приложения на целевых объектах.
Для тех, кто продолжает здесь…
4.4. Измените XAML сетки UA на:
MainPage.xaml:пользовательский интерфейс
Комментарий На этот раз у нас есть только один MainPage.cs, так как есть только один проект приложения… Одна Windows.
Раньше был один для настольного компьютера и один для телефона, которые мы сделали общими, разместив одну версию в подпроекте общего доступа.
Весь код cs будет ссылаться на MainPage.cs
4.7. В классе MainPage добавьте следующие объявления вверху класса:
Объявления MainPage.cs
// Usb не поддерживается в Win8.1. Чтобы увидеть шаги подключения USB, обратитесь к решению win10.
Последовательный Bluetooth Bluetooth;
RemoteDevice arduino;
// Используемые контакты. Примечание. Фактическое количество контактов.
private const int LED_PIN =5;
4.8 в конструкторе MainPage после InitializeComponent () добавить:
В MainPage () конструктор
bluetooth =new BluetoothSerial ("FireFly-748B");
arduino =новое удаленное устройство (bluetooth);
bluetooth.ConnectionEstablished + =OnConnectionEstablished;
Замените FireFly-748B своим SPP.
4.9. Реализуйте OnConnectionEstablished, добавив в класс следующий метод:
Добавить OnConnectionEstablished ()
private void OnConnectionEstablished ()
{
// включаем кнопки в потоке пользовательского интерфейса!
var action =Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, новый Windows.UI.Core.DispatchedHandler (() => {
this.OnButton.IsEnabled =true;
это. OffButton.IsEnabled =true;
arduino.pinMode (LED_PIN, PinMode.OUTPUT);
}));
}
4.10 И, наконец, добавьте в класс обработчики событий для кнопок:
Добавить обработчики событий кнопок
private void OnButton_Click (отправитель объекта, RoutedEventArgs e)
{
// включаем светодиод, подключенный к выводу 5
arduino.digitalWrite (5, PinState.HIGH);
}
private void OffButton_Click (отправитель объекта, RoutedEventArgs e)
{
// выключаем светодиод, подключенный к выводу 5
arduino.digitalWrite (5, PinState.LOW);
}
4.11 Тестовая сборка приложения UWP в конфигурациях x86, x64 и ARM
[5] Развертывание и тестирование универсальных приложений.
В этом разделе мы подключим аппаратный светодиод к устройству Arduino и запустим приложение на рабочем столе и на телефоне с Windows 10 *
Протестируйте на своем компьютере
5.1 Установите настольное приложение в качестве запускаемого проекта
5.2 Установите в качестве цели x86 и локальную машину. Восстановите настольное приложение UWP

5.3 Подключите вывод 5 Arduino к аппаратному светодиоду. Подключите GND, VCC и подходящий резистор последовательно.
Как упоминалось в предыдущем блоге относительно Windows 10 IoT Raspberry PI 2 GPIO Я использую плату для разработки для реализации моего тестирования ввода-вывода, такого как светодиоды, переключатели и т. д. Если у вас нет аналогичной платы, вы можете использовать «Мигающая» конфигурация оборудования но вам нужно будет изменить полярность установки контактов в обработчиках кнопок.
5.4 Включите устройство Arduino и подключите модуль Bluetooth к рабочему столу (пароль =1234). .. Предполагаю, вы знаете, как это сделать.
5.5. Запустите приложение.
5.6. Вероятно, вас спросят, нормально ли приложение подключается к устройству Bluetooth. ОК
5.7 Проверьте работоспособность приложения. Установите точку останова в обработчике кнопок и убедитесь, что вы можете отлаживать.
5.8 Повторите 4.1–4.6 для x64, если у вас 64-разрядный рабочий стол.
5.9 Отключите Bluetooth на рабочем столе
Теперь протестируем ваш Windows 10 Phone, если телефон настроен для разработки.
5.10 Включите телефон, перейдите в «Настройки» / «Bluetooth» и включите его. Выполните сопряжение с модулем Bluetooth (пароль =1234).
5.11 Продолжение использования универсального приложения Windows в качестве начального проекта.
5.12 Установите цель на ARM ,, устройство и перестройте
5.11 Подключите телефон к рабочему столу через последовательный порт USB и разверните приложение.
Теперь протестируем Raspberry PI 2
ЭТО РАБОТА В ПРОЦЕССЕ. СМ. ПРИМЕЧАНИЕ В КОНЦЕ ЭТОГО РАЗДЕЛА
5.13 Удаленный отладчик уже установлен и активен на RPI2, настроенном для Win 10 IoT.
5.14 Определите IP-адрес RPI2, например, с помощью Windows IoT Core Watcher

5.15 В «Свойства проекта» - «Отладка» установите для цели «Удаленный компьютер», «Без аутентификации» и введите IP-адрес

5.16 Перестройка приложения UWP
5.17 Разверните и протестируйте приложение на RPI2.
У меня еще нет версии RPI2 для подключения через Bluetooth:
- Bluetooth в основном еще не поддерживается
- Пожалуйста, оставляйте комментарии, если у вас есть какие-либо идеи или успехи в этом.
- Я буду обновлять здесь, когда добьюсь прогресса

[6] "Красивый" интерфейс
Следующее будет украшать пользовательский интерфейс и добавлять кнопки Bluetooth Connect и Disconnect.
6.1 Измените код XAML UI GRID на ( PS:обратите внимание на изменение предыдущих строк сетки кнопок ):
Добавьте две кнопки & amp; amp;
Пользовательский интерфейс имеет более крупные кнопки и более красочный, что повышает удобство использования. Я пришел к этому после тестирования пользователем с моей 4-летней внучкой!
ProgressRing отображается и распространяется, пока приложение подключается.
6.2 Вставить внизу OnConnectionEstablished ():
В OnConnectionEstablished ()
// BT подключен, поэтому отключите индикатор выполнения
this.progress1.IsActive =false;
this.progress1.Visibility =Visibility.Collapsed;
6.3 Добавьте следующие обработчики для кнопок Подключить и Отключить:
Добавить обработчики событий новой кнопки
private void ConnectButton_Click (отправитель объекта, RoutedEventArgs e)
{
// эти параметры не имеют значения для bluetooth- Arduino Firmata, кроме SerialConfig.SERIAL_8N1
bluetooth.begin (115200, SerialConfig.SERIAL_8N1);
this.ConnectButton.IsEnabled =false;
// Подключаем BT, чтобы показать индикатор выполнения
this.progress1.IsActive =true;
this.progress1.Visibility =Visibility.Visible;
}
private void DisconnectButton_Click (отправитель объекта, RoutedEventArgs e)
{
bluetooth.end ();
this.OnButton.IsEnabled =false;
this.OffButton.IsEnabled =false;
this.ConnectButton.IsEnabled =true;
this.DisconnectButton.IsEnabled =false;
}
6.4 Закомментируйте или удалите следующую строку из MainPageConstructor, поскольку она теперь находится в обработчике кнопки Connect:
bluetooth.begin (115200, SerialConfig.SERIAL_8N1);
6.5 Добавьте следующее управление состоянием в обработчик OnButton
В OnButton_Cllick ()
this.OffButton.IsEnabled =true;
this.OnButton.IsEnabled =false;
6.6 И следующее в обработчик OffButton:
В OffButton_Click
this.OffButton.IsEnabled =false;
this.OnButton.IsEnabled =true;
6.7 Разверните и протестируйте приложение на всех трех (4) целевых объектах, как описано в разделе 5
[7] Добавить кнопку ввода
В этом расширении универсальных приложений Windows 8.1 упрощается ввод кнопки GPIO на выводе 5 Arduino, и его состояние отображается в пользовательском интерфейсе. Первоначально вход будет восприниматься путем периодического считывания значения.
Функциональность будет улучшена за счет реализации обработчика события DigitalPinChanged
7.1 Измените элемент управления Grid в коде XAML пользовательского интерфейса для обоих UA следующим образом:
Добавить текстовое поле в пользовательский интерфейс
7.2 В классе MainPage укажите входной контакт:
- В объявлениях вверху класса добавьте входной контакт:
В объявлениях MainPage
private const int PB_PIN =6;
- В обработчике OnConnectionEstablished установите для него значение input ::
В OnConnectionEstablished
arduino.pinMode (PB_PIN, PinMode.INPUT);
7.3. Добавьте таймер для опроса ввода следующим образом:
- В объявлениях вверху класса:
В объявлениях MainPage
// В режиме опроса тики таймера выбирают входные данные
частный DispatcherTimer pbPolltimer;
- В конструкторе установите таймер:
В MainPage ()
this.pbPolltimer =new DispatcherTimer ();
this.pbPolltimer.Interval =TimeSpan.FromMilliseconds (250);
this.pbPolltimer.Tick + =PBTimer_Tick;
this.pbPolltimer.Stop ();
- Добавить свой обработчик событий тика таймера
Добавить обработчик тиков таймера опроса
PinState pbPinValue =PinState.LOW;
private void PBTimer_Tick (объект-отправитель, объект e)
{
PinState pbPinValueTemp =arduino.digitalRead (6);
Pushbutton_Pressed (pbPinValueTemp);
}
- Реализовать PushButton_Pressed ():
Добавить PushButton_Pressed ()
private void Pushbutton_Pressed (PinState pbPinValueTemp)
{
if (pbPinValue! =pbPinValueTemp)
{
// Записываем значение, если изменено
TxtPin6.Text ="Pushbutton:" + pbPinValueTemp.ToString ();
pbPinValue =pbPinValueTemp;
}
}
7.4 Нам нужен кнопочный переключатель. К счастью, моя плата для разработки предоставляет их, поэтому я просто использую их. Если у вас нет такого зверя, то реализуйте схему наоборот.
В этом расширении универсальных приложений Windows 8.1 упрощается ввод кнопки GPIO на выводе 5 Arduino, и его состояние отображается в пользовательском интерфейсе. Первоначально вход будет восприниматься путем периодического считывания значения. Сообщается о Win 10 IoT Raspberry PI 2 (RPI2) что есть некоторые ошибки с частотой регистрации цифровых входов, которые будут исправлены в RTM для Win 10 IoT.
Затем функциональность будет улучшена за счет реализации обработчика события DigitalPinChanged
Аппаратное устранение вибраций в этой ситуации можно улучшить:
- Поместите небольшой конденсатор на коммутатор, чтобы добавить аппаратный дребезг в качестве задержки RC.
- Также добавьте в эту схему триггер Шмидта.
В RPI2 есть возможность добавить противодействие через конфигурацию программного обеспечения.
В RPI2 есть возможность добавить противодействие через конфигурацию программного обеспечения.
7.5 Создайте, разверните и протестируйте приложение на целевых объектах, как и раньше
Давайте добавим программно смоделированный светодиодный индикатор в пользовательский интерфейс для отображения состояния переключателя.
7.6 Добавьте следующее к пользовательскому интерфейсу в XAMLcode сетки в обоих универсальных приложениях:
- Добавить еще одно определение строки (внизу) ::
- Добавьте в эту строку следующий элемент управления эллипсом:
Добавьте эллипс в пользовательский интерфейс
7.7 Добавьте два определения цветных кистей к объявлениям класса MainPage вверху:
Добавьте цвета в объявления
// Цвета эллипса, когда аппаратная кнопка нажата / не нажата
private SolidColorBrush redBrush =new SolidColorBrush (Windows.UI.Colors.Red);
private SolidColorBrush grayBrush =new SolidColorBrush (Windows.UI.Colors.LightGray);
7.8 Реализуйте манипуляции светодиода с этими цветами следующим образом:
- В конструкторе класса установите его начальный цвет:
В конструкторе
// Начинаем с выключенного цвета для эллипса
this.PBStatusLED.Fill =grayBrush;
- В PushButtonPressed () установите его цвет в зависимости от состояния кнопки:
Добавить в Pushbutton_Pressed ()
переключатель (pbPinValue)
{
case PinState.HIGH:
this.PBStatusLED.Fill =redBrush;
break;
case PinState.LOW:
this.PBStatusLED.Fill =grayBrush;
break;
}
7.9 Создавайте, развертывайте и тестируйте приложения на целевых объектах ..Wala!
Теперь, чтобы улучшить этот код с помощью цифрового события.
7.10 Закомментируйте весь код, связанный с таймером, но оставьте функцию PushButtonPressed (); отсюда и причина отдельного обработчика событий таймера.
7.11 Add the event delegate specification to the OnConnectionEstablished() event handler within the action
Add to OnConnectionEstablished
arduino.AnalogPinUpdatedEvent +=Arduino_AnalogPinUpdated;
We could try to implement the event handler as follows:
Invalid DigitalPinUpdated
private async void Arduino_DigitalPinUpdated(byte pin, PinState pinValue)
{
if (pin ==PB_PIN)
{
Pushbutton_Pressed(pinValue);
}
}
But this fail as the event runs in a thread separate to the main UI thread. This is the same issue as in .NET Windows Forms if (InvokeRequired) scenario.
7.12 Implement the event handler as follows
Add DigitalPinUpdated
private async void Arduino_DigitalPinUpdated(byte pin, PinState pinValue)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
if (pin ==PB_PIN)
{
Pushbutton_Pressed(pinValue);
}
});
}
7.13 Build, deploy and test the apps on the targets. Wala
[8] Add an Analog Input
This extension to the app functionality adds a progress bar to the UA UI to display the level of a potentiometer in the hardware.
The analog input is via A0, pin 14.
Again my development board provides a potentiometer for this purpose but if you don’t have such you need to implement this circuit:
The analog input pins are pins 14 (A0) to pin 19 (A5).
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
The comment above is quite pertinent. The event handler signature provides the analog pin index (0 to 5) not the pin number.
Analog values range from 0 to 1024. (10 bit)
// Note:Need actual pin number, not analog index:
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
8.0 Re-enable the Poll timer and disable the Pushbutton event in the MainPage class
8.1 In the grid control in the UI XAML code add another row to the grid as previous and add a ProgressBar:
Add a ProgressBar to the UI
8.2 Add the Analog pin code as follows.
- Declare the pin at the top of MainPage class:
Add the Analog Pin
private const int ANALOG_PIN =14;
- Set its mode to analog in OnConnectionEstablished() as above
- Add the following to the timer tick event:
Add to Timer Tick Handler
//Note:Analog Read Pin number is the analog index
int PinValue =arduino.analogRead(ANALOG_PIN-14);
this.analogBar.Value =PinValue;
8.3 Build, deploy and test the app on the targets. Vary the potentiometer position and observe the ProgressBar changes.
Now for the event driven version
8.4 Again comment out the Poll Timer code.
8.5 Add the analog event handler delegate specification to OnConnectionEstablished():
Set Analog Pin Mode
// Note:Need actual pin number, not analog ibndex:
arduino.pinMode(ANALOG_PIN, PinMode.ANALOG);
8.6 Add the Arduino_DigitalPinUpdated event handler method:
Add AnalogPinUpdated
private async void Arduino_AnalogPinUpdated(byte pin, ushort PinValue)
{
//Note:Pin number is the analog index
if (pin ==ANALOG_PIN -14)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
this.analogBar.Value =PinValue;
});
}
}
Note that the UI update has again to be done asynchronously.
8.7 Build, deploy and test the app on the targets.
[9] Add a PWM output
It is left to reader to implement analog output as PWM, to drive a LED (dimmed via a slider).
- PWM pins:
3, 5, 6, 9, 10, and 11> - To set a pin as PWM:
arduino.pinMode(PWM_PIN,PinMode.PWM)> - To set a PWM level
arduino.analogWrite(byte, ushort)> - analogWrite values are from 0 to 255 (the ushort parameter)
I might provide a solution to this at a later stage.
[1] I actually used a retired earlier version of the Bluetooth module, but functionality seems to be the same.
Код
- WindowsRemoteArduino_Win10.zip
WindowsRemoteArduino_Win10.zipC#
An extended version of "Blinky"Input, Output, Analog Input
Fancier UI
No preview (download only).
Схема

Производственный процесс
- Универсальный пульт дистанционного управления Raspberry Pi
- Windows IoT:дверь распознавания лиц
- Windows 10 IoT Core и SHT15
- Windows 10 IoT Core для Raspberry Pi 3, модель B +
- GoPiGo v2 с Windows IoT
- Приложения и устройства, поддерживающие удаленные команды цепочки поставок
- Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android
- ЖК-анимация и игры
- Руководство по печатным платам и IoT
- Cisco представляет решения удаленного мониторинга IoT для ИТ и ОТ