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

InfoPath & SQL Server !

Archive for the ‘XBee’ Category

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日 at 3:58 PM

Arduino UNO と XBee で双方向無線通信のテストをする。

with one comment

Arduino に XBee を取り付けると、シリアル通信を無線化することができる。シリアル通信は双方向に送受信できるので、PC側から XBee によってデータを送り、Arduino で受け取ったデータを判断して結果を返す、という実験をする。

Arduino と XBee はあらかじめ設定しておく。通信の対になる XBee も設定しておき、通信できる状態にする。一方の XBee は XBee Wireless プロトシールドで Arduino に載せ、もう一方の XBee はXBee USB アダプターで PC に接続する。

Arduino_XBee_双方向通信_003_IMG_6553_mid_640_480

<Fig.1 : XBee を載せた Arduino と USB アダプターで PC に接続した XBee>

Arduino のスケッチは次のようなものだ。シリアルポートから受け取ったデータを数値に変え、値が正か負かゼロかを判断している。受け取った値が正なら「It is bigger than 0」、値が負なら「It is smaller than 0」、値がゼロなら「It is the same as 0」の文字列を送る。

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

int i = 1;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  while (Serial.available() > 0) {
    int i = Serial.parseInt();
    if (i > 0) {
      Serial.print("It is bigger than 0");
      Serial.print("\n");
      }
    if (i < 0) {
      Serial.print("It is smaller than 0");
      Serial.print("\n");
    }
    if (i == 0) {
      Serial.print("It is the same as 0");
      Serial.print("\n");
    }
  }
}

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

Arduino_XBee_双方向通信_002

<Fig.2 : 双方向通信をテストするArduinoのスケッチ>

スケッチを Arduino に書き込んだら PC から切り離して XBee Wireless プロトシールドで XBee を載せ、別電源を使って USB に給電して動かす。次に PC に XBee を載せた XBee USB アダプターを接続し、XBee でシリアル通信を行う。シリアル通信には X-CTU を使ってみる。

X-CTU を起動したら Terminal タブを開き、シリアル通信を行う。正の数や負の数、ゼロを送信し、正しい結果が返ってくることを確かめる。Arduino を PC から離し、どの程度の距離まで通信するか、障害物があれば通信が途絶えるか、などを確かめる。

Arduino_XBee_双方向通信_001

<Fig.3 : X-CTU を使った XBee 無線シリアル通信のテスト>

Written by Yoshio Matsumoto

2014年1月18日 at 2:30 PM