Digi最新的XBee3系列模块都集成有低功耗蓝牙(BLE),这也意味着除了XBee本身的无线协议外,蓝牙将会是一个额外的无线通道。这里的蓝牙不仅仅可以用来配置模块,它本身也可以作为一个数据通道,实现和手机,平板的蓝牙相互交换数据。同样地,手机或平板可以将相关指令通过蓝牙发给XBee模块,通过模块上的MicroPython程序进行处理,或者是模块收到蓝牙传来的命令后,通过串口交由单片机去执行相应的处理等。

XBee3蓝牙的配置

XBee3模块中虽然集成有蓝牙功能,但默认蓝牙并没开启,可以通过AT命令或是XCTU工具软件来打开蓝牙功能。相关AT指令如下:

  • BT蓝牙启用开关

BT=1时启用蓝牙,如果在XCTU上操作,会提示您设置配对密码,出于安全考虑,蓝牙并不明文存储和传递密码,而是采用特定的方式生成随机盐值(Salt),并据此生成对应秘钥(verifier),参考SRP协议中的说明。

  • $S ,$V, $W, $X, $Y 蓝牙密码相关参数

在蓝牙的SRP协议中,它并不直接存储明文密码,而是根据“盐”值生成的秘钥。这里的盐值实际上相当于一个随机数,它对应有唯一的密钥。在XCTU操作开启蓝牙时,可通过Configure按钮来输入明文密码。如果希望在单片机上操作蓝启用蓝牙,就要用到上面这些参数。$S是指Salt,其余四个组成Verifier。在单片机上执行模块蓝牙初始化时,可在开启BT后写入这些参数。

如果您在连有XBee模块开发板的电脑上,在Console窗口中先打开串口,然后执行蓝牙的开启和配置密码的过程,就能找到上面所说的XCTU是如何开启蓝牙和写入密钥的相关AT指令。如果嵌入产品的模块不先配置好密码,也可以参考XCTU上设置密码后的盐值和密钥来通过单片机程序统一设置蓝牙密码,

XBee3蓝牙相关的API帧

和XBee的802.15.4/ZigBee/DigiMesh的无线数据收发帧不同,蓝牙有自己的API帧。在蓝牙协议中,通讯需要在安全的SRP连接中进行,Digi提供XBee BLE API,作为一个GATT服务器可以接受来自客户端(手机,平板等)的连接请求。这些客户端设备需要使用SRP来认证和开启蓝牙安全传输,相关的BLE API帧(0x2C,0xAC)是在蓝牙协议中使用。在手机或平板端,Digi提供了XBee Mobile SDK大大简化通讯过程的开发,请参考本文后面章节。

对于XBee模块本身,数据要从串口出来,相关的API帧只有0x2D和0xAD。这两个帧即用户数据转播的请求帧和接收帧。也就是当要把其它接口的数据转到蓝牙通道时,用0x2D发送请求帧。通过蓝牙收到该用户数据转播帧的一方,则在串口(或其它接口)中输出对应的0xAD接收帧。

请参考官网的详细说明:

0x2D 用户数据转发请求帧
0xAD 用户数据转发接收帧

测试方法和例程

使用XBee Mobile,提取码mwus中的 userdata relay console 待续…

手机或平板APP开发

XBee mobile SDK :

xbee-csharp库
xbee-android库