IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
Компоненты и материалы
| Название | Количество |
|---|---|
| Arduino UNO | 1 |
| Bluetooth-модем SparkFun BlueSMiRF Silver (использовал Gold версию — до 100 м) | 1 |
О проекте
UWP-приложение Windows 10 на базе библиотеки Remote-Wiring взаимодействует с Arduino, прошитым Firmata. Приложение аналогично примеру «Blinky», но с расширениями: GPIO (ввод/вывод), аналоговый ввод/вывод. Функционально соответствует версии для Windows 8.1, но написано для UWP. Цели: Windows 10 Desktop, Phone, Raspberry Pi 2 (Win 10 IoT) — последнее в процессе.
Подробности в блоге: embedded101.com. Пример «Blinky»: ms-iot.github.io.
Универсальные приложения и UWP
В Windows 8.1 Universal Apps требовали отдельные XAML для каждой платформы. В Windows 10 UWP — один код (включая XAML) для всех целей, просто перекомпиляция. UWP предоставляет гарантированный базовый API. Расширения SDK (Desktop, Mobile, IoT) добавляют платформо-специфичные функции (GPIO, I2C, SPI и т.д.). Для этого проекта расширения не нужны.
[1] Настройка Bluetooth-связи с Arduino
Для Firmata можно использовать USB или Bluetooth. В Win 10 доступны оба, в Win 8.1 — только Bluetooth. Использую Bluetooth Mate Gold (диапазон 100 м, против 10 м у Silver). Настройки UART по умолчанию: 115200 бод, 8N1, аппаратное управление потоком (RTS/CTS), SPP: FireFly-WXYZ (последние 4 цифры MAC), пароль 1234. Устройство хранит до 8 пар.






Для настройки модуля можно использовать USB-UART переходник (SparkFun FTDI Basic) и терминал. Заводской сброс: подключить PIO4 (PIO6) к высокому уровню и переключить 3 раза.
Bluetooth Mate имеет такой же пин-аут, как FTDI Basic. Нельзя вставлять напрямую в FTDI — нужно перекрестить TX/RX. Модуль установлен на прототипирующий шилд с заголовками, вставляется к пинам 0/1 (Rx/Tx) Arduino. Провод для сброса припаян к PIO4.
[2] Настройка Firmata
Важно: Пины 0 и 1 Arduino заняты Bluetooth-модулем. При прошивке через USB модуль должен быть отключен.
- Открыть StandardFirmata в Arduino IDE.
- Найти 57600 бод, заменить на 115200.
- Сохранить как Firmata_115200, прошить Uno.
[3] Настройка программного стека UWP Firmata
Стек из трех слоев: Remote-Wiring API (GPIO, события) → Firmata протокол → Serial транспорт (Bluetooth/USB). Исходники: github.com/ms-iot/windows-remote-arduino-samples (клонировать с --recursive). Структура: remote-wiring/Microsoft.Maker.win10/source. Открыть решение в Microsoft.Maker.win10, собрать для Win32, ARM, x64.
[4] Создание UWP-приложения для управления светодиодом
Два кнопки: включение/выключение светодиода на GPIO 5.
- Добавить в решение новый проект: C# Blank Universal App (не Windows 8.1). Название:
wrauwp. Создается один проект UWP. - В
package.appxmanifest(View Code) добавить capabilities:<Capabilities> <Capability Name="internetClient" /> <DeviceCapability Name="bluetooth.rfcomm"> <Device Id="any"> <Function Type="name:serialPort"/> </Device> </DeviceCapability> </Capabilities> - Добавить ссылки на три слоя: Firmata, RemoteWiring, Serial.
- XAML (MainPage.xaml): две кнопки Off/On, отключенные по умолчанию.
- C# (MainPage.cs): объявления BluetoothSerial, RemoteDevice, константа LED_PIN = 5. В конструкторе:
bluetooth = new BluetoothSerial("FireFly-748B");(замените на свой SPP). Подписка наConnectionEstablished. - Обработчик подключения: включение кнопок, установка pinMode(LED_PIN, OUTPUT) в UI-потоке через Dispatcher.
- Обработчики кнопок:
arduino.digitalWrite(5, HIGH/LOW). - Собрать для x86, x64, ARM.
[5] Развертывание и тестирование
Настольный ПК
- Startup Project = UWP-приложение, Target = x86, Local Machine.
- Подключить светодиод к пину 5 (через резистор).
- Подать питание на Arduino, спарить Bluetooth-модуль с ПК (пароль 1234).
- Запустить приложение, разрешить доступ к Bluetooth, протестировать.
- Повторить для x64.
- Выключить Bluetooth на ПК.
Windows 10 Phone
- Включить Bluetooth на телефоне, спарить с модулем.
- Target = ARM, Device, пересобрать, развернуть через USB.
Raspberry Pi 2 (Work in Progress)
Remote Debugger уже установлен на RPI2. Определить IP через Windows IoT Core Watcher. В свойствах проекта Debug → Remote Machine, No authentication, ввести IP. Пересобрать, развернуть. Bluetooth на RPI2 пока не поддерживается — не удается подключиться. Жду идей в комментариях.



[6] Улучшение UI
Добавлены кнопки Connect/Disconnect, ProgressRing при подключении, цветные кнопки. XAML: 4 кнопки + ProgressRing. В OnConnectionEstablished скрываем ProgressRing. Обработчики Connect/Disconnect управляют bluetooth.begin/end и состоянием кнопок. В обработчиках On/Off переключаем доступность кнопок.
[7] Добавление входа кнопки (Pushbutton)
GPIO вход на пине 6 Arduino. Сначала опрос таймером (250 мс), потом событийой модель DigitalPinUpdated.
- XAML: добавить TextBox для состояния кнопки.
- Объявить PB_PIN = 6, в OnConnectionEstablished:
pinMode(PB_PIN, INPUT). - DispatcherTimer с интервалом 250 мс, в Tick: чтение
digitalRead(6), обновление TextBox при изменении. - Схема кнопки: подтяжка к земле, конденсатор для антидребезга, опционально триггер Шмитта.
- Добавить виртуальный LED (Ellipse) в UI: красный — нажато, серый — отпущено.
- Переход на событийую модель: отключить таймер, подписаться на
arduino.DigitalPinUpdated. Обработчик черезDispatcher.RunAsyncдля UI-потока.
[8] Добавление аналогового входа
Потенциометр на A0 (пин 14). ProgressBar в UI (Maximum=255). В OnConnectionEstablished: pinMode(ANALOG_PIN, ANALOG). В Timer Tick: analogRead(ANALOG_PIN-14) (индекс 0..5), обновление ProgressBar. Затем событийная модель: AnalogPinUpdated с асинхронным обновлением UI.
[9] Добавление PWM-выхода (для самостоятельной реализации)
- PWM пины: 3, 5, 6, 9, 10, 11.
pinMode(PWM_PIN, PWM),analogWrite(byte, ushort)(0..255).- Управление яркостью LED через Slider.
Код
WindowsRemoteArduino_Win10.zip (C#)
Расширенная версия «Blinky»: ввод, вывод, аналоговый ввод, улучшенный UI. Скачать (превью недоступно).
Схемы
Производственный процесс
- Создание профессионального универсального пульта на Raspberry Pi с LIRC
- Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
- Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
- Установка Windows 10 IoT Core на Raspberry Pi 3 Model B+: Пошаговое руководство
- Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3
- Основные приложения и устройства для удаленных команд цепочек поставок
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- Освоение проектирования печатных плат для Интернета вещей: Полное руководство
- Cisco запускает облачное IoT-мониторинг для IT и OT сред