ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Arduino UNO と XBee で双方向無線通信のテストをする。Microsoft Visual Studio Express 2012 によるC#プログラミングでデータをWindowsフォームから送受信する。

leave a comment »

Arduino に XBee を載せ、PC 側から USB 接続した XBee でデータを送受信するテストをした。この無線化 Arduino に対して Windows Form からデータを送受信してみよう。

Arduino UNO と XBee で双方向無線通信のテストをする。
https://matsumotoyoshio.wordpress.com/2014/01/18/arduino-uno-%e3%81%a8-xbee-%e3%81%a7%e5%8f%8c%e6%96%b9%e5%90%91%e7%84%a1%e7%b7%9a%e9%80%9a%e4%bf%a1%e3%81%ae%e3%83%86%e3%82%b9%e3%83%88%e3%82%92%e3%81%99%e3%82%8b%e3%80%82/

XBee で無線接続化された Arduino に対して Windows Form からデータを送受信するプログラムを C# で作るとどうなるだろうか。Arduino は XBee で無線化されているが、要はシリアル通信を行えばよい。Microsoft Visual Studio Express 2012 で C# の新しいプロジェクトを作り、Windows Form を開発しよう。

プロジェクトができたら、まずシリアル通信をするために System.IO.Ports 名前空間の記述をする。

————————————————————————————

using System.IO.Ports;

————————————————————————————

そしてシリアルポートのインスタンスを生成し、初期化をする。

————————————————————————————

SerialPort mySiPo = new SerialPort("COM4");

・・・・・・・・・・・・

mySiPo.BaudRate = 9600;
mySiPo.Open();

————————————————————————————

そしてデータを受け取ったときのイベントハンドラを作成する。

————————————————————————————

mySiPo.DataReceived += mySiPo_DataReceived;

————————————————————————————

mySiPo_DataReceived イベントハンドラに、受け取ったデータをメッセージボックスで表示するコードを書く。

————————————————————————————

MessageBox.Show(mySiPo.ReadLine());

————————————————————————————

ここまででデータ受信の準備ができた。最後にデータを送信するためのボタンをフォーム上に3つつくり、それぞれのボタンにデータ「1」、「0」、「-1」を送信する役割をさせる。ボタンのラベルを書き換え、ボタンのクリックイベントハンドラにそれぞれ次の記述をする。

————————————————————————————

mySiPo.Write("1");

・・・・・・・・・・・・・・・・・

mySiPo.Write("0");

・・・・・・・・・・・・・・・・・

mySiPo.Write("-1");

————————————————————————————

ここまででコード全体はこのようになる。

————————————————————————————

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace Arduino_Serial_Control_001
{
    public partial class Form1 : Form
    {
        SerialPort mySiPo = new SerialPort("COM4");
        public Form1()
        {
            InitializeComponent();
            mySiPo.BaudRate = 9600;
            mySiPo.Open();
            mySiPo.DataReceived += mySiPo_DataReceived;
        }

        void mySiPo_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            MessageBox.Show(mySiPo.ReadLine());
        }

        private void button1_Click(object sender, EventArgs e)
        {
            mySiPo.Write("1");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            mySiPo.Write("0");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            mySiPo.Write("-1");
        }
    }
}

————————————————————————————

Form のデザインは次のとおりだ。

Arduino_XBee_双方向通信_004_mid_640

<Fig.1 : Microsoft Visual Studio Express 2012 のデザイン画面>

ビルドしフォームを開き、ボタンをクリックしてデータを送信する。データが送られると、無線により XBee を介して Arduino に送信され、受け取ったデータを判断してテキストが返ってくる。

Arduino_XBee_双方向通信_005

<Fig.2 : 完成した Windows Form>

Arduino_XBee_双方向通信_008

<Fig.3 : ボタンをクリックするとデータが送信され、Arduino が判断して結果のテキストを返す>

Written by Yoshio Matsumoto

2014年1月18日 @ 3:58 PM

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。