====XBee wifi S6B上手指南===
官方文档下载:[[https://www.digi.com/resources/documentation/digidocs/PDFs/90002180.pdf|XBee Wifi文档]]
一、开发工具和调试软件
**开发板**
用户需要XCTU和开发板来熟悉和使用模块。XBee wifi S6B支持几种开发板,请尽量选择最新的TYPE C接口的开发板。
**自己设计的板子**
可以参考开发板,最少的接线只需4根:VCC, GND, DOUT,DIN, 可酌情把指示灯也加上
如果需要休眠,则一般需要DTR (SLEEP_REQ), CTS(醒来的标志),另外,如果贴片设计,最好把固件升级所需的DTR,RTS, 和Commisioning Button, reset,CTS连同串口和电源地等引到板上的调试口,设计成可以用PC独立供电和调试的接口(在开发阶段,量产时这些可以预留但不焊),因为插针的有问题可以拨下用开发板直接调试,但焊上的无法拿下,至少第一版预留个可以和XCTU调试的接口对开发有帮助。
**硬件连接**
用开发板将XBee WiFi模块连接到电脑上,使用XCTU测试。您需要先安装一个XCTU最新版。
打开xctu,用搜索添加的办法把模块加到XCTU的管理列表中,点击模块,在右侧的配置标签页就会列出模块的各种配置参数,如下图所示:
{{:digi:rf-wireless:xbee:pasted:20200821-162609.png}}
二、如何入网
通过不同配置,可以使XBee Wifi模块加入现有的热点,也可以使XBee wifi自身作为一个热点。\\
如果您的模块之前已经配置过,可以用(ATNR)来清楚之前的配置。为了防止之前的测试影响,可以恢复所有参数到出厂状态。通常建议这样:\\
1.在XCTU上点击Default,然后在Write。\\
2. 执行Network Reset,并保存 , 即发ATNR或是在开发板上按四下commissioning Buttion,写入并应用变更。如下:\\
+++OK
ATNR
OK
ATWR
OK
ATCN
经过上面两步操作,你的模块所有参数和配置应该已经恢复到出厂状态。
加入现有无线网络的方法:\\
a)、 通过AT指令让模块加入扫描到的网络\\
在xctu上点击Active Scan,来选择SSID并输入密码进行连接。如果用单片机操作,相当于用ATAS指令。\\
1、在透传模式下\\
在XCTU的配置页面配置通过点Active Scan交互式配置,它和直接执行下面这些指令是等效的\\
+++OK
ATAS
...
ssid等信息
…
或是已经知道现有的热点名称,不需要扫描网络,直接输入相关的参数:
ATPK密码
ATID热点名称
ATEE2
ATWR
ATCN
一个小小的技巧是,如果你在终端模式上把串口打开,在配置模式上的操作就会在终端模式上把所用相关的AT命令显示出来。
{{:digi:rf-wireless:xbee:pasted:20200821-162737.png}}
2.API模式下的操作\\
如果用API模式,将上面这些AT指令用0x08命令帧的形式发送,结果是一样的。如果你已经知道SSID,可以不用执行扫描网络的AT指令。直接用命令帧配置输入密码,热点名称,EE2(WPA2),即可完成入网\\
b). 通过模块配置模式临时生成的AP,打开模块的web页面进行ssid和密码配置。\\
要使模块临时生成一个配置网络和web配置服务,需要:\\
DO的bit1置位 \\
ssid为NULL (可以通过atnr来清除ssid) \\
注意这种方式同时只能允许一个连接,如果有连不上的情况,可以尝试reset网络(ATNR),然后通过浏览器打开192.168.1.10这个默认IP,就可以在网页上配置模块如何接入网络。由于配置页面是英文的,所以非出口产品就不建议用这种方式。配置页面如下:\\
{{:digi:rf-wireless:xbee:pasted:20200821-163635.png}}
入网之后的状态:
AI =0 表示已经连网 \\
MY 为分配到的IP地址 \\
入网指示灯的每秒闪两下,表时入网状态。 \\
*********************************************************************** \\
协议选择:
XBee wifi模块支持不同的协议和模式: \\
IP 参数用于配置使用UDP还是TCP \\
C0和DE分别为本地端口和远程端口 \\
如果对应端口和IP的TCP连接已经存在,模块会优先使用它。如果TCP连接不存在,作为Client时在发送时会尝试创建它。
虽然透传模式也能正常工作,不过为了方便,最好是用API模式来进行通信。
当作为TCP Server时,模块监听在C0参数指定的端口上。Client连上后,您应该检查收到的数据帧中的地址和端口,并在发送帧中作为对方的目标地址和目标端口。
************************************************************************* \\
**配置模块为TCP Server并用TCP/IP调试工具来调试:** \\
请准备一个能用的TCP/IP测试工具,如果没有,可以下载本教程所用的
http://digiwiki.eccee.com/_media/digi/rf-wireless/xbee/hercules_3-2-8.zip
我们让模块和一台笔记本都连上手机的2.4G热点,测试一下相互通信:
将会用到的参数: C0,DE, DL,IP,端口号在模块参数中用16进制模式,一般调试工具是用10进制,所以您需要进行进制转换。比如默认的端口号0x2616实际上是9750。
先测试一下模块在透传模式下的TCP client操作:
当模块和电脑都连上相同的AP时,你如果用网络TCP调试工具直接去连默认端口0x2616(也就是9750),是连不上的,因为默认地,IP=0,模块工作在UDP模式下,所以在模块上需要改为IP=1,才能连上。连上的示意图如下:
{{:digi:rf-wireless:xbee:pasted:20200821-162828.png}}
此时虽然您朝XBee模块发数据,虽然TCP连着,您仍收不到数据,因为模块上并没有正确配置Client的IP和端口。为了能得到client的IP和端口号,需要用API通信模式。
将模块的参数AP改为1,则配置成API模式,如果在干扰严重的应用场景,您还可以用AP=2来使用转义字符的API模式。我们这里以AP=1为例。
通过在XCTU把AP改为1后,XCTU的终端模式变成能解析命令帧的终端(如果您仍是原终端,可以删除并重新添加xbee到xctu上来更新)。此时您可以在XCTU上看到,发来的任何数据,都有源地址,源端口号和目标端口号。除了TCP调试工具自带的keep alive包外,我们可以尝试发几个自己的包,比如12345
{{:digi:rf-wireless:xbee:pasted:20200821-162858.png}}
但为了能让XBee wifi模块也能向TCP client发送数据,就需要正确设置发送帧中的IP和端口号。
我们可以从收到的帧得到client的IP地址和端口,并用XCTU的组帧工具来组测试包。
点击终端右下方的“+”号按钮,新增一个帧,可以是0x08本地AT指令帧,或是发送给TCP的0x20 IPV4数据包。如下图所示,将收到的帧中的源IP地址,源端口作为待发数据帧的目标IP和目标端口,创建一个发送一个test字串的测试帧:
{{:digi:rf-wireless:xbee:pasted:20200821-163002.png}}
选中该帧并发出,在TCP调试工具即可收到该包数据:
{{:digi:rf-wireless:xbee:pasted:20200821-163032.png}}
如果您把正确的client IP和端口号设置在模块上,你会发现,即便把AP改为0使用回透传模式,它也是能通信的。
************************************\\
**一些优化:** \\
除非您想用Digi的Remote Manager为客户进行远程配置,否则可以关掉云连接,将DO的bit0清0即可,即DO=2 \\
事实上,如果你不想启用XBee模块的网页配置模式,可以把配置模式的软AP也关掉,即DO的bit1也清0,这样是DO=0
休眠:如果您需要开启这个功能,可以用SM参数。\\
一些有用的链接: \\
[[http://digiwiki.eccee.com/digi/rf-wireless/xbee/xbee-api-library|XBee的API驱动函数库]]
………