テクノロジー

img_technologyTop01

製品をもっと詳しく知りたい方へ
技術研究所

EV3-Java EV3間のBluetooth通信制御プログラム

Java(leJOS)で作成したプログラムによる、2台のEV3間のBluetooth通信制御プログラムについて紹介します。

 

※EV3のJava言語プログラミング環境については、「教育版EV3 Javaプログラミングガイド」をご参照ください。
※ここで紹介する内容は、leJOS EV3 バージョン 0.9.1-betaを用いて動作を確認したものです。

 

◆準備

EV3を2台用意し、メッセージを受信するEV3と、送信するEV3を決めておきます。また、その2台のEV3をペアリングし、受信側EV3のアドレスを確認しておきます。(ペアリングおよびEV3のアドレスの確認方法は、こちらをご覧ください。)

 

◆プログラム

このプログラムは、EV3からEV3にBluetooth通信でメッセージを送り、それを受信したEV3は、メッセージに対応した色のLEDを点灯します。

プログラムを実行する際は、受信側EV3のプログラムを先に実行します。

 

◇メッセージ受信側EV3のプログラム

1 import lejos.hardware.Bluetooth;
2 import lejos.remote.nxt.NXTCommConnector;
3 import lejos.remote.nxt.NXTConnection;
4 import lejos.utility.Delay;
5 import lejos.hardware.lcd.LCD;
6 import lejos.hardware.Button;
7
8 public class BtsampleEv3_1 {
9
10             public static void main(String[] args) {
11                         // 接続待機
12                         LCD.drawString(“Waiting…”,1,1);
13                         NXTCommConnector connector = Bluetooth.getNXTCommConnector();
14                         NXTConnection connection =
15                                     connector.waitForConnection(0, NXTConnection.RAW);
16
17                         // メッセージを受信してLED点灯
18                         // 1:Green 2:Red 3:Orange
19                         int message = getMessage(connection);
20                         LCD.clear();
21                         if(message != 0){
22                                     LCD.drawString(“message is ” + message,1,1);
23                                     Button.LEDPattern(message);
24                                     Delay.msDelay(3000);
25                         } else {
26                                     LCD.drawString(“error…”,1,1);
27                         }
28
29                         // 接続解除
30                         try {
31                                     if (null != connection) {
32                                                 connection.close();
33                                     }
34                         } catch (Exception e) {
35                         }
36             }
37
38             static int getMessage(NXTConnection connection) {
39                         byte[] buff = new byte[16];
40
41                         //メッセージを受信するまで待つ
42                         while(buff[0] == 0){
43                                     connection.read(buff, buff.length);
44                         }
45
46                         //メッセージを確認
47                         for (int i = 0; i < buff.length; i++) {
48                                     if (0 <= buff[i] && buff[i] <= 3) {
49                                                 return buff[i];
50                                     }
51                         }
52                         return 0;
53             }
54 }

 

プログラムを実行すると、受信側EV3は送信側EV3から接続されるのを待ちます。(14行目)

接続後メッセージを受信したら、そのメッセージの内容を確認します。(19行目)

メッセージは「1~3」の範囲の数値です。

受信側EV3は、メッセージの値に対応した色でLEDを点灯します。(23行目)

 

◇メッセージ送信側EV3のプログラム

1 import lejos.hardware.Bluetooth;
2 import lejos.remote.nxt.NXTCommConnector;
3 import lejos.remote.nxt.NXTConnection;
4 import lejos.utility.Delay;
5 import lejos.hardware.lcd.LCD;
6 import lejos.hardware.Button;
7
8 public class BtsampleEv3_2 {
9
10             public static void main(String[] args) {
11                         String ev3add = “00:00:00:00:00:00”; // 接続先EV3アドレス
12
13                         // 接続
14                         LCD.drawString(“Connecting…”,1,1);
15                         NXTCommConnector connector = Bluetooth.getNXTCommConnector();
16                         NXTConnection connection =
17                                     connector.connect(ev3add, NXTConnection.RAW);
18                         if (connection == null) {
19                                     LCD.clear();
20                                     LCD.drawString(“Connect error”,1,1);
21                                     Button.waitForAnyPress();
22                                     System.exit(1);
23                         }
24
25                         // 接続成功
26                         LCD.clear();
27                         LCD.drawString(“Connected!”,1,1);
28                         Delay.msDelay(1000);
29
30                         // 1~3のランダムな数値メッセージを送信
31                         LCD.clear();
32                         LCD.drawString(“Sending…”,1,1);
33                         int message = (int)(Math.random()*4);
34                         sendMessage(connection, message);
35
36                         // 送ったメッセージをLCDに表示、いずれかのボタンが押されるまで待機
37                         LCD.clear();
38                         LCD.drawString(“Send:” + message,1,1);
39                         Button.waitForAnyPress();
40
41                         // 接続解除
42                         try {
43                                     if (null != connection) {
44                                                 connection.close();
45                                     }
46                         } catch (Exception e) {
47                         }
48             }
49
50             static void sendMessage(NXTConnection connection, int message) {
51                         // メッセージをバッファに設定
52                         byte[] buff = new byte[16];
53                         for (int i = 0; i < buff.length; i++) {
54                                     buff[i] = (byte) message;
55                         }
56
57                         // メッセージを送信
58                         connection.write(buff, buff.length);
59             }
60 }

 

プログラムの11行目「”00:00:00:00:00:00″」には、ペアリングの際に確認した受信側EV3のアドレスを設定します。

プログラムを実行すると、送信側EV3は受信側EV3に接続します。(16行目)

接続が完了したら、1~3のいずれかの数値をメッセージとして送信します。(33・34行目)

その後、送信したメッセージの値をLCDに表示します。(38行目)

LCDに表示されたメッセージを確認し、インテリジェントブロックのいずれかのボタンを押すと、受信側EV3との接続を解除します。(39行目~)

 

  • Java(leJOS)で作成したプログラムによるEV3間のBluetooth通信制御の一例として紹介しています。

プログラムは動作確認済みですが、誤り等が含まれていた場合はご了承ください。

お問い合わせ

CONTACT

株式会社アフレル

本社/カスタマーセンター

〒918-8231 福井市問屋町3-111
TEL.0776-25-0303 FAX.0776-25-0309 info@afrel.co.jp
カスタマーセンター電話受付  9:30-17:30 (土日・祝日・年末年始を除く) MAP

東京支社

〒103-0001
東京都中央区日本橋小伝馬町2-8 新小伝馬町ビル5F
TEL.03-6661-9251 FAX.03-3249-3741 MAP

大阪事業所

〒532-0011
大阪府大阪市淀川区西中島3-7-8 NLC新大阪17号館302
TEL.06-4805-8788 FAX.06-4805-8789 MAP
  • 正規代理店

    LEGO education logo

  • PITSCO logo

  • NI logo

  • virtual robotics toolkit logo

資料内容の無断転載、複製を禁じます。
製作・著作 株式会社アフレル

Copyright 2017 Afrel Co.,Ltd. All Rights Reserved.

© LEGO, the LEGO logo, MINDSTORMS and the MINDSTROMS logo are trademarks of the LEGO Group.
© 2017 The LEGO Group.
レゴ、レゴのロゴマーク、レゴ マインドストームは、 レゴグループの登録商標です。