查看“组网点灯实验”的源代码
←
组网点灯实验
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{| style="width: 800px;" |- | ==目的== 本教程使用Microduino-Zigbee组网结合Microduino-Core+,协调器控制四个节点LED灯,同时每个节点也能够控制协调器上的led灯,实现组网无线控制。 ==设备== *Microduino模块 {|class="wikitable" |- |模块||数量||功能 |- |[[Microduino-Zigbee/zh]] ||5||无线通讯 |- |[[Microduino-Core+/zh]]||5||核心 |- |[[Microduino-USBTTL/zh]]||2 ||下载程序 |- |[[Microduino-Cube-S1/zh]]||4 ||扩展 |- |[[Microduino-Plug/zh]]||1 ||扩展 |- |} *其他硬件设备 {|class="wikitable" |- |相关硬件||数量||功能 |- |LED灯 ||9个||指示 |- |按键 ||1个||控制 |- |面包板 ||1个||搭建电路 |- |面包板跳线 ||1盒||电气连接线 |- |USB数据线 ||5根||下载线、供电 |- |} *硬件搭建 **协调器 {|class="wikitable" |- |[[Microduino-Zigbee/zh]] ||1||无线通讯 |- |[[Microduino-Core+/zh]]||1||核心 |- |[[Microduino-USBTTL/zh]]||1 ||下载程序 |- |[[Microduino-Plug/zh]]||1 ||扩展 |- |} 将模块叠加在Plug上,再将按键接在A6上,D6,D7,D8,D9,D10分别接一个led灯 [[file:Microduino-Zigbee_network_00.JPG|thumb|600px|center]] **节点 {|class="wikitable" |- |[[Microduino-Zigbee/zh]] ||4||无线通讯 |- |[[Microduino-Core+/zh]]||4||核心 |- |[[Microduino-USBTTL/zh]]||1 ||下载程序 |- |[[Microduino-Cube-S1/zh]]||1 ||扩展 |- |} 我们将搭建四组节点,但是只用一个[[Microduino-USBTTL/zh]]模块,因此你需要先叠加Core+、Zigbee 和USBTTL,下载完程序再拔下USBTTL,再叠加在Microduino-Cube-S1上通过USB数据线供电,再用USBTTL给别节点下载程序。 [[file:Microduino-Zigbee_network_02.JPG|thumb|600px|center]] ===程序=== *协调器: <source lang="cpp"> #define led_pin_en 6 int led_pin[4]={ 7,8,9,10}; #define key_pin A6 boolean led_power_01,led_power_02,led_power_03; String led_switch_0="led_off"; String led_switch_1="led_on"; String myStringSerial1=""; String MacString=""; String MacString_rec=""; String myString=""; String StyleString=""; String myString_01[4]={ "","","",""}; String myString_02[4]={ "","","",""}; int num_01,num_02,num_03; void setup() { Serial.begin(9600); Serial1.begin(9600); pinMode(led_pin_en,OUTPUT); for(int i=0;i<4;i++) { pinMode(led_pin[i],OUTPUT); } pinMode(key_pin,INPUT_PULLUP); for(int i=0;i<4;i++) { digitalWrite(led_pin[i],LOW); } } void loop() { int sensorValue = analogRead(key_pin); //Serial.println(sensorValue); while (Serial1.available() > 0) { myStringSerial1 += char(Serial1.read()); delay(2); } if (myStringSerial1.length() > 20&&myStringSerial1[0]=='+'&&myStringSerial1[7]==','&&myStringSerial1[12]==',') { StyleString=""; MacString=""; for(int i=5;i<7;i++) StyleString+=myStringSerial1[i]; for(int i=8;i<13;i++) MacString+=myStringSerial1[i]; if(StyleString=="01") { num_01++; myString_01[num_01-1]=MacString; } else if(StyleString=="02") { num_02++; myString_02[num_02-1]=MacString; } digitalWrite(led_pin_en,HIGH); delay(150); digitalWrite(led_pin_en,LOW); delay(150); digitalWrite(led_pin_en,HIGH); delay(150); digitalWrite(led_pin_en,LOW); /* for(int i=0;i<num_01;i++) { Serial.print("myString_01["); Serial.print(i); Serial.print("]:"); Serial.println(myString_01[i]); if(i==num_01-1) Serial.println("/------------------------/"); } for(int i=0;i<num_02;i++) { Serial.print("myString_02["); Serial.print(i); Serial.print("]:"); Serial.println(myString_02[i]); if(i==num_02-1) Serial.println("/------------------------/"); } */ } else if(myStringSerial1.length()>0&&myStringSerial1.length() <20&&myStringSerial1[0]=='+'&&myStringSerial1[4]=='='&&myStringSerial1[9]==',') { MacString_rec=""; myString=""; for(int i=5;i<10;i++) MacString_rec+=myStringSerial1[i]; for(int i=10;i<myStringSerial1.length()-2;i++) myString+=myStringSerial1[i]; Serial.println(myString); } myStringSerial1=""; for(int i=0;i<num_02;i++) { if(MacString_rec==myString_02[i]) { if(myString=="led_on") digitalWrite(led_pin[i],HIGH); else if(myString=="led_off") digitalWrite(led_pin[i],LOW); } } if(sensorValue<100) { led_power_01=!led_power_01; for(int i=0;i<num_02;i++) { if(led_power_01==true) Serial1.println("+ZBD="+myString_02[i]+led_switch_1); else if(led_power_01==false) Serial1.println("+ZBD="+myString_02[i]+led_switch_0); delay(300); } } } </source> *节点: <source lang="cpp"> #define led_pin 6 #define key_pin A6 boolean led_power; String led_switch_0="led_off"; String led_switch_1="led_on"; String myStringSerial1=""; String myString=""; void setup() { Serial.begin(9600); Serial1.begin(9600); pinMode(led_pin,OUTPUT); pinMode(key_pin,INPUT_PULLUP); } void loop() // run over and over { int sensorValue = analogRead(key_pin); //Serial.println(sensorValue); 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); if(sensorValue<500) { delay(300); led_power=!led_power; if(led_power==true) Serial1.print(led_switch_0); else Serial1.print(led_switch_1); } myStringSerial1=""; myString=""; delay(100); } </source> *程序说明 **协调器 ***获取节点复位的短地址,用来身份验证; ***通过检测按键值给指定节点发送消息; ***接收节点发送过来的数据,与获取的短地址(身份)匹配,点亮对应的led灯 **节点 ***接收协调器发送过来的数据,点亮对应的led灯 ***通过检测按键值给协调器发送消息; ===调试=== *分别打开两个IDE开发环境,将程序复制到编辑框,选择好板卡和COM端口,将程序分别下载到核心。有四个节点得下载四次。下载完都用USB数据线供电。 *先复位协调器,再依次复位四个节点,节点的复位顺序与控制协调器上的led对应。复位是为了组网,同时可看到协调器上的led灯快闪两下。当四个节点都匹配完毕后,这时你就可以控制了。 *协调器控制节点 按下按键,可以看到四个节点的led灯按照匹配的顺序依次亮起,每按一次按键,led状态切换一次。 *节点控制协调器 按下S1底板上右边的按钮,可以对应控制协调器上的led。 采用Core+做核心程序这里就不提供,你需要把Serial1.read()改成就行了mySerial.read(),Serial1.println()改成mySerial.println ()因为用Core+做核心用到的是串口1(Serial1),用Core做核心用到的是软串口。 ==注意== *先复位协调器,再复位节点进行匹配; *led亮灭与节点匹配有关; *程序只写了能匹配四个节点,用户可以更改对应程序增加节点。 |}
返回至
组网点灯实验
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
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
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息