“透传点灯实验”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
 
(未显示2个用户的10个中间版本)
第1行: 第1行:
Microduino-Zigbee透传点灯实验
 
 
{| style="width: 800px;"
 
{| style="width: 800px;"
 
|-
 
|-
 
|
 
|
 
==目的==
 
==目的==
本教程展示了Microduino-Zigbee模块的数据透传。发送端为协调器节点,接收端为路由节点。路由节点的LED灯的亮灭受控于协调器端的开关控制,表征了透传的实现。
+
本教程使用Microduino-Zigbee透传来控制LED灯的亮灭,实现无线控制。
 
==设备==
 
==设备==
*'''[[Microduino-Zigbee/zh]]'''
+
*Microduino模块
 
+
{|class="wikitable"
*'''[[Microduino-Core/zh]]'''
+
|-
 
+
|模块||数量||功能
*'''[[Microduino-Core+/zh]]'''
+
|-
 
+
|[[Microduino-Zigbee/zh]] ||2||无线通讯
*'''[[Microduino-USBTTL/zh]]'''
+
|-
 +
|[[Microduino-Core+/zh]]||2||核心
 +
|-
 +
|[[Microduino-Core/zh]]||2||核心
 +
|-
 +
|[[Microduino-USBTTL/zh]]||2 ||下载程序
 +
|-
 +
|[[Microduino-Cube-S1/zh]]||2 ||扩展
  
 +
|-
 +
|}
 
*其他硬件设备
 
*其他硬件设备
 
{|class="wikitable"
 
{|class="wikitable"
第19行: 第27行:
 
|相关硬件||数量||功能
 
|相关硬件||数量||功能
 
|-
 
|-
|LED灯 ||1个||指示
+
|LED灯 ||2个||指示
|-
 
|100欧电阻||1个||LED限流
 
 
|-
 
|-
 
|面包板跳线 ||1盒||电气连接线。
 
|面包板跳线 ||1盒||电气连接线。
第27行: 第33行:
 
|}
 
|}
  
 +
==路由器控制协调器上的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() 
*协调器端 Microduino-USBTTL与Microduino-Zigbee与Microduino-Core三个模块直接叠加
+
{
**一根导线的一头接GND,另一头甩出。用甩出的一头去触碰D5为灯开指令,触碰D6为灯关指令。
+
  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);
 +
  }
  
*路由节点 Microduino-USBTTL与Microduino-Zigbee与Microduino-Core三个模块直接叠加
+
  if (myStringSerial1.length() > 0)
**LED与电阻串接与GND与D13之间,需注意LED极性。    
+
  {    
见下图
+
    for(int i=10;i<myStringSerial1.length()-2;i++)
[[File:Zigbee_Bridge.jpg|600px|center|thumb]]
+
      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">
 
<source lang="cpp">
//sender  coordinator  this example
 
 
#include <SoftwareSerial.h>
 
#include <SoftwareSerial.h>
String myString="";
 
String IEEEAD="";
 
#define  keyON  5
 
#define keyOFF 6
 
 
SoftwareSerial mySerial(2, 3); // RX, TX
 
SoftwareSerial mySerial(2, 3); // RX, TX
void setup()  
+
 
{
+
boolean led_power;
   pinMode(keyON,INPUT_PULLUP);
+
 
  pinMode(keyOFF,INPUT_PULLUP);
+
String led_switch_0="led_off";
 +
String led_switch_1="led_on";
 +
 
 +
void setup() {
 +
   Serial.begin(9600);
 
   mySerial.begin(9600);
 
   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);
 
                    }
 
                }
 
                 
 
              }
 
        }
 
     
 
    }
 
  
 +
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>
 
</source>
  
*如果协调器端把Microduino-Core换为Microduino-Core+
+
====采用Core+做核心====
程序如下
+
*协调器端:
 
<source lang="cpp">
 
<source lang="cpp">
//sender  coordinator  this example
+
#define led_pin 6
 +
 
 +
String myStringSerial1="";
 
String myString="";
 
String myString="";
String IEEEAD="";
+
 
#define  keyON  5
+
void setup()
#define keyOFF 6
 
void setup()  
 
 
{
 
{
   pinMode(keyON,INPUT_PULLUP);
+
   Serial.begin(9600);
  pinMode(keyOFF,INPUT_PULLUP);
 
 
   Serial1.begin(9600);
 
   Serial1.begin(9600);
 +
  pinMode(led_pin,OUTPUT);
 
}
 
}
void loop()
+
 
 +
void loop() // run over and over
 
{
 
{
    while (Serial1.available() > 0)   
+
  while (Serial1.available() > 0)   
    {
+
  {
      myString += char(Serial1.read());
+
    myStringSerial1 += char(Serial1.read());
      delay(2);
+
    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);
 
                    }
 
                }
 
                 
 
              }
 
        }
 
     
 
    }
 
  
 +
  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>
 
</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">
 
<source lang="cpp">
// receiver      router  this example
 
 
#include <SoftwareSerial.h>
 
#include <SoftwareSerial.h>
 
SoftwareSerial mySerial(2, 3); // RX, TX
 
SoftwareSerial mySerial(2, 3); // RX, TX
 +
 +
#define led_pin 6
 +
 +
String myStringSerial1="";
 
String myString="";
 
String myString="";
void setup()  
+
 
 +
void setup()
 
{
 
{
pinMode(13,OUTPUT);
+
  Serial.begin(9600);
mySerial.begin(9600);
+
  mySerial.begin(9600);
 +
  pinMode(led_pin,OUTPUT);
 
}
 
}
void loop()
+
 
 +
void loop() // run over and over
 
{
 
{
    while (mySerial.available() > 0)   
+
  while (mySerial.available() > 0)   
    {
+
  {
      myString += char(mySerial.read());
+
    myStringSerial1 += char(mySerial.read());
      delay(2);
+
    delay(2);
     }
+
  }
 +
 
 +
  if (myStringSerial1.length() > 0)
 +
  { 
 +
     for(int i=10;i<myStringSerial1.length()-2;i++)
 +
      myString+=myStringSerial1[i];
 +
    Serial.println(myString);
 +
  }
  
    if (myString.length() > 0)
+
  if(myString=="led_on")
    {
+
    digitalWrite(led_pin,HIGH);
        if(myString=="ON")
+
  else if(myString=="led_off")
        digitalWrite(13,HIGH);
+
    digitalWrite(led_pin,LOW);
        if(myString=="OFF")
+
 
        digitalWrite(13,LOW);
+
  myStringSerial1="";
    }
+
  myString="";
    myString="";
+
  delay(100);
 
 
 
}
 
}
 
</source>
 
</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]==',')
==调试==
+
  { 
*叠加Microduino-USBTTL与Microduino-Zigbee与Microduino-Core,烧写协调器端发送程序。
+
    for(int i=8;i<13;i++)
*叠加Microduino-USBTTL与Microduino-Zigbee与Microduino-Core,烧写路由节点接收程序。
+
      MACString+=myStringSerial1[i];
*首先给协调器上电,大约5秒钟后给路由节点上电。协调器端导线触碰D5,可观察到路由节点的LED点亮,触碰D6,可观察到灯熄灭。
+
    myString="+ZBD="+ MACString;
*如果不能实现灯的亮灭控制,请检查Microduino-Zigbee模块是否已通过AT指令配置合理(节点类型,波特率等)。AT指令设置可在不改动硬件的情况下通过参考[[https://www.microduino.cc/wiki/index.php?title=%E5%A6%82%E4%BD%95%E4%B8%8E%E5%85%B6%E5%AE%83Microduino%E6%A8%A1%E5%9D%97%E8%BF%9E%E6%8E%A5  Microduino-  Zigbee  与其它Microduino模块的连接 ]]完成。
+
    Serial.println(myString);
 +
    myStringSerial1="";
 +
    digitalWrite(led_pin,HIGH);
 +
  }
 +
</source>
 +
*你可以在协调器的D6引脚上叠加一个led灯,先复位协调器,再复位路由,这样就能建立连接了。当协调器获取到路由的短地址时该led灯能够亮。这时你就可以通过协调器控制路由器了。
 +
采用Core+做核心程序这里就不提供,你可以参考上文,把mySerial.read()改成Serial1.read()就行了,因为用Core做核心用到的是软串口,用Core+做核心用到的是串口1(Serial1)。
  
 
|}
 
|}

2014年11月19日 (三) 14:43的最新版本

目的

本教程使用Microduino-Zigbee透传来控制LED灯的亮灭,实现无线控制。

设备

  • Microduino模块
模块 数量 功能
Microduino-Zigbee/zh 2 无线通讯
Microduino-Core+/zh 2 核心
Microduino-Core/zh 2 核心
Microduino-USBTTL/zh 2 下载程序
Microduino-Cube-S1/zh 2 扩展
  • 其他硬件设备
相关硬件 数量 功能
LED灯 2个 指示
面包板跳线 1盒 电气连接线。

路由器控制协调器上的led灯

  • 我们采用Microduino-Cube-S1/zh上的模拟按键来控制协调器上led灯的亮灭。
  • 协调器端搭建

将Microduino-USBTTL、Microduino-Zigbee与Microduino-Core(或Microduino-Core+)三个模块直接叠加,在D6上叠加一个led灯(长接D6,短接GND)。

  • 路由节点搭建

将Microduino-USBTTL、Microduino-Zigbee、Microduino-Core(或Microduino-Core+)和Microduino-Cube-S1四个模块直接叠加。

程序

采用Core做核心

  • 协调器端:
#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);
}
  • 路由节点端
#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);
  }
}
  • 程序说明

路由器给协调器发送数据,协调器接收到: +ZBD=XXXX, Data,XXXX为你的路由器的为短地址。其实对我们有用的数据就是Data,因此我们只要或取出Data就行了,再根据Data进行判断。

  if (myStringSerial1.length() > 0)
  {   
    for(int i=10;i<myStringSerial1.length()-2;i++) 
      myString+=myStringSerial1[i];
    Serial.println(myString);
  }

采用Core+做核心

  • 协调器端:
#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);
}
  • 路由节点端
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);
  }
}

调试

  • 分别打开两个IDE开发环境,将程序复制到编辑框,选择好板卡和COM端口,将程序分别下载到核心。
  • 先复位协调器,再复位路由,这样就能建立连接了。
    • 当Zigbee的RST接到Core的RST,就可以通过Core或其他扩展板的复位按键进行复位
Microduino-Zigbee Front
  • 每按下路由器上Microduino-Cube-S1的按键一次,可以看到协调器上的led亮灭翻转一次。

协调器控制路由器上的led灯

硬件搭建和上文是一样的,只是要把Microduino-Cube-S1叠加在协调器上,把led放在路由器上。

程序

采用Core做核心

  • 协调器:
#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);
  }
}
  • 路由器:
#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);
}
  • 程序说明

协调器给路由器发送数据格式为:+ZBD=XXXX,YYYY,XXXX为你的路由器的短地址,YYYY为你想发送的数据,这样路由器才能接收。因此必须先获取到路由器的短地址,获取方式:

  • 先复位你的协调器,再复位你的路由,这样两个能够连接,路由器自动发送包含自己IEEE地址和短地址的报告数据包到协调器,这时只要把短地址读取然后提取出来就行了。
  • 程序
  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);
  }
  • 你可以在协调器的D6引脚上叠加一个led灯,先复位协调器,再复位路由,这样就能建立连接了。当协调器获取到路由的短地址时该led灯能够亮。这时你就可以通过协调器控制路由器了。

采用Core+做核心程序这里就不提供,你可以参考上文,把mySerial.read()改成Serial1.read()就行了,因为用Core做核心用到的是软串口,用Core+做核心用到的是串口1(Serial1)。