専用無線アダプタを用いたVORZE製品の制御

専用無線アダプタの準備

専用無線アダプタ(以下、「アダプタ」)とデバイス間の通信はBluetooth LEで行われますが、PCとアダプタ間の通信はシリアル通信で行います。

PC ←←[シリアル通信]→→ アダプタ ←←[BLE]→→ 連動デバイス

アダプタをシリアルポートとして使用するには公式のドライバが必要です。
必ずインストールしてください。

サポート | VORZE(ヴォルツェ)
サポート 各製品のよくある質問 各製品のお問い合わせに関しては、各製品のFAQを確認後にお問い合わせくださいませ。

COMポート名の確認

ドライバをインストールし、アダプタをUSBポートに差し込むとデバイスマネージャーで新しくCOMポートが追加されているのがわかります。

ここの「COM3」は環境によって変わるため、適宜変えてください。

とりあえず動かしてみる

サイクロンSAの制御

using System.IO.Ports;

namespace VorzeUSBSample
{
    class Program
    {
        static void Main(string[] args)
        {
            //Disposableなのでusingするか、メソッドを抜ける前にDisposeを忘れずに
            var port = new SerialPort("COM3", 19200, Parity.None, 8, StopBits.One);

            //シリアルポートを開く
            port.Open();

            //サイクロンSA
            //速度40の場合
            byte cycSpeed = 40;

            //逆回転にするには128(0x80)を足す(正確には最上位ビットを1にする)
            //cycSpeed += 128;

            byte[] data = new byte[] { 0x01, 0x01, cycSpeed };

            port.Write(data, 0, data.Length);

            port.Close();
            port.Dispose();
        }
    }
}

送信するバイト列は {0x01, 0x01, 速度}

U.F.O. SAの制御

using System.IO.Ports;

namespace VorzeUSBSample
{
    class Program
    {
        static void Main(string[] args)
        {
            //Disposableなのでusingするか、メソッドを抜ける前にDisposeを忘れずに
            var port = new SerialPort("COM3", 19200, Parity.None, 8, StopBits.One);

            //シリアルポートを開く
            port.Open();

            //U.F.O. SA
            //速度40の場合
            byte ufoSpeed = 40;

            //逆回転にするには128(0x80)を足す(正確には最上位ビットを1にする)
            //ufoSpeed += 128;

            byte[] data = new byte[] { 0x02, 0x01, ufoSpeed };

            port.Write(data, 0, data.Length);

            port.Close();
            port.Dispose();
        }
    }
}

送信するバイト列は {0x02, 0x01, 速度}

ピストンSAの制御

using System.IO.Ports;

namespace VorzeUSBSample
{
    class Program
    {
        static void Main(string[] args)
        {
            //Disposableなのでusingするか、メソッドを抜ける前にDisposeを忘れずに
            var port = new SerialPort("COM3", 19200, Parity.None, 8, StopBits.One);

            //シリアルポートを開く
            port.Open();

            //ピストンSA
            //位置200, 速度15の場合
            byte pistonPosition = 200;
            byte pistonSpeed = 15;
            byte[] data = new byte[] { 0x03, pistonPosition, pistonSpeed };

            port.Write(data, 0, data.Length);

            port.Close();
            port.Dispose();
        }
    }
}

送信するバイト列は {0x03, 位置, 速度}

接続機器の判別

SerialPortに {0xF0, 0x01, 0x00} を送信すると機器に応じた数値が返ってくる。

using System;
using System.IO.Ports;

namespace VorzeUSBSample
{
    class Program
    {
        static void Main(string[] args)
        {
            //Disposableなのでusingするか、メソッドを抜ける前にDisposeを忘れずに
            var port = new SerialPort("COM3", 19200, Parity.None, 8, StopBits.One);

            //シリアルポートを開く
            port.Open();

            byte[] data = new byte[] { 0xF0, 0x01, 0x00 };

            port.Write(data, 0, data.Length);

            var result = port.ReadByte();
            Console.WriteLine(result);

            Console.ReadLine();

            port.Close();
            port.Dispose();
        }
    }
}

サイクロンSA:0x01…1
U.F.O. SA:0x02…1
ピストンSA:0x03…3(未検証)
ピストンSA:0x04…4(Twitterでの報告)
未接続:0xFF…255

コメント

タイトルとURLをコピーしました