Windows Remote Arduino を Arduino Uno/Nano で試す

ホーム – 組込みシステム開発技術展 | ESEC の開催中だし、de:code の準備で忙しいのか、誰もがスルーしたままの Windows Remote Arduino を試してみました。

image

Windows Remote Arduino が何をするものかを簡単に言うと、Arduino にサーバーを入れて、Bluetooth 経由などで Windows 8.1/10 や Windows Phone から GPIO などを操作しようという仕組みです。Arudino 側には Firmata というライブラリがあって、すでに色々な言語(Ruby とか Javascript/Node.js など)からアクセスできるようになっています。Arduino IDE では、「ファイル」→「スケッチの例」→「Firmata」→「StandardFirmata」で、コードが開けるのでビルドしてインストールができます。

部品を準備する

サイトを見れば、さっくりと動く?のかどうかはわかりませんが、まあ試行錯誤をすれば30分程で動くようにはなります。手持ちの Arduino と Bluetooth モジュールによってちょこちょことソースを書き換えないといけないのが、嵌りどころではあるのですが。

  • Visual Studio 2013/2015RC
    Microsoft.Maker のライブラリをビルドするに必要です。本ブログで解説するコードは Windows 8.1/VS2013 で動作確認しています。
  • Windows 側の Bluetooth ドングル
    ノート PC だったりすると内蔵なんですが、据え置き PC だとドングルを刺して。
  • Arduino Uno など。
    Firmata が動けば何でも。
  • Bluetooth モジュール
    Microsoft のサイトでは、SparkFun Bluetooth Mate Silver を使っていますが何でもいいです。私は手持ちの HC-05/06 で動作確認しています。BT2.0 のシリアル通信を使うので BLE の必要はありません。
  • ブレッドボード、ジャンパーワイヤー、LED など
    ここは電子工作的に。

Arduino に Firmata を焼く

「ファイル」→「スケッチの例」→「Firmata」→「StandardFirmata」を開いて、ビルドします。

image

この時、Arduino 側に差し込む Bluetooth のシリアル通信速度を設定し直します。デフォルトでは、57600 のように高速になっているので、HC-05 の初期値の 9600 に設定し直します。このあたりは、手持ちの Bluetooth モジュールに合わせます(私の AT コマンドが面倒で、そのまま 9600 で使っています)

Firmata.begin(9600);

Windows Remote Arduino のライブラリをダウンロードする

Windows IoT – SetupPCWRA の Option 1: Install the NuGet package を使えば、一発で Nuget で取れるようなことが書いてありますが…まだ、NuGet 上にはありません(Windows 8.1からも見つからない)。仕方がないので github からダウンロードしてビルドをします。

ライブラリは、以下からダウンロードできます。win8.1 と win10 の違いは、win8.1 が従来の Windows ストアと Phone のユニバーサルアプリで作ってあって、win10 は新しい Universal なプロジェクトで作ってあります。どちらもライブラリとし使うだけなので、UI は必要ないのですが、どうやらコードが C++/CX で書いているためなのか、8.1 では PC と Phone とのライブラリを別々に作らないとだめなようです。win10 のほうはひとつにまとまっています。

ms-iot/remote-wiring · GitHub
https://github.com/ms-iot/remote-wiring

これと、Lチカをさせるためのコードをダウンロードします。

ms-iot/windows-remote-arduino-samples · GitHub
https://github.com/ms-iot/windows-remote-arduino-samples

内部的に RFCOMM を使っているのでマニフェストファイルを手作業で修正する必要があります。remote-wiring のプロジェクトを参照させるために、remote-wiring フォルダにライブラリのプロジェクトを丸ごとコピーしておきます。

 

public MainPage()
{
    this.InitializeComponent();
    // bluetooth = new BluetoothSerial("RNBT-E072");
    bluetooth = new BluetoothSerial("HC-06");

    arduino = new RemoteDevice(bluetooth);
    bluetooth.ConnectionEstablished += OnConnectionEstablished;

    //these parameters don't matter for bluetooth
    bluetooth.begin(9600, SerialConfig.SERIAL_8N1);
}

 

ここでも、シリアル通信の速度「9600」と、Bluetooth モジュールの名前「HC-05」のように設定し直しておきます。あとは、x86 あたりでビルドをすれば ok です。x64 でビルドをすると XAML デザイナが動かないので、ひとまず x86 で動作確認するとよいでしょう。Any CPU で動かないのは C++/CX を使っているためです。

ちなみにLチカさせているところはこんな感じ。RemoteDevice クラスで取得した arduino オブジェクトを使って、digitalWrite してます。このあたりは Android の Scketch に似せているみたい。
個人的には .NET Micro に寄せたほうが良いのでは?と思うのですが、そこは OSS なので自己拡張で。

private void OnConnectionEstablished()
{
    //enable the buttons on the UI thread!
    var action = Dispatcher.RunAsync( Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler( () => {
        OnButton.IsEnabled = true;
        OffButton.IsEnabled = true;
    }));
}

private void OnButton_Click( object sender, RoutedEventArgs e )
{
    //turn the LED connected to pin 5 ON
    arduino.digitalWrite( 5, PinState.HIGH );
}

private void OffButton_Click( object sender, RoutedEventArgs e )
{
    //turn the LED connected to pin 5 OFF
    arduino.digitalWrite( 5, PinState.LOW );
}

Bluetooth とペアリングする

Windows 8.1 のとき、BT2.0を接続する場合はペアリングが必要です。Windows 10 で BLE 接続する場合はペアリングなしでいけるらしいのですが、そこはまだ確認してません。

image

HC-05 のピンコードは「1234」です。

Arduino Uno で動かす

Bluetooth モジュールへの配線は MS のサイト で確認してもらうとして(RX/TXを接続するだけの簡単なものです)Uno 互換機で動かした結果がこんな感じです。

https://pbs.twimg.com/media/CFAp8IxUgAA88WX.jpg:large

デスクトップのストアアプリから Lチカができますね。まあ、Lチカだけやっても面白くないので、後でモーターかサーボモーターを動かしてみましょう。センサーの類も取得できるはずですね

Arduino Nano で動かす

USB 給電ではなくて、乾電池から給電させて Arduino Nano で動かします。これは、互換機なんで 300円前後のものです。Firmata + Windows の組み合わせが、手軽に?Windows Remote Android で実現ができます、ってことですね。

https://pbs.twimg.com/media/CFA0RLJUEAAlymU.jpg:large

ここでは、PC から扱っているわけですが、Windows Phone 経由にもできるだろうし、あるいは Ruby や Node.js を使っても同じインターフェースでできるということです。そのあたりは、クライアントアプリの切り替えが自由になって、便利な仕組みです。

カテゴリー: Arduino, Win IoT パーマリンク