【ドローン製作記録】XbeeWiFiによるArduinoとPCの無線通信【Arduino】

スポンサーリンク
Arduino
スポンサーリンク

はじめに

前回の設定をしたXbeeWiFiを取り付けたArduinoにPCからデータを無線で送信できるようにしたので、配線とソースコードを載せておきます。

Arduinoにソースコードの書き込みをする時はXbeeWiFiは取り外してください。

配線

Arudinoの動作電源が5vなので変換機能付きのアダプタ(Xbeeエクスプローラー)を購入しました。

xbeemj
Xbeeエクスプローラー

これにXbeeWiFiを差し込んで画像上部のピンに次のように配線しました(左がArduino、右がXbeeエクスプローラーのピン)。

  • GND > GND
  • 5V > 5V
  • TX1 > DIN
  • RX0 > DOUT

ソースコード

PCからArduinoに一方的にデータの送信をするプログラムです。

Arduinoは取得したデータをシリアルモニタに表示します。

Arduino

データが受信されていれば1バイトずつ表示します。

void setup(){
  Serial.begin(9600);
}

void loop(){
  if(Serial.available() > 0) {
    
    int Data = Serial.read();
    Serial.print(Data); 
  
    Serial.println();
  }
}

PC(C++)

アドレスの生成のところにある***にXbeeデバイスのアドレスを打ち込んでください。

コメントアウトでデータの格納となっている部分が今回送信するデータです。

目的によってここは変わると思いますが、今回は数値を4つ送信したい(姿勢3軸と出力)ので文字ではなく数値を格納しています。

#include <iostream> //標準入出力
#include <sys/socket.h> //アドレスドメイン
#include <sys/types.h> //ソケットタイプ
#include <arpa/inet.h> //バイトオーダの変換に利用
#include <unistd.h> //close()に利用
#include <string> //string型

int main(){

	//ソケットの生成
	int sockfd = socket(AF_INET, SOCK_STREAM, 0); //アドレスドメイン, ソケットタイプ, プロトコル
	if(sockfd < 0){ //エラー処理

		std::cout << "Error socket:" << std::strerror(errno); //標準出力
		exit(1); //異常終了
	}

	//アドレスの生成
	struct sockaddr_in addr; //接続先の情報用の構造体(ipv4)
	memset(&addr, 0, sizeof(struct sockaddr_in)); //memsetで初期化
	addr.sin_family = AF_INET; //アドレスファミリ(ipv4)
	addr.sin_port = htons(9750); //ポート番号,htons()関数は16bitホストバイトオーダーをネットワークバイトオーダーに変換
	addr.sin_addr.s_addr = inet_addr("***.***.***.***"); //IPアドレス,inet_addr()関数はアドレスの翻訳

	//ソケット接続要求
	connect(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in)); //ソケット, アドレスポインタ, アドレスサイズ

	//データ送信
	unsigned char s[4] = {1,2,3,4}; //データの格納
	send(sockfd, s, 4, 0); //送信

	//ソケットクローズ
	close(sockfd);

	return 0;
}

実行

Arduinoにソースコードを書き込んだ後、シリアルモニタを開いて、C++プログラムを実行すると次のようにシリアルモニタに表示されるはずです。

1
2
3
4

最後に

後は制御をPCからできるようにいじってやれば飛ぶと思います。

頑張ります。

コメント

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