AT指令

AT即Attention,AT指令是用来配置蓝牙参数的通信指令。AT指令以AT开头,<CR+LF>回车和换行符结尾。

AT指令表

AT指令 功能 参数 描述
AT+ROLE= 设置蓝牙模式 “?”查询当前模式
“ROLE_CENTRAL”设置为中心
“ROLE_PERIPHERAL”设置为节点 返回当前模式
返回OK
返回OK
AT+NETWORK= 设置网络模式 “?”查询当前网络
“P2P”设置为单点连接
“STAR”设置为星型网络 返回当前网络模式
返回OK
返回OK
AT+MIN_INTERVAL= 设置最小通信间隔 “?”查询当前最小通信间隔
设置范围为10~99999ms 返回当前最小通信间隔
返回OK
AT+MAX_INTERVAL= 设置最大通信间隔 “?”查询当前最大通信间隔
设置范围为10~99999ms 返回当前最大通信间隔
返回OK
AT+BIND= 设置BLE芯片绑定蓝牙地址 “?”查询当前绑定的蓝牙MAC地址
0x0017ea9397e1 设置需绑定的蓝牙MAC地址 返回0x000000000000(默认值)
返回OK
AT+CMODE= 设置BLE芯片连接模式 “?”查询当前BLE芯片的连接模式
“UNIQUE”设置为指定连接
“ANYONE”设置为任意连接 返回当前连接模式
返回OK
返回OK
AT+MAC= 查询BLE芯片的蓝牙地址 “?”查询当前BLE芯片的蓝牙地址 返回当前BLE芯片的蓝牙地址
AT+NAME= 设置模块名称 “?”查询当前模块的名称
“DFBLEduino2” 返回设备名称
返回OK
AT+SETTING= 改变或恢复默认设置 “?”查询当前设备的设置状态
“DEFAULT”恢复初始设定
“DEFPERIPHERAL”恢复成从机模式的初始设定
“DEFCENTRAL”恢复成主机模式的初始设定 返回当前设备的设置状态
返回OK
返回OK
返回OK
AT+USB_MONITOR= 设置是否打开USB监控 “?”查询当前USB监控的状态
“ON”打开USB监控
“OFF”关闭USB监控 返回当前USB监控的状态
返回OK
返回OK
AT+HELP= 获取AT帮助 “ALL”查询所有AT指令的帮助 返回AT指令的说明信息
AT+NET_INF= 查看当前网络内的设备信息 “?”查询当前网络内的设备信息 返回当前网络内的设备信息
AT+VERSION= 查询固件版本 “?”查询当前设备的固件版本 返回当前设备的固件版本
AT+RSSI= 查看当前的RSSI值 “?”查询当前的RSSI值 返回当前的RSSI值(未连接状态下返回-000)
AT+P= 查询和设置管脚P(n, n=0,1,2,3...)高低电平 “?”先将IO口设置为输入模式,再检测IO口的高低电平
“1”将管脚设置为输出模式,且输出高电平
“0”将管脚设置为输出模式,且输出低电平 Eg:AT+P47=? (返回0或1)
Eg:AT+P47=1(返回OK)
Eg:AT+P47=0 (返回OK)
AT+WL= 查询或清除白名单 “?”查询白名单
“NONE”清除白名单 返回白名单设备的MAC地址列表
返回OK
AT+LOWPOWER= 查询和设置当前低功耗模式 “?”查询当前低功耗模式
“ON”开启低功耗功能
“OFF”关闭低功耗功能 返回当前状态
返回OK
返回OK
AT+EXIT 退出AT指令模式 退出AT指令模式 返回OK

AT指令一览表

通过AT指令配置BLE设备

1.打开Arduino IDE

2.在菜单->工具-> 串口中选择正确的设备

3.开启串口监视器(点击窗口的右上角的按键)

4.在两个下拉菜单中选择"No line ending"(①)和115200 baud(②)

5.在输入框中(③)输入"+++",并点击发送键(④)

6.如果收到“Enter AT Mode”(⑤),就证明已经进入AT指令模式.

Fig1: +++进去CMD模式

7.在两个下拉菜单中选择"Both NL & CR"(①)和115200 baud(②)

8.在输入框中(③)输入AT指令,并点击发送键(④)

9.如果BLE配置成功,界面将会返回"OK"(⑤)

Fig1: 输入AT指令,记得更改为Both NL & CR

10.如果收到“ERROR CMD”,可以再发一遍。发送多次后如果还是“ERROR CMD”,你需要检查一下指令发送是否正确.(大写字母)

11.可以使用"AT+EXIT"来退出AT指令模式.

12.可以输入AT+HELP=ALL指令,查询所有的AT指令。 Fig1: 进入AT指令,查询所有的AT指令

蓝牙配对

在使用BLE4.1系列产品时,需要对外围硬件有一定了解,几个关键的按键如下:

使用BLE4.1模块时,可参考BLE4.1最小系统参考电路图: Fig1: BLE4.1模块最小系统原理图

手机蓝牙配对方法

BLE4.1模块和手机端进行连接时,因为是BLE设备,和传统蓝牙设备(如蓝牙耳机)有区别,需要指定特征值以及设备服务ID,通过手机的设备管理器进行BLE的连接,会出现通信问题,因此,需要第三方软件。如DFRobot的《BlunoBasicDemo》,TI的《BLE Device Monitor》等等。这里将以DFRobot的《BlunoBasicDemo》为例。

Fig1: 手机扫描BLE4.1设备

Fig1: 手机连接BLE4.1设备

Fig1: 手机发送数据到BLE4.1设备

Fig1: 串口打印接收到的数据

PC蓝牙配对方法

暂不支持通过自带蓝牙直接连接(与手机类似,PC端同样需要一个软件才能支持自带蓝牙的连接,很遗憾,暂时没资源做相关开发,只能暂时搁置)

点对点通信方法

BLE 4.1点对点连接的过程与BLE 4.0类似,只是多了一条设置点对点连接的命令。总共需要两个设备,一个设置成主机(ROLE_CENTRAL);另一个设置成从机(ROLE_PERIPHERAL)。通过AT+ROLE=ROLE_CENTRALAT+ROLE=ROLE_PERIPHERAL设置,主机设置方法如图: Fig1: 将设备设置成中心模式 然后通过AT+NETWORK=P2P命令将两个BLE 4.1设备设置成点对点连接方式(默认就是点对点连接模式)。 Fig1: 将设备设置成点对点连接模式 设置完成后,重启BLE4.1设备(可以直接断电重启),开始接近连接,当两边的LINK灯亮了,所明已经连接上了。

备注:

  1. 任意两台设备第一次连接时,按住中心设备的BOOT按钮是为了将需要连接的设备录入白名单中。之后再次连接该设备就不需要再按BOOT按钮了
  2. BLE 4.1设备也可以与之前BLE 4.0设备(Bluno 1代)相连接,BLE 4.0只支持点对点连接,所以不用设置P2P命令,但BLE 4.1设备依旧需要设置P2P命令。

蓝牙星形网络链接

星型连接模式与点对点连接模式,在设置上唯一的区别在于,通过AT+NETWORK=STAR。设置完成后,重启设备,用主机(中心设备)连接从机设备(注意连接时需要按住主机的BOOT),当LINK灯亮时,说明已将节点设备录入中心设备的白名单。之后就会自动连接白名单中的设备。

Fig1: 将设备设置成点对点连接模式

warning_yellow.png
注:星型连接模式只针对BLE4.1设备,不包括Bluno一代(BLE4.0)以及其他品牌的BLE设备。

星型连接模式下,蓝牙设备之间的通信采用了特殊的数据包压缩方式,可以通过Arduino库文件,使用Arduino主控进行数据间的交互,点击下arduino库文件,该库文件还需要Arduinojson库文件。设备连接时,先连入中心设备的从机设备ID为1,后面链接进入网络的ID以此叠加。示例代码中,给出了如何获取该设备在网络中的ID,以及收到数据后,数据的来源设备ID。建议在创建星型网络模型时,依次给设备上电。

#include <DFRobot_Bluno2.h>
#include <ArduinoJson.h>

DFRobot_Bluno2 blunoNet;
int blunoID=0;
void setup()
{
  Serial.begin(9600);
  blunoNet.begin(Serial);//获取id
}

void loop()
{
  uint8_t event=blunoNet.getEvent();//queue
  switch(event)
  {
    case EVENT_NETINFO:
    {
      eventNode e = blunoNet.popEvent();

      StaticJsonBuffer<200> jsonBuffer;
      JsonObject& root = jsonBuffer.parseObject((const char *)e.payload);
      if (!root.success()) {
        return;
      }
      int s =  root["r"].size();
      for(int i = 0; i < s; i++){
        if(root["r"][i]["s"].as<int>()){
          blunoID = root["r"][i]["i"].as<int>();
          break;
        }
      break;
      }
    }
    case EVENT_DATA:
    {
      eventNode e = blunoNet.popEvent();
      blunoNet.sendPacket(e.src, blunoID, "hello12345678901234567890",26);
      break;
    }
    default: //no event
    {
      break;
    }
  }
  blunoNet.loop();
  if(Serial.available()){
    char message=Serial.read();
    blunoNet.sendPacket(!blunoID, blunoID, &message,1);
  }
}

蓝牙低功耗

BLE4.1进入低功耗后,功耗<10uA,同时可以进行BLE端的数据交互、设备的广播。通过AT+LOWPOWER=ON指令,使能BLE4.1设备低功耗功能。重启BLE4.1设备,10秒后进入低功耗。需要注意的是,进入低功耗后,如果MCU需要通过UART给BLE4.1设备发送数据,需要先通过WAKEUP唤醒蓝牙设备,否则UART端接收到的数据会出现乱码。 在低功耗模式没有任何操作的情况下,蓝牙会在10s后进入低功耗,这时可以通过中断方法唤醒蓝牙,或者通过蓝牙唤醒ATmega328P:

无线下载

Bluno2的无线下载功能,完全兼容Bluno 1代 (BLE 4.0)。在使用上,只能点对点连接模式下进行,主机(中心设备)对从机设备的Arduino主控进行无线下载。

固件升级

DFRobot新出的BLE4.1设备保留原Bluno的固件升级方式,点击链接下载BLE4.1固件升级工具,BLE4.1固件更新地址点击下载Fig1: Bluno2固件升级工具 升级步骤如下:

常见问题

问: 程序无法下载怎么办?!!!

- 答: 程序无法下载的原因有很多:

  1. 基础检查:供电、板型、COM口等是否正确
  2. 由于使用蓝牙串口通信,可能是蓝牙已占用串口,请断开当前所有的蓝牙连接,重新插拔上电,请重新下载
  3. 可能由于设备串口已被占用,请拔掉所有控制器的外设,重新编译下载
  4. 可是由于Arduino IDE本身发生了崩溃,请断开所有蓝牙(包括手机),关掉所有Arduino IDE软件,拔掉USB线。然后重新打开后再测试。(重启大法能解决60%的设备问题)
  5. 可能由于FireBeetle上328P内的Bootloader丢失,请尝试重烧ATmega32p的Bootloader
  6. 可能由于蓝牙BLE 4.1固件问题,请尝试重烧固件,参考上一�
问: 插上电脑后,设备管理器中显示为Arduino UNO COM x,我该如何选择板型

- 答: 默认COM名称为Arduino UNO,请根据板子不同的bootloader选择对应的板型,例如:FireBeetle BLE4.1,选择Arduino Pro Mini 3.3V@ 8MHz

问: 蓝牙ID号总是随着连接先后变动,无法确定,怎么办

- 答: 目前蓝牙的ID号是根据连接顺序的先后来确定的,依次为ID1、ID2、ID3、ID4,还不支持改动,请按照所需顺序连接,主机(中心设备ID0)

问: 有时候,接收到的蓝牙数据会有乱码等现象?为什么?115200的波特率

- 答: FireBeetle BLE4.1 使用3.3V Pro Mini的bootloader,8MHz晶振,高波特率模式下,可能会有问题,这是3.3V Pro Mini本身Bootlaoder的问题,建议更换低波特率,例如9600bps。注意,请用AT指令去同时配置蓝牙的波特率。

问: 支持HID、ibeacon、树形网络功能吗?

- 答:HID、ibeacon以及树形网络功能正在开发中,敬起期待。

问: 如何给FireBeetle主板供电?

- 答: 点击链接,查看FireBeetle萤火虫系列主板供电问题

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。