透传点灯实验

来自Microduino Wikipedia
Bdharduino@126.com讨论 | 贡献2014年10月29日 (三) 16:11的版本
跳转至: 导航搜索

Microduino-Zigbee透传点灯实验

目的

本教程展示了Microduino-Zigbee模块的数据透传。发送端为协调器节点,接收端为路由节点。路由节点的LED灯的亮灭受控于协调器端的开关控制,表征了透传的实现。

设备

  • 其他硬件设备
相关硬件 数量 功能
LED灯 1个 指示
100欧电阻 1个 LED限流
面包板跳线 1盒 电气连接线。


实验说明

  • 协调器端 Microduino-USBTTL与Microduino-Zigbee与Microduino-Core三个模块直接叠加
    • 一根导线的一头接GND,另一头甩出。用甩出的一头去触碰D5为灯开指令,触碰D6为灯关指令。


  • 路由节点 Microduino-USBTTL与Microduino-Zigbee与Microduino-Core三个模块直接叠加
    • LED与电阻串接与GND与D13之间,需注意LED极性。

见下图

程序

  • 协调器端:
//sender   coordinator  this example
#include <SoftwareSerial.h>
String myString="";
String IEEEAD="";
#define  keyON  5
#define keyOFF 6
SoftwareSerial mySerial(2, 3); // RX, TX
void setup() 
{
  pinMode(keyON,INPUT_PULLUP);
  pinMode(keyOFF,INPUT_PULLUP);
  mySerial.begin(9600);
}
void loop()
{
     while (mySerial.available() > 0)  
    {
      myString += char(mySerial.read());
      delay(2);
    }
    if (myString.length() > 0)
    {
      if(myString[0]=='+'&&myString[7]==','&&myString[12]==',')
      {   
             for(int i=13;i<myString.length();i++) 
             IEEEAD+=myString[i];
             myString="+ZBD=" +IEEEAD;
                 while(1)
                {
                  if(digitalRead(keyON)==0)
                  {
                    delay(50);
                    if(digitalRead(keyON)==0)
                    {
                       mySerial.print(myString);
                       mySerial.println("ON");
                       delay(300);
                    }
                  }
                 if(digitalRead(keyOFF)==0)
                 {
                   delay(50);
                  if(digitalRead(keyOFF)==0)
                    {
                       mySerial.print(myString);
                       mySerial.println("OFF");
                       delay(300);
                    }
                 }
                  
               }
         }
      
    }

}
  • 如果协调器端把Microduino-Core换为Microduino-Core+

程序如下

//sender   coordinator  this example
String myString="";
String IEEEAD="";
#define  keyON  5
#define keyOFF 6
void setup() 
{
  pinMode(keyON,INPUT_PULLUP);
  pinMode(keyOFF,INPUT_PULLUP);
  Serial1.begin(9600);
}
void loop()
{
     while (Serial1.available() > 0)  
    {
      myString += char(Serial1.read());
      delay(2);
    }
    if (myString.length() > 0)
    {
      if(myString[0]=='+'&&myString[7]==','&&myString[12]==',')
      {   
             for(int i=13;i<myString.length();i++) 
             IEEEAD+=myString[i];
             myString="+ZBD=" +IEEEAD;
                 while(1)
                {
                  if(digitalRead(keyON)==0)
                  {
                    delay(50);
                    if(digitalRead(keyON)==0)
                    {
                       Serial1.print(myString);
                       Serial1.println("ON");
                       delay(300);
                    }
                  }
                 if(digitalRead(keyOFF)==0)
                 {
                   delay(50);
                  if(digitalRead(keyOFF)==0)
                    {
                       Serial1.print(myString);
                       Serial1.println("OFF");
                       delay(300);
                    }
                 }
                  
               }
         }
      
    }

}


  • 路由节点端
// receiver      router  this example
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
String myString="";
void setup() 
{
 pinMode(13,OUTPUT);
 mySerial.begin(9600);
}
void loop()
{
     while (mySerial.available() > 0)  
    {
      myString += char(mySerial.read());
      delay(2);
    }

    if (myString.length() > 0)
    {
        if(myString=="ON")
        digitalWrite(13,HIGH);
        if(myString=="OFF")
        digitalWrite(13,LOW);
     }
    myString="";
   
}


调试

  • 叠加Microduino-USBTTL与Microduino-Zigbee与Microduino-Core,烧写协调器端发送程序。
  • 叠加Microduino-USBTTL与Microduino-Zigbee与Microduino-Core,烧写路由节点接收程序。
  • 首先给协调器上电,大约5秒钟后给路由节点上电。协调器端导线触碰D5,可观察到路由节点的LED点亮,触碰D6,可观察到灯熄灭。
  • 如果不能实现灯的亮灭控制,请检查Microduino-Zigbee模块是否已通过AT指令配置合理(节点类型,波特率等)。AT指令设置可在不改动硬件的情况下通过参考[Microduino- Zigbee 与其它Microduino模块的连接 ]完成。