Arduino
C#
VisualStudio
IoT
Windows10

Windows Remote Arduinoを試す

More than 1 year has passed since last update.

マイクロソフトが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