nierixin 发表于 2013-7-11 17:24:37

arduino 之间的蓝牙通信问题

本帖最后由 nierixin 于 2013-7-24 09:51 编辑

新手求助:
   有A,B,C,3块arduino,怎么通过给A传递arduino B 或 Arduino C 的蓝牙的地址来与arduino B 或 arduino C通信?
要怎么实现呢,求指教~~

#include<SoftwareSerial.h>

#define SET 5
#define RX 2
#define TX 3
#define OUT 8

SoftwareSerial mSerial(RX, TX);
int i=0;

void setup() {
mSerial.begin(9600);
Serial.begin(9600);
pinMode(SET, OUTPUT);
pinMode(OUT,OUTPUT);
digitalWrite(OUT,HIGH);
}

void loop() {
String tmp = "";
//if(i == 5) {
cmd();
i++;
//}
mSerial.flush();
mSerial.println("hello world");
}

void cmd() {
   digitalWrite(SET, HIGH);
digitalWrite(OUT, HIGH);
   mSerial.println("AT+CLEAR");//
   delay(1000);
digitalWrite(SET, LOW);
digitalWrite(OUT, LOW);
delay(10000);
digitalWrite(OUT, HIGH);
delay(10000);
digitalWrite(SET, HIGH);

char buffer;
mSerial.println("AT");
delay(100);
mSerial.println("AT+ROLE=1");//设置主从模式:0从机,1主机
delay(100);
mSerial.println("AT+PSWD=1234");//设置配对密码,如1234

delay(100);
mSerial.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无

delay(100);
mSerial.println("AT+RMAAD");//清空配对列表

delay(100);
Serial.println(mSerial.println("AT+BIND00,0E,EA,CF,01,A2"));//设定从机的地址,保持格式一致。

delay(100);

Serial.println();


mSerial.println("AT+CMODE=0");//开启自动连接

delay(100);
if(i==0){
    mSerial.println("AT+RESET");
}
delay(30000);

   digitalWrite(SET, HIGH);
digitalWrite(OUT, HIGH);
   mSerial.println("AT+CLEAR");//
   delay(1000);
digitalWrite(SET, LOW);
digitalWrite(OUT, LOW);
delay(10000);
digitalWrite(OUT, HIGH);
delay(10000);
digitalWrite(SET, HIGH);


mSerial.println("AT");
delay(100);
mSerial.println("AT+ROLE=1");//设置主从模式:0从机,1主机
delay(100);
mSerial.println("AT+PSWD=1234");//设置配对密码,如1234

delay(100);
mSerial.println("AT+UART=9600,0,0");//设置波特率9600,停止位1,校验位无

delay(100);
mSerial.println("AT+RMAAD");//清空配对列表

delay(100);
Serial.println(mSerial.println("AT+BIND00,0E,EA,CF,01,1A"));//设定从机的地址,保持格式一致。

delay(100);


Serial.println();


mSerial.println("AT+CMODE=0");//开启自动连接

delay(100);
if(i==0){
    mSerial.println("AT+RESET");
}
delay(30000);
}




swim 发表于 2013-7-11 21:59:27

不可以,蓝牙只能一对一通信

nierixin 发表于 2013-7-12 09:52:01

swim 发表于 2013-7-11 21:59 static/image/common/back.gif
不可以,蓝牙只能一对一通信

同一时间是只能一对一,在不同时间段下,要实现控制不同的蓝牙。

yyy_zc 发表于 2013-7-12 17:42:05

B 和 C做server A做client 即可了, A.b.client -> B.server . A.c.client ->C.server   

外星人 发表于 2013-7-14 01:55:52

本帖最后由 外星人 于 2013-7-14 02:14 编辑

我觉得是可以的,不过你需要得到这样的条件,你至少有一块Arduino MEGA板子,其他两块可以是arduino UNO,当然你也可以三块都是Arduino MEGA,这样的条件满足后还需要4块蓝牙模块(两块蓝牙主机两块从机)。
方法1:
          蓝牙A = Arduino UNO1 = 串口;-- 蓝牙主机
          蓝牙B = Arduino MEGA = 串口0;-- 蓝牙从机
          蓝牙C = Arduino MEGA = 串口1;-- 蓝牙主机
          蓝牙D = Arduino UNO2 =串口;-- 蓝牙从机
蓝牙连接的设置:arduino UNO的蓝牙主机连接arduinoMEGA的蓝牙从机(串口0),然后arduinoMEGA在串口0所接收到arduino UNO发来的数据从串口1发送出去,arduinoMEGA串口1的蓝牙主机连接arduino UNO2的蓝牙从机。就这样,数据转发我是用这个Serial.write();,想从B板->到C板或者C板->A板都可以轻松实现了。
Serial.write();的使用方法可以参考http://wiki.geek-workshop.com/doku.php?id=arduino:arduino_language_reference:serial_write

方法2:
有一块arduino MEGA,其他两块是UNO,不过你需要更多的蓝牙模块,分别是3块主机和三块从机,A板arduinoMEGA一共有4个串口,用主机分别连接上所有的主机,即从0串口,1串口,2串口。连接好后分别与其他Arduino对应连接就OK了。不过这样你一共需要用到6块蓝牙模块,成本较高!B板想发送数据到C板需要在A板上Serial.write();从0至2。

我的方法就是这样,希望能够帮助到你。
页: [1]
查看完整版本: arduino 之间的蓝牙通信问题