采用API模式进行通信时,许多单片机程序开发者希望能有一套XBee的API模式下的数据包组帧和解析的库函数或者说XBee的驱动。其实Digi的官方和非官方提供了许多这样的源代码来帮助开发者快速掌握使用XBee的API模式。采用何种源代码来辅助开发,则需要开发者针对需求和移植难度选择合适的方法。

目前网络上可以找到的XBee驱动库,包括C语言,Java,Python等,组帧和解帧的工具源码还包括javascipt。

基于C语言的XBee驱动库以及javascipt组帧解帧代码

对于大多数开发者来说,首先是需要一个组帧和解包的函数,这样的函数有两个地方可以获取。

这是一个XBee函数库和例程合集,支持大部分的XBee模块。如果您用Linux系统的话,用这个库就很容易,因为里面的例程编译后可以直接运行。它的缺点是,因为要支持几乎所有的XBee模块,所以略显庞大,数据结构上有多次嵌套,如果您只是用某一种特定的XBee模块,会觉得它包含的功能太多太杂了些。不过因为是完全开源的,所以你可以尝试自己精简或是抽取一部分代码来给自己用。您很容易通过PC上的linux系统来测试这一个XBee库,稍后我们会详细说明。

  • javascript库和网页组帧解析工具xbee_apiframes.htm

Javascript的库可以参考:https://www.npmjs.com/package/xbee-api,您可以找到最新的xbee支持。如果您只是用到802.15.4或简单的zigbee通讯,可以参考早期的一个web页面,通过浏览器打开这个XBee-API模式组帧解包工具。 然后在网页空白处点右键,选择“查看网页源代码”,就可以得到这个工具的网页源码,其中组帧和解包都是在网页中用javascript的方式写的,您可以移植到自己的单片机语言当中。

  • XBee mbed Library

在mbed平台上的库和一些例程https://developer.mbed.org/teams/Digi-International-Inc/code/XBeeLib/

  • XBee-arduino

在arduino平台上,也有一些参考:https://code.google.com/p/xbee-arduino/

  • 基于Java的XBee驱动

Digi官方: https://docs.digi.com/display/XBJLIB/XBee+Java+Library 
https://github.com/digidotcom/XBeeJavaLibrary/releases

  • 另一个第三方的C/C++库

https://github.com/andrewrapp/xbee-api

用哪种方式取决于您的需要和自己的选择。不过无论哪种方式,总比自己从零开发强好多。

下面我们就用第一种方式,在PC机上用linux测试一下XBee驱动的例程。

1. 安装Minicom 如果您已经安装,请略过

sudo apt-get install minicom

2. 连接好XBee底板和模块,启动minicom 注意,如果您是用USB转串口线或USB开发底板,还需改一下串口权限,用

sudo chmod 666 /dev/ttyUSB0
sudo minicom -D /ttyUSB0

在虚拟机的环境中,使用USB转串口板子时,很多时候需要运行minicom打开一下对应的串口后再退出,这样能确保使用开发底板正常运行例程 上面操作打开串口,我们可以退出minicom了。

3. 下载xbee_ansic_library
使用git到https://github.com/digidotcom/xbee_ansic_library中下载到linux系统中,并解压到/xbeedriver/下
这个C语言的API模式驱动库在src和include两个目录,其中src还包含不同硬件平台相关的目录,比如在linux下,库所需的目录就是

\posix
\wpan
\xbee
\zigbee

如果是单片机平台,可以参考posix或其它单片机的目录,相关的串口和时间函数的定义,需放在硬件平台的目录下。\wpan,\xbee,\zigbee是真正的库文件上,与硬件平台无关。
例程在sample目录下,其中以linux为例,在\sample\posix下有相关的Makefile,可以直接make生成所有的可执行例程。 例程的源文件在\sample\common下。而\sample\posix下的源文件主要是解析可执行程序的命令行参数。
比如atinter这个例程,它的执行方式是

#./atinter /dev/ttyUSB0 115200

上面例程运行时,会尝试打开对应串口,读取XBee模块信息,然后等待输入AT命令,对于键盘上输入的AT命令,它会转换成API模式同串口上的XBee模块通信,如下图所示:

transparent_client是组网后,网内通信的一个测试例程,该例程运时,会扫描并列出网络内的节点列表,您可以选择一个目标节点进行通信(target <节点NI>),然后输入的数据就以透传的方式发给目标节点,直到收到quit退出。

它的运行结果如下图所示

其它