Как создать приложение Arduino для Windows 10 (для абсолютных новичков)
СДЕЛАЙ САМ

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

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

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

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

Прежде чем читать дальше, посмотрите демонстрацию того, что мы собираемся сделать

https://www.youtube.com/watch?v=_uKlY72LKvc

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

Если вы уже достаточно опытны в программировании приложений для Windows или даже ищете простой способ начать программировать в Windows без этих штучек с Arduino, попробуйте руководство Райана по созданию простого приложения на Visual Basic. Абсолютные новички в программировании, возможно, захотят сначала ознакомиться с моей статьей ‘Программирование 101’ (и частью 2)

Вы должны быть знакомы с некоторыми проектами Arduino для начинающих (и, возможно, даже читали наше руководство по Arduino), но это, вероятно, будет первый раз, когда вы попробуете создать реальное программное обеспечение для взаимодействия с компьютером

Загрузки

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

  • Присоединяйтесь к программе Windows Insider и загружайте Windows 10 Technical Preview.
  • Получите предварительную версию Visual Studio 2015 Community Edition No Longer Available.
  • Visual Studio – это собственная среда разработки Microsoft, которую мы будем использовать для создания приложения C# Windows

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

    Если вы еще этого не сделали, скачайте Arduino IDE с официального сайта Arduino.cc и установите стандартную firmata на плату. Вы найдете его в разделе Examples -> Firmata -> Standard Firmata. Это просто превратит ее в ‘тупое’ последовательное устройство, которое будет делать все, что скажет ему наше приложение – на самой плате не будет никакой прикладной логики, только интерфейс между нашим приложением и любыми датчиками или устройствами вывода, подключенными к Arduino

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

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

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

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

    Создайте новый проект, используя шаблон Visual C# -> Blank App (Windows Universal). Я назвал свой проект ‘Arduino Test’, но это не имеет значения

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

    Затем щелкните правой кнопкой мыши в любом месте Solution Explorer (это такая штука справа) и выберите Add -> Existing Project

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

    Если вы получите ошибку ‘XAML 8. 2 file not found’, то у вас неправильная версия Visual Studio или не установлены инструменты разработчика. Вернитесь к началу этой статьи и убедитесь, что вы скачали и установили оба связанных файла Visual Studio

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

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

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

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

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

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

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

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

    <Capabilities>
    <Capability Name='internetClient'/>
    <DeviceCapability Name='serialcommunication'>
    <Device Id='any'>
    <Function Type='name:serialPort'>
    </Device>
    </DeviceCapability>
    </Capabilities>

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

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

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

    usingMicrosoft.Maker.serial;
    usingMicrosoft.Maker.RemoteWiring;

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

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

    UsbSerial connection;
    RemoteDevice arduino;
    UInt16 lastvalue;

    Далее перейдем к функции MainPage() – она называется конструктором, и это функция, которая вызывается сразу после создания нашего приложения, поэтому мы используем ее, чтобы все настроить

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

    connection =newUsbSerial('VID_2341''PID_0043');

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

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

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

    Здесь происходит несколько вещей. Во-первых, мы создаем объект RemoteDevice – помните, это слой, который дает нам кучу команд Arduino – и присваиваем ему имя переменной ‘arduino’. Следующая строка прикрепляется к событию ConnectionEstablished, чтобы сказать ‘как только USB-соединение будет успешно установлено, запустите функцию OnConnectionEstablish()’.

    Последняя просто сообщает, что соединение уже установлено, со скоростью передачи 57600 бод, используя битовый шаблон 8N1

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

    privatevoidOnConnectionEstablished

    // LOGIC HERE

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

    Выберите первую кнопку, затем в окне свойств в правом нижнем углу назовите ее ‘OnButton’. Щелкните на маленьком значке молнии – это список событий и действий, который используется для указания того, что происходит при взаимодействии с элементами формы. Введите ‘OnButtonClick’ в поле Click

    Когда вы нажмете Enter, автоматически будет создан код для этого события кнопки и загружен стандартный вид кода. Переключитесь пока обратно в конструктор форм и сделайте то же самое для кнопки Off, но на этот раз назовите ее ‘OffButton’ и ‘OffButtonClick’. Пока вы там, перейдите и назовите форму главного окна за ним ‘Page’ – мы будем использовать ее позже. Теперь у вас должно получиться что-то похожее на скриншот ниже:

    Снова на мгновение вернитесь в дизайнер и снова для каждой кнопки установите свойство isEnabled на False. Вы можете сделать это, введя свойство непосредственно в представлении кода XAML, или найти этот флажок в окне свойств (нажмите на гаечный ключ, если вы все еще находитесь в представлении действий) – он находится в расширенной категории свойств Common

    Это не обязательно, но это хорошая практика, чтобы отключить кнопки, пока мы не убедимся, что Arduino подключена и соединена

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

    privatevoidOnConnectionEstablished
     {
    // enable the on off buttons
    varaction = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,newWindows.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 немного сложнее, но вот что я придумал

    publicvoidMyAnalogPinUpdateCallbackbytepin, UInt16value
     {
    ifvalue-lastvalue >|| lastvalue-value>){
    Debug.WriteLine('Pin A'+ pin +' is now 'value);
    varaction = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,newWindows.UI.Core.DispatchedHandler(() => {
    bytenum = Convert.ToByte(value);
     Page.Background =newSolidColorBrush(Windows.UI.Color.FromArgb(255, num, num, Convert.ToByte(255-num)));
     }));
     }
     lastvalue =value
     }

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

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

    Готово

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

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

    Об авторе

    Алексей Белоусов

    Привет, меня зовут Филипп. Я фрилансер энтузиаст . В свободное время занимаюсь переводом статей и пишу о потребительских технологиях для широкого круга изданий , не переставая питать большую страсть ко всему мобильному =)

    Комментировать

    Оставить комментарий