查看“透传点灯实验”的源代码
←
透传点灯实验
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | ==目的== 本教程使用Microduino-Zigbee透传来控制LED灯的亮灭,实现无线控制。 ==设备== *Microduino模块 {|class="wikitable" |- |模块||数量||功能 |- |[[Microduino-Zigbee/zh]] ||2||无线通讯 |- |[[Microduino-Core+/zh]]||2||核心 |- |[[Microduino-Core/zh]]||2||核心 |- |[[Microduino-USBTTL/zh]]||2 ||下载程序 |- |[[Microduino-Cube-S1/zh]]||2 ||扩展 |- |} *其他硬件设备 {|class="wikitable" |- |相关硬件||数量||功能 |- |LED灯 ||2个||指示 |- |面包板跳线 ||1盒||电气连接线。 |- |} ==路由器控制协调器上的led灯== *我们采用[[Microduino-Cube-S1/zh]]上的模拟按键来控制协调器上led灯的亮灭。 *协调器端搭建 将Microduino-USBTTL、Microduino-Zigbee与Microduino-Core(或Microduino-Core+)三个模块直接叠加,在D6上叠加一个led灯(长接D6,短接GND)。 [[File:Zigbee_Bridge_1.jpg|600px|center|thumb]] *路由节点搭建 将Microduino-USBTTL、Microduino-Zigbee、Microduino-Core(或Microduino-Core+)和Microduino-Cube-S1四个模块直接叠加。 [[File:Zigbee_Bridge_2.jpg|600px|center|thumb]] ===程序=== ====采用Core做核心==== *协调器端: <source lang="cpp"> #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX #define led_pin 6 String myStringSerial1=""; String myString=""; void setup() { Serial.begin(9600); mySerial.begin(9600); pinMode(led_pin,OUTPUT); } void loop() // run over and over { while (mySerial.available() > 0) { myStringSerial1 += char(mySerial.read()); delay(2); } if (myStringSerial1.length() > 0) { for(int i=10;i<myStringSerial1.length()-2;i++) myString+=myStringSerial1[i]; Serial.println(myString); } if(myString=="led_on") digitalWrite(led_pin,HIGH); else if(myString=="led_off") digitalWrite(led_pin,LOW); myStringSerial1=""; myString=""; delay(100); } </source> *路由节点端 <source lang="cpp"> #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX boolean led_power; String led_switch_0="led_off"; String led_switch_1="led_on"; void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { int sensorValue = analogRead(A6); Serial.println(sensorValue); if(sensorValue<300) { delay(300); led_power=!led_power; if(led_power==true) mySerial.print(led_switch_0); else mySerial.print(led_switch_1); } } </source> *程序说明 路由器给协调器发送数据,协调器接收到: +ZBD=XXXX, Data,XXXX为你的路由器的为短地址。其实对我们有用的数据就是Data,因此我们只要或取出Data就行了,再根据Data进行判断。 <source lang="cpp"> if (myStringSerial1.length() > 0) { for(int i=10;i<myStringSerial1.length()-2;i++) myString+=myStringSerial1[i]; Serial.println(myString); } </source> ====采用Core+做核心==== *协调器端: <source lang="cpp"> #define led_pin 6 String myStringSerial1=""; String myString=""; void setup() { Serial.begin(9600); Serial1.begin(9600); pinMode(led_pin,OUTPUT); } void loop() // run over and over { while (Serial1.available() > 0) { myStringSerial1 += char(Serial1.read()); delay(2); } if (myStringSerial1.length() > 0) { for(int i=10;i<myStringSerial1.length()-2;i++) myString+=myStringSerial1[i]; Serial.println(myString); } if(myString=="led_on") digitalWrite(led_pin,HIGH); else if(myString=="led_off") digitalWrite(led_pin,LOW); myStringSerial1=""; myString=""; delay(100); } </source> *路由节点端 <source lang="cpp"> boolean led_power; String led_switch_0="led_off"; String led_switch_1="led_on"; void setup() { Serial.begin(9600); Serial1.begin(9600); } void loop() { int sensorValue = analogRead(A6); Serial.println(sensorValue); if(sensorValue<300) { delay(300); led_power=!led_power; if(led_power==true) Serial1.print(led_switch_0); else Serial1.print(led_switch_1); } } </source> ===调试=== *分别打开两个IDE开发环境,将程序复制到编辑框,选择好板卡和COM端口,将程序分别下载到核心。 *先复位协调器,再复位路由,这样就能建立连接了。 **当Zigbee的RST接到Core的RST,就可以通过Core或其他扩展板的复位按键进行复位 [[file:Microduino-ZigbeePin2.JPG|thumb|600px|center|Microduino-Zigbee Front]] *每按下路由器上Microduino-Cube-S1的按键一次,可以看到协调器上的led亮灭翻转一次。 ==协调器控制路由器上的led灯== 硬件搭建和上文是一样的,只是要把Microduino-Cube-S1叠加在协调器上,把led放在路由器上。 ===程序=== ====采用Core做核心==== *协调器: <source lang="cpp"> #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX #define led_pin 6 boolean led_power; String led_switch_0="led_off"; String led_switch_1="led_on"; String myStringSerial1=""; String MACString=""; String myString=""; void setup() { Serial.begin(9600); mySerial.begin(9600); pinMode(led_pin,OUTPUT); digitalWrite(led_pin,LOW); } void loop() { int sensorValue = analogRead(A6); //Serial.println(sensorValue); while (mySerial.available() > 0) { myStringSerial1 += char(mySerial.read()); delay(2); } if (myStringSerial1.length() > 0&&myStringSerial1[0]=='+'&&myStringSerial1[7]==','&&myStringSerial1[12]==',') { for(int i=8;i<13;i++) MACString+=myStringSerial1[i]; myString="+ZBD="+ MACString; Serial.println(myString); myStringSerial1=""; digitalWrite(led_pin,HIGH); } if(sensorValue<300) { delay(300); led_power=!led_power; if(led_power==true) mySerial.println(myString+led_switch_1); else mySerial.println(myString+led_switch_0); } } </source> *路由器: <source lang="cpp"> #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX #define led_pin 6 String myStringSerial1=""; String myString=""; void setup() { Serial.begin(9600); mySerial.begin(9600); pinMode(led_pin,OUTPUT); } void loop() // run over and over { while (mySerial.available() > 0) { myStringSerial1 += char(mySerial.read()); delay(2); } if (myStringSerial1.length() > 0) { for(int i=10;i<myStringSerial1.length()-2;i++) myString+=myStringSerial1[i]; Serial.println(myString); } if(myString=="led_on") digitalWrite(led_pin,HIGH); else if(myString=="led_off") digitalWrite(led_pin,LOW); myStringSerial1=""; myString=""; delay(100); } </source> *程序说明 协调器给路由器发送数据格式为:+ZBD=XXXX,YYYY,XXXX为你的路由器的短地址,YYYY为你想发送的数据,这样路由器才能接收。因此必须先获取到路由器的短地址,获取方式: *先复位你的协调器,再复位你的路由,这样两个能够连接,路由器自动发送包含自己IEEE地址和短地址的报告数据包到协调器,这时只要把短地址读取然后提取出来就行了。 *程序 <source lang="cpp"> while (mySerial.available() > 0) { myStringSerial1 += char(mySerial.read()); delay(2); } if (myStringSerial1.length() > 0&&myStringSerial1[0]=='+'&&myStringSerial1[7]==','&&myStringSerial1[12]==',') { for(int i=8;i<13;i++) MACString+=myStringSerial1[i]; myString="+ZBD="+ MACString; Serial.println(myString); myStringSerial1=""; digitalWrite(led_pin,HIGH); } </source> *你可以在协调器的D6引脚上叠加一个led灯,先复位协调器,再复位路由,这样就能建立连接了。当协调器获取到路由的短地址时该led灯能够亮。这时你就可以通过协调器控制路由器了。 采用Core+做核心程序这里就不提供,你可以参考上文,把mySerial.read()改成Serial1.read()就行了,因为用Core做核心用到的是软串口,用Core+做核心用到的是串口1(Serial1)。 |}
返回至
透传点灯实验
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息