XBP9B-DM的尾缀是DM,顾名思义这是Digimesh协议的模块。Digimesh既可以实现星状网络,也可以实现网状网络,也就是自组网。使用Digi的开发套件,将两个900HP的Digimesh模块插到底板上用USB线缆连接到电脑。打开XCTU,用左上角有搜索按钮来搜索接到电脑的XBee模块,并添加到左侧列表,如下图所示:
添加好模块后,默认XCTU是工作在模块的配置模式下,点击左侧列表上的模块,会读取该模块的配置并在右侧显示出来,您可以在这个界面下更改模块的参数。对于手中有样品的客户,最好是先恢复一下出厂的默认参数,以免因为参数不正确影响结果。点击“Default”按钮加载默认参数,然后点击“Write”写入新参数。
XBee PRO 900HP透传模式通信
要让几个模块组成一个网络,首先要保证网络ID和HP是一样的,另外CM覆盖相同的频点。一般地,只要你是同一型号的模块,采用默认值就行了,只需把网络ID改成你定义的独一无二的网络号。模块会采用64位地址通信,其中SH,SL是模块自身的MAC地址,而DH,DL是透传模式下的目标地址。默认地DH=0,DL=FFFF时是广播地址,因此采用默认参数,网内的模块已经可以互相通信,只不过这是一种广播方式的通信,效率和可靠性相对较低,我们一般需要改成定向单播通信。
我们先来试一下默认的广播通信,在XCTU中,可以点击右上方的终端按钮,把XCTU当成一个串口调试助手来使用。分别点击选中两个模块,并打开串口,用“分离视图”按钮让两个终端显示在桌面的不同区域,在ASCII显示区任意输入字符,可以在另一个终端上看到收到的字符。如下图所示:
接下来我们用定向单播的方法来测一下透传模式,先把分离视图合并,然后切换到配置模式下,在两个模块的DH,DL中分别填入对方的SH,SL,写入模块后,再回到串口终端界面测试结果。可以发现两个模块此时也仍能互通,但此时是向指定地址发送数据而非采用广播模式。
我们也可以在串口终端用AT命令的方式改写参数,在串口终端处输入三个“+”,会弹出一个OK,这时模块已经从工作模式切换到命令模式下,我们可以直接发打AT命令,比如有个NI参数是可以用来给模块命名的,默认是没有赋值的,在弹出OK后,输入ATNINODE1回车来给他赋值NODE1名称。下图是操作结果,分别是设置NI为NODE1,再读一下NI,把结果用WR命令写入flash,用CN命令直接退出命令模式。
注意,如果你不用ATCN来退出命令模式,默认约6秒无操作时,模块也会自动退出命令模式而回到透传的工作模式。如果不用默认值,相关的时间和进入命令模式的特殊字符等都可以在AT指令里自定义。
因为透传模式需要用特殊定义的符号和时延组合来进入命令模式,以修改目标地址等,如果在一个网内,需要对不同的模块进行通信,这样的方式显然效率低下,这时我们可以用API模式来进行通信。API模式是一种用命令帧同模块进行交互的通信方式,它不但可以用来随时和任意模快通信,也可以用来设置远程AT命令,收取反馈包等。下面我们演示一下一个透传的模块和一个API模式的模块的相互通信过程,以加深对API模式的理解。
XBee PRO 900HP API模式通信
API模式通信* API模式具有以下优点,随时与任意模块进行定向通信,随时发送AT指令而不需要进行模式切换,可以识别数据来源,发送结果可以通过反馈包判断,可以远程向其它模块发送AT命令等。可以说,API模式除了可以做透传模式的所有事情外,还有其它更多功能。在一个网络中,你可以全部用API模式,也可以是中心点用API模式而其它节点用透传模式。要开启API模式,只需把AP参数设置为1或2即可。
在配置模式中,将AP设置为1并写入,切换到终端模式下,可以看到原来的终端窗口被命令帧窗口取代了。点击“+”号按钮,用向导添加一个API帧,比如我们要添加向另一个模块发送数据的帧,在帧向导中的Frame Name给这个帧取名为“frame_0_send1234”,然后点击用帧生成工具来生成帧,在接下来的页面中,选择Frame Type为0x10发送请求帧,在64位目标地址中输入另一模块的mac地址,在RF data中输入“1234”,该工具会自动生成以7E开头的完整的发送命令帧。点击“OK”,并把生成结果用“Add Frame”按钮添加到发送列表中。选中该帧,然后点击“Send Selected Frame”发出该帧,就可以在另一个模块的终端窗口中收到1234字符。 同样地,你可以在透传模式的终端窗口中输入任意字符,在API模式的模块中会以0x90接收帧的方式显示收到的数据。选中每个帧,在“Frame details”中会显示详细的帧字段含义。如下图所示:
其它
Digimesh可以实现自组网,也就是只要网络内各点分布合理,任意的点都可以给别的点当路由。但是如果最近的两个点也很远,边上有基站干扰的情况下,为了实现更远的传输距离,还可以用XBP9B-DP固件,这个固件默认没有自组网功能,但因为RF的速率是10K,所以两点间距离更远,但相应的带宽也低些,比较适合多个远距离模块向中心点间的星状网络数据传输。
无人机和一些密集高速通信的考量 许多无人机或是工业通信往往是要用点对多点模式,而不是digimesh。这时为了提高带宽很实时性,可以做如下设置: TO=40 代表点对多点模式
CE=2 节点不做路由,减少CPU和带宽浪费
NH=1 由上,由于不做路由,我们把网络跳点设置为1,一些固件内部像timeout的算法会用到这个参数,减小这个以增大带宽。