极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13395|回复: 4

arduino 之间的蓝牙通信问题

[复制链接]
发表于 2013-7-11 17:24:37 | 显示全部楼层 |阅读模式
本帖最后由 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[32];
  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);
}




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-7-11 21:59:27 | 显示全部楼层
不可以,蓝牙只能一对一通信
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-12 09:52:01 | 显示全部楼层
swim 发表于 2013-7-11 21:59
不可以,蓝牙只能一对一通信

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

使用道具 举报

发表于 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/do ... erence:serial_write

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

我的方法就是这样,希望能够帮助到你。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-5 04:27 , Processed in 0.037484 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表