C#でBluetoothのシリアル信号を送るin development

 
date:2014.12.02   posted by:lee
 

こんにちは、Leeです。
今回は、先日参加したEngaget FesのPCとPLENの連携部分について触れていきたいと思います。

データ処理からPLENへのコマンドの流れは以下となります。

Kinectから人の手の状態(グーかパー)を検出して、Bluetoothでシリアル信号をPLENに送っています。
少しサンプルコードを使いながら、Bluetoothでシリアル信号を送る方法を説明します。
まず、信号を送りたいデバイスとペアリングします。「デバイスマネージャー」(*1)か「デバイスやプリンター」(*1)などでペアリングしたデバイスのCOM PORTが調べられます。
COM PORT数を確認したらシリアル信号を送るためのC#サンプルコードを説明していきます。

OS:Windows8
開発環境:Microsoft Visual Studio Express 2013
まず必要なnamespaceをimportします
using System.IO;
using System.IO.Ports;
そしてシリアルポート変数を宣言し、シリアルポートを初期化します。
public void SerialPortInitiallize()
{
     SerialPort serialPort1 = new SerialPort();

    //COM ポートを設定する
    serialPort1.PortName = "先ほど調べといたCOM PORT";

    //Baud Rateを設定する
    serialPort1.BaudRate = ボーレート;

    //! データビットをセットする. (データビット = 8ビット)
    serialPort1.DataBits = 8;

    //! パリティビットをセットする. (パリティビット = なし)
    serialPort1.Parity = Parity.None;

    //! ストップビットをセットする. (ストップビット = 1ビット)
    serialPort1.StopBits = StopBits.One;

    //! フロー制御をコンボボックスから取り出す.
    serialPort1.Handshake = Handshake.None;

    //! 文字コードをセットする.
    serialPort1.Encoding = Encoding.UTF8;

    try
    {
        //! シリアルポートをオープンする.
        serialPort1.Open();

        //Data Receivedイベントを設定する
        serialPort1.DataReceived += SerialPortReceivedData;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

void SerialPortReceivedData(object sender, SerialDataReceivedEventArgs e)
{
    //! シリアルポートのバッファーの読み込む
    string data = serialPort1.ReadExisting();
    Console.Write(data);
}
これでデバイスとの連携は出来ました。そしてシリアルポートでデータを送るときは
try
{
    serialPort1.WriteLine("Hello World!");
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
そうしたら、ペアリングした2つの端末は送受信できるはずです!(万歳) もっとシリアルポートに関する詳しい資料が見たい人は
こちらへ
でも最初はコマンドを送っても反応しませんでした。よくデータシート見たら。。。。
おっと、String方型じゃなくて、 Char型とのことが判明しました。(涙目)
Char型の送り方はこちらです。(実際のコード)
try
{
    char[] serial_char = new char[4];
    serial_char[0] = '\x0001';
    serial_char[1] = '\x006d';
    serial_char[2] = '\x006f';
    serial_char[3] = '\x001e';
    serialPort1.Write(serial_char, 0, serial_char.Length - 1);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
これでPLENが動いてくれました!感動です!
この方法ではBluetoothだけでなく、USBケーブルでマイコンに繋ぐときも使えるので、電子工作をやる際に捗りますね!

次回はEngadget Fesで公開した、脳波センサーとSparkやL3Dとの連携部分について触れていきます!

(*1)Windowsの場合

 
Copyright © TheDesignium inc. powered by WordPress & mootools.
Relative Keyword|none