XBee zigbee 使用指南--- Zigbee无线数据传输示例

http://www.bitconn.com/form_1/ 登记后,购买XBee模块,送USB评估底板及相关中文资料,或者免费申请借用评估套件)

目录

无线数据传输

传输方式

广播传输

单播传输

地址表

示例:传输数据


无线数据传输

本节说明数据传输,并引导您通过一个示例来说明其工作方式。

传输方式

XBee模块可以与多个设备或仅与一个设备通信:

  • 广播传输被发送到网络中的许多或所有模块。
  • 单播传输将无线数据从一个XBee路由到一个目标模块。

广播传输

广播是指将相同的数据传输到网络上的所有节点。这些传输在整个网络中传播,以便所有可能的节点都接收到传输。

为此,协调器和所有接收广播传输的路由器将数据重新传输三遍。当路由器或协调器将广播传输传递给终端设备子节点时,它仅在终端设备唤醒并轮询父节点以获取新数据后立即发送一次传输。

您可以使用64位广播地址或16位广播地址处理广播传输:

  • 如果使用64位广播地址(000000000000FFFF),则将16位地址设置为未知地址(FFFE)。
  • 如果使用16位广播地址(FFFF)形式,请将64位地址设置为未知地址(FFFFFFFFFFFFFFFF)。

注意 由于XBee模块重新传输网络中每个设备都会广播传输,因此应谨慎使用广播消息。

单播传输

单播传输由将消息发送到由唯一的地址所标识的网络上的单个节点的。目标XBee可以是发送方的直接邻居,也可以是几跳远。

可以使用64位地址或16位地址(网络地址)寻址无线数据:

  • 如果使用64位地址,请将网络地址设置为未知地址(FFFE)。
  • 如果使用16位地址,则必须将64位地址设置为未知地址(FFFFFFFFFFFFFFFF)。
  • 16位地址0000和64位地址0000000000000000保留给协调器。

Zigbee网络层在每个跃点上使用目标的16位地址来路由数据。

如果您使用无效的16位地址作为目标地址,而64位地址未知(FFFFFFFFFFFFFFFF),则“传输状态(0x8B)”消息将显示传递状态代码为0x21(网络ACK失败)和发现状态为0x00(无发现开销)。

如果您使用不存在的64位地址作为目标地址,并且16位地址未知(FFFE),则设备将尝试地址发现,并且“传输状态(0x8B)”消息将显示传递状态码0x24(地址未找到)和发现状态代码0x01(尝试地址发现)。

地址表

XBee设备使用目标网络地址以单播传输方式发送数据。由于只能使用目标的64位地址发送数据,因此所有Zigbee设备都维护一个地址表,以将64位地址映射到相应的16位地址。XBee模块最多可以存储10个地址表条目。

如果目标的16位地址未知:

  1. Zigbee堆栈使用其地址表来查找具有匹配的64位地址的条目,该地址确定目标的16位地址。
  2. 如果未找到,XBee会在发送数据之前自动启动发现过程以找到该地址:
  3. 首先,发送设备广播地址发现消息。该消息包括正在请求其16位地址的远程XBee模块的64位地址。
  4. 接收此传输的所有节点都将自己的64位地址与消息中包含的地址进行比较。
  5. 如果地址匹配,则远程XBee将响应发送回请求者模块。该响应包括远程设备的16位地址。
  6. 当请求模块接收到具有目的地的16位地址的发现响应时,它将发送数据。

示例:传输数据

在该工具包的第一个示例中,您使用透明模式将数据传输到其他节点。透明模式下的XBee模块仅在接收信息时就传递信息。此模式是XBees入门的简单方法,但有一些限制:

  • 您必须在发送器模块中配置接收器的地址。如果要将数据传输到其他XBees,则必须重新配置发送者。
  • 接收方模块不知道谁发送了消息。

您可以使用API​​模式来避免这些限制,并在数据传输中具有更大的灵活性和可靠性。在API模式下,您仍将消息发送到模块。但是,您还发送了其他必要的信息,例如目标地址或校验和值,这些信息全部包装在具有定义为API帧的结构的数据包中。这意味着在API模式下,您无需在模块中设置目标地址(DH + DL)。类似地,接收器模块接收的信息比消息本身多,例如源地址,信号强度或校验和值。

在此示例中,您将使用Java编程语言创建一个应用程序,以在网络节点之间传输数据。为了简化该应用程序,您将使用XBee Java库,这是一个易于使用的API,允许您与XBee模块进行交互。

完成所有设置后,将消息发送到特定设备(单播)或网络中的所有设备(广播)。

步骤1:要求

对于此设置,您需要以下硬件和软件。

硬件

  • 三个XBee Zigbee网格套件模块
  • 三个XBee Grove开发板
  • 三根微型USB电缆
  • 一台电脑

软件

步骤2:连接组件

首先,连接组件并启动XCTU。

  1. 将XBee模块插入XBee Grove开发板,然后使用提供的Micro USB电缆将它们连接到计算机。
  2. 将模块连接到计算机后,打开XCTU。
  3. 确保您处于“ 配置”工作模式

步骤3:配置Xbee模块

配置三个XBee模块中的每个模块以API模式工作,并为每个模块分配不同的角色。如前所述,在这种情况下,您无需配置模块的目标地址(DH + DL)。

  1. 使用“ 无线电配置”部分顶部的“ Load default firmware settings” 按钮,还原所有XBees的默认设置
  2. 使用XCTU配置以下参数:

    参数

    XBee A

    XBee B

    XBee C

    影响

    ID

    2015

    2015

    2015

    定义无线电将连接的网络。对于网络上的所有无线电,此参数必须相同。

    JV

    启用[1]

    启用[1]

    验证协调器是否在同一频道上存在,以加入网络或在找不到频道时退出。

    CE

    启用[1]

    将设备设置为协调器。

    NI

    COORD ROUTER

    END_DEVICE

    定义节点标识符,这是模块的人性化名称。

     

    NI的默认值为空白。更改值时,请确保删除空格。

    AP

    已启用API [1]

    已启用API [1]

    已启用API [1]

    启用API模式。

    SP

    1F4

    1F4

    1F4

    定义睡眠时间。1F4(十六进制)= 500(十进制)x 10毫秒= 5秒。

    SM

    Cyclic sleep [4]

    在终端设备中启用循环睡眠模式。

    SO

    2

    在整个期间保持模块处于唤醒状态。

  3. 使用“无线电配置”部分顶部的“写入单选设置”按钮写入所有XBees的设置。

步骤4:创建一个Java项目

使用具有以下项目名称的Eclipse或NetBeans创建一个空的Java项目:XBeeTransmitDataCoord

选项1:Eclipse

  1. 选择文件>新建,然后单击Java项目
  2. 出现“ 新建Java项目”窗口。输入项目名称。
  3. 单击下一步

要么

选项2:NetBeans

  1. 选择文件>新建项目...。
  2. 出现“新建项目”窗口。在类别框架中,从右侧面板中选择Java> Java应用程序,然后单击下一步
  3. 输入项目名称和项目位置。清除“创建主类”选项;您将在以后创建它。
  4. 单击完成以创建项目。窗口关闭,项目显示在IDE左侧的“项目”视图列表中。

步骤5:将库链接到项目

本主题描述如何将XBee Java库RXTX库(包括本机)和logger库链接到项目。

  1. 下载XBJL_X.YZzip库。
  2. 解压缩XBJL_X.YZzip库。
  3. 使用Eclipse或NetBeans链接库:

选项1:Eclipse

  1. 转到“新建Java项目”窗口的“ 库”选项卡。
  2. 单击添加外部JAR。
  3. 在“ JAR选择”窗口中,搜索解压缩XBee Java库的文件夹,然后打开xbee-java-library-XYZjar文件。
  4. 再次单击Add External JARs...。
  5. 转到extra-libs文件夹,然后选择以下文件:
    • rxtx-2.2.jar

    • slf4j-api-xyzjar

    • slf4j-nop-xyzjar

  6. 展开“ 库”选项卡列表的rxtx-2.2.jar文件,选择“本机库位置”,然后单击“ 编辑…”。

  7. 单击“ 外部文件夹...”,导航到解压缩XBee Java库文件(XBJL_X.YZzip)的目录的extra-libs \ native \ Windows \ win32文件夹。

Windows \ win32替换为与您的操作系统和所安装的Java虚拟机(32或64位)相匹配的目录。如果您不知道计算机中安装了哪个Java虚拟机,请打开终端或命令提示符并执行:

java -version
单击“ 确定”将路径添加到本机库。
  • 点击完成

要么

选项2:NetBeans

  1. 在“ 项目”视图中,右键单击您的项目,然后转到“ 属性”
  2. 在左侧的类别列表中,转到,然后单击添加JAR /文件夹
  3. 在“ 添加JAR /文件夹”窗口中,搜索在其中解压缩XBee Java库的文件夹,然后打开xbjlib-XYXja r文件。
  4. 再次单击添加JAR /文件夹
  5. 转到extra-libs文件夹,然后选择以下文件:
    • rxtx-2.2.jar
    • slf4j-api- xyz .jar
    • slf4j-nop- xyz .jar
  6. 在“ 属性”对话框的左侧树中选择“运行”
  7. 在“ 虚拟机选项”字段中,添加以下选项:
    -Djava.library.path = <路径XBee_Java_Library_is_unzipped> \ extra-libs \ native \ Windows \ win32
    哪里:
    • <path_where_the_XBee_Java_Library_is_unzipped>是您解压缩XBee Java库文件(XBJL_X.YZzip)的目录的绝对路径。
    • Windows \ win32是与您的操作系统和所安装的Java虚拟机(32或64位)匹配的目录。如果您不知道计算机中安装了哪个Java虚拟机,请打开终端或命令提示符并执行:
      java -version
  8. 单击确定

步骤6:将源代码添加到项目中

请按照以下步骤将源添加到项目。

  1. 打开以下源代码,全选,然后将其复制到剪贴板: MainApp
  2. 使用Eclipse或NetBeans添加Java源文件。

选项1:Eclipse

  1. 在“ 程序包资源管理器”视图中,选择项目并单击鼠标右键。

  2. 从上下文菜单中,选择“ 新建”>“类”。将打开“ 新建Java类”向导。

  3. 键入类的名称MainApp

  4. 点击完成

  5. MainApp.java文件在编辑器中自动打开。将其内容替换为您在上一步中复制的源代码。

  6. 粘贴的代码顶部的一行用红色下划线标出。单击该行;出现一个弹出窗口。选择第一个选项(将“ MainApp.java”移动到包“ ...”中)以解决该错误。

选项2:NetBeans

  1. 在“ 项目”视图中,选择项目,然后单击鼠标右键。

  2. 从上下文菜单中,选择“ 新建”>“ Java类... ”。将打开“新建Java类”向导。

  3. 修改类名称MainApp

  4. 点击完成

  5. MainApp.java文件在编辑器会自动打开。将其内容替换为您在上一步中复制的源代码。

  6. 粘贴的代码顶部的一行用红色下划线标出。单击该行旁边的灯泡;出现一个弹出窗口。选择第一个选项(将类移动到正确的文件夹)以解决该错误。

步骤7:设置端口名称并启动应用程序

对于此步骤,设置所有三个XBee模块的端口名称,为其他XBee模块复制项目,然后启动应用程序。

  1. 在Java源代码中更改端口名称,以匹配COORD连接到的端口。
    // TODO: Replace with the port where your module is connected
    private static final String PORT = "COM1";
    // TODO: Replace with the baud rate of your module.
    private static final int BAUD_RATE = 9600
  2. 复制另一个XBee模块的Java项目,并将其重命名为XBeeTransmitDataRouter
  3. 在第二个项目的源代码中更改端口名称,以匹配ROUTER连接到的端口。
  4. 复制最后一个XBee模块的Java项目,并将其重命名为XBeeTransmitDataEndDevice
  5. 在第三个项目的源代码中更改端口名称,以匹配END_DEVICE连接的端口。
  6. 在启动这三个应用程序中的每一个之前,请按已连接END_DEVICE的开发板的“ 调试”按钮以将其唤醒。要识别END_DEVICE模块,请寻找On / Sleep LED亮5秒,熄灭5秒的板。

  7. 启动这三个应用程序。

步骤8:通过网络传输数据

请按照以下步骤使用单播或广播方法将数据传输到网络中的其他XBee模块。

  1. 使用以下模式将消息发送到特定的XBee模块(单播)或所有消息(广播):
    • 单播NODE_IDENTIFIER:消息

      例如,要将消息“ Hi XBee”发送到END_DEVICE:

      END_DEVICE: Hi XBee
    • 广播ALL:消息

      例如,将消息“ Hi XBee nodes”发送到网络的所有节点:

      ALL: Hi XBee nodes

步骤9:无线数据传输部分摘要

在本节中,您学习了以下内容:

  • 在API模式下发送传输的XBee不仅传输原始消息,而且还传输一些打包在称为API框架中的额外信息,例如源XBee模块的地址。
  • 在API模式下,您不需要设置接收器设备的DH和DL参数,因为目标地址已经包含在API帧中。
  • API模式可让您轻松处理多个目标,而无需在发送数据之前重新配置发送方模块以建立新的目标模块。
  • 您可以使用XBee Java库来简化和改进API操作模式的使用。
  • 根据将接收消息的设备的数量,有两种传输类型:
    • 单播将消息发送到由唯一地址标识的一个节点。
    • 广播将相同的消息发送到网络上所有可能的节点。

步骤10:利用无线数据传输做更多的事情

如果您准备更广泛地处理数据传输,请尝试以下操作:

  • 通过添加更多XBee Zigbee Mesh Kit模块来扩展网络,以便您可以与其他设备聊天。

    注意:要找到获取更多模块的最佳渠道,请参阅在哪里购买XBee设备

  • 使用Arduino或Raspberry Pi代替计算机来无线传输数据。
发布了48 篇原创文章 · 获赞 6 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zigbeecomm/article/details/104167141