Как создать приложение для Windows 10 Arduino (для начинающих)

Microsoft делает ставку на Windows 10, наконец осуществив мечту о приложениях, работающих на кроссплатформенных платформах. В сочетании с официальной поддержкой Arduino в вашем распоряжении новый мощный инструмент: возможность легко создавать универсальные приложения Windows, которые имеют аппаратное соединение с реальным миром.

Вот как начать, даже если вы никогда ранее не программировали приложение для Windows.

Прежде чем читать дальше, ознакомьтесь с демонстрацией того, что мы собираемся сделать.

Должен отметить, что я не использовал Visual Studio и даже не трогал C # около 10 лет назад. Я подхожу к этому с точки зрения новой установки Visual Studio и забыл все, что знаю.

Если вы уже достаточно опытны в программировании приложений для Windows или даже ищете простой способ начать программирование в Windows без этого Arduino, попробуйте руководство Райана по созданию простого приложения на Visual Basic.

, Абсолютные начинающие программисты могут захотеть проверить мое программирование 101

(и часть 2

) статья первая.

Вы должны быть знакомы с некоторыми начинающими проектами Arduino

(и, возможно, даже прочитать наше руководство по Arduino

), но, вероятно, вы впервые попытаетесь создать настоящий программный продукт для взаимодействия с ним.

Загрузки

Первое: вам нужно присоединиться к программе Windows Insider, чтобы получить последнюю предварительную версию Visual Studio 2015, и последняя сборка Windows 10 Preview. Сделай это сейчас — это бесплатно. Windows 10 является предварительной версией разработчика и не должна устанавливаться в качестве основной операционной системы. Это чертовски глючит.

  • Присоединитесь к программе Windows Insider и загрузите Windows 10 Technical Preview.
  • Получите предварительную версию Visual Studio 2015 Community Edition [больше не доступно].

Visual Studio — это собственная среда разработки Microsoft, которую мы будем использовать для создания приложения на C # для Windows.

Почему C #? С сильным сходством с Java, это относительно простой язык программирования для начинающих, чтобы запустить и запустить работающее приложение, но при этом он достаточно мощный, чтобы можно было создавать потрясающие приложения (даже игры: C # — язык сценариев Unity на выбор — проверьте нашу бесплатную электронную книгу, руководство для начинающих по программированию игры с Unity

).

Если вы еще этого не сделали, загрузите IDE Arduino с официального сайта Arduino.cc и установите стандартные фирмы на доску. Вы найдете это под Примеры -> Firmata -> Стандарт Фирмата. Это просто превращает его в «тупое» последовательное устройство, которое будет делать то, что говорит наше приложение — на самой плате не будет логики приложения, только интерфейс между нашим приложением и любыми датчиками или устройствами вывода, подключенными к Arduino. ,

Что касается проводки, вы можете либо прикрепить светодиод непосредственно к контакту 13 и GND, как показано ниже, либо использовать встроенный светодиод. Вам также понадобится переменный резистор (я использовал линейный потенциометр 10 кОм), идущий в A0 (с соответствующими ножками на GND и + 5 В, очевидно).

Arduino-Windows 10-демо

Наконец, загрузите пакет Remote Wiring с GitHub [Больше не доступно]. Это слой, который мы должны добавить, чтобы наше приложение Windows могло общаться с Arduino.

Создать приложение

Идите вперед и откройте Visual Studio. Если вы запускаете его впервые, вам будет предложено войти в систему. Если хотите, игнорируйте его. выберите Visual C # как вариант развития и продолжения; В любом случае, подготовка Visual Studio к первому использованию занимает несколько минут.

Создать новый проект, используя шаблон Visual C # -> Пустое приложение (Windows Universal). Я назвал мой «Тест Arduino», но это не имеет значения.

новое универсальное приложение c sharp для Windows

В этот момент я столкнулся с ошибкой, связанной с необходимостью переключения Windows 10 в режим разработчика, если я действительно хотел запустить приложение. Сделайте это, хотя, если вы обнаружите, что ваша сборка Windows 10 не работает с этим параметром, это известная ошибка, и вам нужно использовать редактор групповой политики, чтобы включить режим разработчика.

Затем щелкните правой кнопкой мыши в любом месте обозревателя решений (это справа) и выберите добавлять -> Существующий проект.

Solution Explorer добавить проекты

Перейдите туда, куда вы загрузили файлы Remote Wiring с Github — если он был разархивирован, это должна быть папка с именем дистанционное подключение-разработки. Внутри вы найдете Microsoft.Maker.win10; и внутри этого вы найдете еще 3 папки. В свою очередь, добавьте каждую из них, перейдя в эти три папки и найдя файл проекта.

Если вы получаете сообщение об ошибке «Файл XAML 8.2 не найден», значит, у вас неправильная версия Visual Studio или еще не установлены инструменты разработчика. Вернитесь к началу этой статьи и убедитесь, что вы загрузили и установили оба связанных файла Visual Studio.

Эти 3 проекта, которые вы только что добавили, представляют собой просто разные слои интерфейса Arduino. В обозревателе решений, если щелкнуть правой кнопкой мыши и выбрать зависимости -> Зависимости сборки, Вы можете увидеть, какие слои зависят от каких (последовательный не зависит ни от чего; Firmata зависит от серийного номера; RemoteWiring зависит от обоих). Единственное изменение, которое вам нужно сделать, — это выбрать свой проект из выпадающего списка и установить флажки в каждом поле, чтобы указать, что ваш проект зависит от всех этих других проектов.

проверить зависимости

Последний шаг: снова в обозревателе решений щелкните правой кнопкой мыши Рекомендации пункт под вашим проектом, и выберите Добавить ссылку. Слева, перейдите к Windows Universal, затем поставьте галочку напротив Microsoft Visual C ++ AppLocal Runtime Package. Еще не закрывайте диалог.

ссылки на проект

Далее перейдите к проектов (также в том же диалоговом окне, из списка слева) и установите флажок рядом с каждым из трех Microsoft.Maker проекты.

ссылки производителя

Это было сложнее, чем должно быть, но вам нужно сделать это только один раз; теперь мы можем повеселиться с программированием — обещаю, что это не так страшно.

программирование

Если после этого у вас возникнут проблемы, полный код доступен на Pastebin. Тем не менее, я настоятельно рекомендую прочитать примечания ниже, чтобы объяснить, что на самом деле делает код.

Во-первых, нам нужно добавить немного кода, который говорит, что нам нужен USB-порт для связи с Arduino. Найти Package.appxmanifest файл из обозревателя решений, и дважды щелкните, чтобы отредактировать его. Нам нужно вставить сюда некоторый код — технически мы будем «вставлять дочерний узел», потому что это XML-файл, но просто заменим весь раздел приведенным ниже кодом, чтобы он выглядел так:

возможности

Точный код будет отличаться, если вы используете Bluetooth, или если вы нацеливаетесь на Win8.1 вместо 10, но следующее для Windows 10, USB-соединение.


Перейти к строить меню -> Восстановить решение, и убедитесь, что вы не получите никаких ошибок.

Из обозревателя решений разверните MainPage.xaml узел. Двойной щелчок по нему загрузит конструктор форм, к которому мы вернемся позже, но пока откроем MainPage.xaml.cs, которая содержит основную логику нашего приложения.

Добавьте две строки в первый раздел, чтобы указать, что мы будем «использовать» биты Arduino.

using Microsoft.Maker.serial;
using Microsoft.Maker.RemoteWiring;

Я также добавил строку, чтобы сказать, что мы будем использовать System.Diagnostics; что позволяет нам использовать Debug.WriteLine () функция для вывода отладочных сообщений в IDE.

Прежде всего, давайте определим несколько переменных, которые мы будем использовать повсюду. Добавьте эти строки непосредственно перед public MainPage () объявление функции.

UsbSerial connection;
RemoteDevice arduino;
UInt16 lastvalue;

Затем перейдите к функции MainPage () — она ​​называется конструктором, и это функция, которая вызывается сразу при создании нашего приложения, поэтому мы используем ее для настройки всего.

Сначала добавьте строку для установки последовательного USB-подключения к определенному USB-устройству (Arduino).

connection =new UsbSerial("VID_2341", "PID_0043");

Обратите внимание, что идентификаторы USB стандартного Arduino Uno уже закодированы в блоке, но вы можете проверить это из Диспетчер устройств -> Порты (COM и LPT) -> Arduino Uno -> подробности вкладка -> Аппаратные идентификаторы.

проверьте USB HID PID

Затем добавьте следующие строки сразу после этого.

arduino = new RemoteDevice(connection);
connection.ConnectionEstablished += OnConnectionEstablished;
connection.begin(57600, SerialConfig.SERIAL_8N1);

Несколько вещей происходят здесь. Во-первых, мы создаем объект RemoteDevice — помните, что это слой, который дает нам кучу команд Arduino, — и присваиваем ему имя переменной «arduino». Следующая строка присоединяется к событию ConnectionEstablished, чтобы сказать: «После того, как USB-соединение успешно установлено, пожалуйста, запустите функцию OnConnectionEstablish ()».

Финал только что сообщает, что соединение уже началось со скоростью 57600 бод, используя 8-битную комбинацию.

Вам также необходимо создать эту функцию OnConnectionEstablished (), поэтому выйдите за пределы функции MainPage () и просто создайте пустую функцию следующим образом.

private void OnConnectionEstablished()
{
// LOGIC HERE
}

Вернитесь к дизайнеру форм, о котором я упоминал ранее (если вы забыли, как: дважды щелкните MainPage.xaml из обозревателя решений). Создайте две кнопки. Для этого откройте вкладку «Панель инструментов», которую вы найдете закрепленной вертикально в левой части экрана. Перетащите две кнопки на страницу, затем пометьте одну Вкл и одну Выкл.

кнопки добавления дизайнера форм

Выберите первую кнопку, затем в поле «Свойства» в правом нижнем углу назовите ее «OnButton». Нажмите на маленький значок молнии — это список событий и действий, который используется для указания того, что происходит при взаимодействии с элементами формы. Введите «OnButtonClick» в Нажмите поле.

Когда вы нажимаете ввод, он автоматически создает код для этого конкретного события кнопки и загружает стандартное представление кода. Вернитесь к конструктору форм и сделайте то же самое для кнопки «Выкл.», Но на этот раз назовите ее «OffButton» и «OffButtonClick». Пока вы там, идите вперед и назовите форму главного окна за ней как «Страница» — мы будем использовать это позже. Теперь у вас должно быть что-то похожее на скриншот ниже:

дизайнер создает события

Снова переключитесь обратно на дизайнер, и снова для каждой кнопки установите включен собственность на Ложь. Вы можете сделать это, введя свойство непосредственно в представление кода XAML, или вы можете найти этот флажок в поле «Свойства» (щелкните гаечный ключ, если вы все еще находитесь в представлении действий) — оно находится под развернутым общий категория недвижимости.

Это не существенно, но рекомендуется отключать кнопки, пока мы не убедимся, что Arduino подключен и подключен.

Чтобы снова включить их, добавьте следующее в функцию OnConnectionEstablished (). Пока не беспокойтесь о точном значении кода, это просто способ обработки обновлений форм в современных приложениях Windows для обеспечения хорошей производительности. Как только мы подключились к Arduino, мы установили для свойства IsEnabled кнопок значение true.

private void OnConnectionEstablished()
{
// enable the on off buttons
var action = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => {
OnButton.IsEnabled = true;
OffButton.IsEnabled = true;
}));
arduino.pinMode(14, PinMode.ANALOG);
arduino.AnalogPinUpdatedEvent += MyAnalogPinUpdateCallback;
Debug.WriteLine(arduino.analogRead(14));
}

Вы также увидите более привычный оператор pinMode (), который говорит о том, что у нас есть аналоговый вход на контакте 14 (есть 13 цифровых контактов, поэтому A0 начинает считать с 14). Затем мы получили другое объявление события — когда значение аналогового вывода обновится, вызовем функцию MyAnalogPinUpdateCallback.

Наконец, нам нужно отредактировать события нажатия кнопки и решить, что произойдет, когда изменится аналоговый вход. Давайте начнем с кнопок. Мы можем взаимодействовать с Arduino, используя имена функций, подобные обычному коду Arduino, следующим образом:

arduino.digitalWrite(13, PinState.HIGH);

Вставьте это для события onButton, и это для offButton:

arduino.digitalWrite(13, PinState.LOW);

Просто. Аналоговый вход от Arduino немного сложнее, но вот что я придумал.

public void MyAnalogPinUpdateCallback(byte pin, UInt16 value)
{
if(value-lastvalue >5 || lastvalue-value > 5){
Debug.WriteLine("Pin A" + pin + " is now " + value);
var action = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() => {
byte num = Convert.ToByte(value / 4);
Page.Background = new SolidColorBrush(Windows.UI.Color.FromArgb(255, num, num, Convert.ToByte(255 -num)));
}));
}
lastvalue = value;
}

Обратите внимание, что я сохраняю предыдущее значение, полученное нами от вывода, в переменной с именем lastValue; это позволяет нам проверить, насколько сильно изменяется значение, и реагировать, только если разница значительна (своего рода сглаживание сигнала). Если он изменяется в любом направлении более чем на 5 (0-1024 — полный диапазон значений), то мы реагируем, изменяя значение цвета фона RGB элемента Page.

Поскольку у нас есть только один номер, с которым я работал, и я спешил, я немного выдумал здесь три цифры, необходимые для того, чтобы сделать R, G и B. Вы, вероятно, можете придумать что-то более красивое.

Законченный

Arduino Windows 10 завершена

Вот и все — запустите код, и вы должны увидеть что-то похожее на скриншот выше. Кнопки включают и выключают светодиод, а переменный резистор меняет фон. Если у вас возникли проблемы, не забудьте полный код здесь.

Теперь, когда вы можете написать свои собственные приложения для Windows 10, которые взаимодействуют с Arduino, что вы будете делать? Возможно, контроллер домашней автоматизации

? Дай мне знать в комментариях.

Ссылка на основную публикацию
Adblock
detector