はじめに
前回の設定をしたXbeeWiFiを取り付けたArduinoにPCからデータを無線で送信できるようにしたので、配線とソースコードを載せておきます。
Arduinoにソースコードの書き込みをする時はXbeeWiFiは取り外してください。
配線
Arudinoの動作電源が5vなので変換機能付きのアダプタ(Xbeeエクスプローラー)を購入しました。
よくよく見たら、Xbee用USBアダプターにも変換機能ついていました(てへ)。
これにXbeeWiFiを差し込んで画像上部のピンに次のように配線しました(左がArduino、右がXbeeエクスプローラーのピンXbee用USBアダプターのピン)。
- GND > GND
- 5V > 5V
- TX1 > DIN(TX)
- RX0 > DOUT(RX)
ソースコード
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からできるようにいじってやれば飛ぶと思います。
頑張ります。
コメント
ドローン記事の更新を楽しみにしております。
よろしくお願いします!!
放置しててすみません。。。
引っ越しの都合で実家においてあるので、取ってきたら更新しますね!