Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

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 пар.

IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10

Для настройки модуля можно использовать 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 модуль должен быть отключен.

  1. Открыть StandardFirmata в Arduino IDE.
  2. Найти 57600 бод, заменить на 115200.
  3. Сохранить как 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.

  1. Добавить в решение новый проект: C# Blank Universal App (не Windows 8.1). Название: wrauwp. Создается один проект UWP.
  2. В package.appxmanifest (View Code) добавить capabilities:
    <Capabilities>
      <Capability Name="internetClient" />
      <DeviceCapability Name="bluetooth.rfcomm">
        <Device Id="any">
          <Function Type="name:serialPort"/>
        </Device>
      </DeviceCapability>
    </Capabilities>
    
  3. Добавить ссылки на три слоя: Firmata, RemoteWiring, Serial.
  4. XAML (MainPage.xaml): две кнопки Off/On, отключенные по умолчанию.
  5. C# (MainPage.cs): объявления BluetoothSerial, RemoteDevice, константа LED_PIN = 5. В конструкторе: bluetooth = new BluetoothSerial("FireFly-748B"); (замените на свой SPP). Подписка на ConnectionEstablished.
  6. Обработчик подключения: включение кнопок, установка pinMode(LED_PIN, OUTPUT) в UI-потоке через Dispatcher.
  7. Обработчики кнопок: arduino.digitalWrite(5, HIGH/LOW).
  8. Собрать для x86, x64, ARM.

[5] Развертывание и тестирование

Настольный ПК

  1. Startup Project = UWP-приложение, Target = x86, Local Machine.
  2. Подключить светодиод к пину 5 (через резистор).
  3. Подать питание на Arduino, спарить Bluetooth-модуль с ПК (пароль 1234).
  4. Запустить приложение, разрешить доступ к Bluetooth, протестировать.
  5. Повторить для x64.
  6. Выключить Bluetooth на ПК.

Windows 10 Phone

  1. Включить Bluetooth на телефоне, спарить с модулем.
  2. 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 пока не поддерживается — не удается подключиться. Жду идей в комментариях.

IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10
IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10

[6] Улучшение UI

Добавлены кнопки Connect/Disconnect, ProgressRing при подключении, цветные кнопки. XAML: 4 кнопки + ProgressRing. В OnConnectionEstablished скрываем ProgressRing. Обработчики Connect/Disconnect управляют bluetooth.begin/end и состоянием кнопок. В обработчиках On/Off переключаем доступность кнопок.

[7] Добавление входа кнопки (Pushbutton)

GPIO вход на пине 6 Arduino. Сначала опрос таймером (250 мс), потом событийой модель DigitalPinUpdated.

  1. XAML: добавить TextBox для состояния кнопки.
  2. Объявить PB_PIN = 6, в OnConnectionEstablished: pinMode(PB_PIN, INPUT).
  3. DispatcherTimer с интервалом 250 мс, в Tick: чтение digitalRead(6), обновление TextBox при изменении.
  4. Схема кнопки: подтяжка к земле, конденсатор для антидребезга, опционально триггер Шмитта.
  5. Добавить виртуальный LED (Ellipse) в UI: красный — нажато, серый — отпущено.
  6. Переход на событийую модель: отключить таймер, подписаться на 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-выхода (для самостоятельной реализации)

Код

WindowsRemoteArduino_Win10.zip (C#)

Расширенная версия «Blinky»: ввод, вывод, аналоговый ввод, улучшенный UI. Скачать (превью недоступно).

Схемы

IoT-интеграция: Удаленный контроль Arduino через UWP-приложения Windows 10

Производственный процесс

  1. Создание профессионального универсального пульта на Raspberry Pi с LIRC
  2. Создание безопасной двери с распознаванием лиц на Windows IoT и Raspberry Pi
  3. Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
  4. Установка Windows 10 IoT Core на Raspberry Pi 3 Model B+: Пошаговое руководство
  5. Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3
  6. Основные приложения и устройства для удаленных команд цепочек поставок
  7. Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
  8. Создание анимации и игр на LCD 16×2 с Arduino UNO
  9. Освоение проектирования печатных плат для Интернета вещей: Полное руководство
  10. Cisco запускает облачное IoT-мониторинг для IT и OT сред