LoginSignup
17
14

More than 5 years have passed since last update.

Windows Remote Arduinoを試す

Last updated at Posted at 2016-06-13

マイクロソフトがWindows Remote Arduino Libraryというものを公開していたので、試してみました。

Windows Remote Arduinoとは?

これです。

A remote "Arduino Wiring" interface to control an Arduino compatible device from a Windows 10 Universal Windows Application.

WindowsのUWPアプリから、Arduinoの信号を制御するライブラリです。
UWPアプリなので、Windows 10であれば動かすことができます。(Windows MobileやRaspberry Pi 2でも!)

ハードウェア

Arduino

デバイスとして、Arduinoが必要です。
対応しているArduinoは以下のとおり。
* Arduino Uno
* Arduino Leonardo
* Arduino Mega
* DFRobot Bluno
* DFRobot Bluno Beetle

今回は、Arduino Uno R3を使います。

20160612C.jpg

Windows 10

Windows 10のパソコン。

今回は、Surface Pro 2を使います。

20160612D.jpg

その他

ArduinoとWindows 10の通信は、USBシリアル、Bluetooth、Ethernet/WiFiを使うことができます。
必要に応じて、Arduino Shieldが必要になります。

今回は、USBシリアルで接続します。

Arduinoにスケッチを書き込む

ArduinoとUWPアプリは、"Firmata"というプロトコルで通信します。
ArduinoがFirmataプロトコルで通信できるようにするために、プログラムを書き込む必要があります。

1.Arduino IDEで、スケッチの例にある、StandardFirmataを開きます。

20160612E.png

2.マイコンボードに書き込みます。

20160612F.png

3.「マイコンボードへの書き込みが完了しました。」と表示されます。

20160612G.png

UWPアプリを作る

1.Visual Studio 2015を起動して「空白のアプリ(ユニバーサルWindows)」を作成します。

20160612H.png

2.nugetからプロジェクトへ「Windows-Remote-Arduino」をインストールします。

20160612I.png

3.UWPアプリからシリアル通信できるようにするために、Package.appxmanifestにDeviceCapabilityを追加します。

Package.appxmanifest
<?xml version="1.0" encoding="utf-8"?>

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  IgnorableNamespaces="uap mp">

  ...

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

4.MainPage.xaml.csにコードを追加します。

MainPage.xaml.cs
    public sealed partial class MainPage : Page
    {
        private Microsoft.Maker.RemoteWiring.RemoteDevice device;
        private Windows.System.Threading.ThreadPoolTimer timer;

        public MainPage()
        {
            this.InitializeComponent();

            var connection = new Microsoft.Maker.Serial.UsbSerial("VID_2A03", "PID_0043");
            device = new Microsoft.Maker.RemoteWiring.RemoteDevice(connection);
            device.DeviceReady += DeviceReady;

            connection.begin(57600, Microsoft.Maker.Serial.SerialConfig.SERIAL_8N1);
        }

        private void DeviceReady()
        {
            timer = Windows.System.Threading.ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromMilliseconds(500));
        }

        private void Timer_Tick(Windows.System.Threading.ThreadPoolTimer timer)
        {
            if (device.digitalRead(13) == Microsoft.Maker.RemoteWiring.PinState.LOW)
            {
                device.digitalWrite(13, Microsoft.Maker.RemoteWiring.PinState.HIGH);
            }
            else
            {
                device.digitalWrite(13, Microsoft.Maker.RemoteWiring.PinState.LOW);
            }
        }

    }

実行

0.5秒周期で、LEDがチカチカと点滅しました。

20160613B.jpg

20160613C.jpg 20160613D.jpg

17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14