手机连接蓝牙通过Zigbee无线控制灯珠亮度

DL-20型号的zigbee模块,两个zigbee已经事先设置好一个A,一个B,9600波特率,点对点互相通讯。
实现:通过手机蓝牙助手连接主机的蓝牙,发送信息,主机的zigbee将信息传送给从机的zigbee,从而控制从机的灯珠亮度。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/*
---- 主机电路连接 ----

HC-08蓝牙 Arduino Uno R3 引脚
TX RX
RX TX

VCC +5v
GND GND

ZigBee Arduino Uno R3 引脚
TX 2
RX 3

简单说:发送数据时:蓝牙传送给arduino,arduino传送给主机zigbee,主机zigbee传送给从机的zigbee。
接收数据时:从机的zigbee传回给主机的zigbee,主机zigbee传回给arduino,arduino传回给蓝牙。
所以主机的arduino是充当蓝牙和zigbee之间桥梁。
zigbee使用方法很简单,当作串口来用,简单说就是它的rx与arduino的tx相连,同理它的tx与arduino的rx相连;rx代表接收,tx代表发送,这样连接他们之间就是互通的

说明:
1.我的两个zigbee模块波特率都已经调好都是9600,两个zigbee之间也设置好了一个作为A,一个作为B。两个是互相通信的

2.上传程序时,rx,tx口不能被占用,所以要拔掉蓝牙

*/

#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // 建立SoftwareSerial对象,zigbee的TX连接引脚2, 蓝牙的RX引脚3(本来咱们可以用zigbee和arduino的rx和tx相连,但是被蓝牙用了,就得再 另外建个对象来实现蓝牙和arduino连接)
void setup() {

Serial.begin(9600);//设置arduino的波特率9600
BTserial.begin(9600); //设置蓝牙 HC-08 默认波特率 9600

}

void loop() {

// 手机通过蓝牙发送给arduino,arduino接收数据

if (Serial.available() > 0) { //如果HC-08接收到发来的数据
char serialData = Serial.read(); //定义serialData ,它等于从蓝牙HC-08读取到的数据
BTserial.print( serialData ); //软件串口发

}

// arduino将接收到的数据发送给zigbee

if ( BTserial.available() > 0 ) { //如果arduino接收到数据
char BTserialData = BTserial.read(); //定义BTserialData,它等于从arduino读取到的数据
Serial.print( BTserialData ); //硬件串口发

}
}

/*程序来源
http://www.taichi-maker.com/homepage/arduino-tutorial-index/mearm-index/mearm-17-bluetooth-arduino-1/
---- 从机电路连接 ----
Zigbee Arduino Uno R3 引脚
TX 0 (RX)
RX 1 (TX)
VCC +5v
GND GND

LED Arduino Uno R3 引脚
正极 11 (RX)
负极 GND (通过220欧姆限流电阻)

说明:
1.我的两个zigbee模块波特率都已经调好都是9600,两个zigbee之间也设置好了一个作为A,一个作为B。两个是互相通信的

2.须先将此程序上传至ARDUINO后,再将Zigbee连接在ARDUINO开发板的串口引脚上。
否则程序将无法正常上传。
简单说:
这个程序都是照搬,唯一区别:只是把蓝牙换成zigbee了。
*/
int brightness; //LED亮度变量
int serialData; //串口数据变量

void setup() {
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(11, OUTPUT);
}

void loop(){
if( Serial.available()>0 ){ //如果串口缓存有数据
serialData = Serial.parseInt(); //将串口缓存数值存储到serialData变量
Serial.print("serialData = "); Serial.println(serialData);
if (serialData >=0 && serialData <= 255) {
if (serialData >= brightness){ //逐渐调节LED亮度
for (brightness; brightness <= serialData; brightness++){
analogWrite(11, brightness);
Serial.print("brightness = "); Serial.println(brightness);
delay(5);
}
} else {
for (brightness; brightness >= serialData; brightness–){
analogWrite(11, brightness);
Serial.print("brightness = "); Serial.println(brightness);
delay(5);
}
}
}
}
}

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值