FSC-BT630 指令手册

[English]

介绍

描述

本设计指南适用于工程师开发 FSC-BT630 系列蓝牙模组

模组默认配置

Name

Feasycom

Service UUID

FFF0

Write UUID

FFF2

Notify UUID

FFF1

UART Baudrate

115200/8/N/1

硬件说明

引脚图

_images/BT630_pin_map.png

引脚描述

Pin

Pin Name

Type

Pin Descriptions

1

UART_TX

O

串口数据脚

2

UART_RX

I

串口数据脚

6

RESET

I

低电平复位

7

VDD

Power

3.3V供电,建议使用LDO供电

8

GND

GND

GND

9

SWCLK

I/O

烧录脚

10

SWDIO

I/O

烧录脚

17

LED

O

蓝牙未连接输出方波,蓝牙连接输出高电平

18

STATUS

O

蓝牙未连接输出低电平,蓝牙连接输出高电平

20

EXT_ANT

ANT

改变天线附近的0欧电阻,可以外接蓝牙天线

硬件设计说明

  • 模组只需要连接VDD/GND/STATUS/UART_RX/UART_TX即可使用

  • 如果MCU需要获取蓝牙模组的连接状态,需要接STATUS引脚

  • 画完原理图后请发给飞易通进行审核,避免蓝牙距离达不到最佳效果

  • 模组支持通过串口唤醒

  • VDD/GND/RESET/SWCLK/SWDIO 是烧录口,可以预留测试点

功能说明

GPIO指示

LED引脚 PIN 17

状态

描述

2Hz方波

蓝牙未连接

高电平

蓝牙连接

连接状态引脚 PIN 18

状态

描述

低电平

蓝牙未连接

高电平

蓝牙连接

工作模式

指令模式

蓝牙未连接,串口收到的数据按照AT指令进行解析;蓝牙连接后串口收到的数据仍
然按照AT指令进行解析。需要发送数据到远端的时候,发送AT+LESEND指令。

GATT透传服务

类型

UUID

权限

描述

Service

0xFFF0

透传服务

Write

0xFFF2

Write,Write Without Response

APP发给模组

Notify

0xFFF1

Notify

模组发给APP

低功耗

模组支持1种低功耗模式,串口唤醒模式。

模式

指令配置

硬件连接

休眠方法

描述

串口唤醒
AT+LPM=1
串口超过5s没有数据通信,自动进入休眠
休眠后串口收到第一帧数据会退出休眠
唤醒的第一帧数据会丢失 | 逻辑简单,节省IO

AT指令说明

规范说明

适用于整个文档

  • {} : 包括与{…}中的内容为可选项

  • << : 主机发给模组的 COMMAND

  • >> : 模组回复主机的 RESPONSE

指令

指令是主机主动发给模组的控制命令,模组在收到指令后需要回复 <CR><LF>OK<CR><LF> 作为应答。

指令格式

AT+Command{=Param1{,Param2{,Param3…}}}<CR><LF>
  • 所有的指令使用 AT 开头,使用 <CR><LF> 结尾

  • <CR> 代表回车符,对应 HEX 为 0x0D

  • <LF> 代表换行符,对应 HEX 为 0x0A

  • 若指令包含参数,参数应使用 = 分隔

  • 若指令包含多项参数,参数应使用 , 分隔

  • 若指令有响应返回,响应使用 <CR><LF> 开始,使用 <CR><LF> 结束

  • 模组应当总是返回指令执行的结果 (成功返回 OK,失败时返回 ERROR)

Example:
读取模块蓝牙名称
<< AT+VER
>> +VER=5.2.0,FSC-BT630

写入不支持的波特率
<< AT+BAUD=0
>> ERROR

通知

通知是模组主动发给主机的数据。一般用来指示状态的变化或收到的数据。

通知格式

<CR><LF>+Indication{=Param1{,Param2{,Param3…}}}<CR><LF>
  • 所有的通知使用<CR><LF>开始, 使用<CR><LF>结束

  • 若通知包含参数, 参数应位于 “=” 后面

  • 若通知包含多项参数, 参数应使用 “,” 分割

Example:
指令模式下收到APP发来的数据
>> +DATA=0,10,1234567890

指令列表

AT - 串口通信测试

Command

AT

Response

OK

Description

当上电或更改波特率时,测试主机和模块之间的UART通讯

Example:
<< AT
>> OK

AT+VER - 读取固件版本

Command

AT+VER

Response

+VER=Param

Param

固件版本

Description

读取版本号

Example:
<< AT+VER
>> +VER=5.2.0,FSC-BT630
>> OK

AT+ADDR - 读取蓝牙MAC地址

Command

AT+ADDR

Response

+ADDR=Param

Param

模块的蓝牙MAC地址(12 Bytes ASCII)

Description

读取蓝牙MAC地址

Example:
<< AT+ADDR
>> +ADDR=DC0D30010203
>> OK

AT+NAME - 读/写蓝牙名称

Command

AT+NAME{=Param1{,Param2}}

Param1

蓝牙名称(1~25 Bytes ASCII)

Param2

使能MAC地址后缀(0/1,default:0)
0: 关闭后缀
1: 开启后缀“-XXXX”(MAC地址后2Byte)

Response

+NAME=Param

Param

蓝牙名称

Description

如果存在参数则设置蓝牙名称,否则只是读取

Example:
读取蓝牙名称
<< AT+NAME
>> +NAME=Feasycom
>> OK

设置蓝牙名称
<< AT+NAME=ABC
>> OK

设置蓝牙名称为“ABC”并自动在广播包中添加地址后缀
<< AT+NAME=ABC,1
>> OK

AT+BAUD - 读/写串口波特率

Command

AT+BAUD{=Param}

Param

波特率(1200/2400/4800/9600/19200/38400/57600/115200/
230400/460800/921600, default:115200)

Response

+BAUD=Param

Param

波特率

Description

模块将在接收到这条指令后,马上切换波特率

Example:
读取波特率
<< AT+BAUD
>> +BAUD=115200
>> OK

设置波特率
<< AT+BAUD=9600
>> OK

AT+TXPOWER - 读/写发射功率

Command

AT+TXPOWER{=Param}

Param

发射功率 (0~9, 默认是0)
0: 0dbm
1: -40dbm
2: -20dbm
3: -16dbm
4: -12dbm
5: -8dbm
6: -4dbm
7: 0dbm
8: 3dbm
9: 4dbm

Response

+TXPOWER=Param

Param

发射功率

Description

修改发射功率

Example:
读取发射功率
<< AT+TXPOWER
>> +TXPOWER=7
>> OK

设置发射功率4dbm
<< AT+TXPOWER=9
>> OK

AT+LPM - 开启/关闭低功耗模式

Command

AT+LPM{=Param}

Param

低功耗模式 (0/1, default: 0)
0: 关闭
1: 串口唤醒模式

Response

+LPM=Param

Param

低功耗模式

Description

查询修改低功耗模式

Example:
读取低功耗模式
<< AT+LPM
>> +LPM=0
>> OK

设置串口唤醒模式
<< AT+LPM=1
>> OK

AT+ADVIN - 读/写广播间隔

Command

AT+ADVIN{=Param}

Param

广播间隔 (20~10000 ms, 默认: 200ms)

Response

+ADVIN=Param

Param

广播间隔

Description

查询修改广播间隔

Example:
读取广播间隔
<< AT+ADVIN
>> +ADVIN=152
>> OK

设置广播间隔100ms
<< AT+ADVIN=100
>> OK

AT+LEDISC - 断开指定连接

Command

AT+LEDISC{=Param}

Param

连接序号(默认断开全部连接)

Response

OK

Description

断开蓝牙连接

Example:
断开全部设备
<< AT+LEDISC
>> OK

AT+ADVDATA - 读/写BLE广播0xFF的数据

Command

AT+ADVDATA{=Param}

Param

tag为0xFF的广播数据

Response

+ADVDATA=Param

Param

tag为0xFF的广播数据

Description

查询修改蓝牙广播数据

Example:
查询tag 0xFF的广播数据内容,\x为十六进制数据
<< AT+ADVDATA
>> +ADVDATA=\x03\x01\x02
>> OK

查询tag 0xFF的广播数据内容,\x为十六进制数据
<< AT+ADVDATA=\x03\x01\x02
>> OK

AT+IBEACON - 读/写BLE广播0xFF的开关

Command

AT+IBEACON{=Param}

Param

模式(0~1,默认1)
0: 关闭BLE广播0xFF
1: 开启BLE广播0xFF

Response

+IBEACON=Param

Description

开启后,BLE会切换两种广播数据

Example:
开启BLE广播0xFF
<< AT+IBEACON=1
>> OK

关闭BLE广播0xFF
<< AT+IBEACON=0
>> OK

AT+LESEND - 发送数据到远端设备

Command

AT+LESEND=Param1,Param2,Param3

Param1

数据通道

Param2

数据长度

Param3

数据

Response

OK

Description

连索引信息使用 AT+CHINFO 指令查询
Example:
向连接的一号设备发送数据
<< AT+LESEND=1,4,2022
>> OK

AT+REBOOT - 软件复位

Command

AT+REBOOT

Response

OK

Description

模块将复位

Example:
<< AT+REBOOT
>> OK

AT+RESTORE - 恢复出厂设置

Command

AT+RESTORE

Response

OK

Description

模块将恢复为出厂设置

Example:
<< AT+RESTORE
>> OK

AT+PIOCFG - 读/写引脚功能开关

Command

AT+PIOCFG{=Param1{,Param2}}

Param1

工作模式(0~1,默认0).PIN5低电平透传模式,高电平指令模式.
0: 关闭工作模式引脚控制功能
1: 开启工作模式引脚控制功能

Param2

断开连接(0~1,默认1).PIN14下降沿断开连接.
0: 关闭断开连接引脚功能
1: 开启断开连接引脚功能

Response

+PIOCFG=Param1,Param2

Description

修改引脚功能开关

Example:
开启引脚控制工作模式
<< AT+PIOCFG=1
>> OK

关闭两个引脚的功能
<< AT+PIOCFG=0,0
>> OK

AT+REGUUID - 向协议栈注册128bit UUID

Command

AT+REGUUID=Param

Param2

UUID(32个字节的hex字符串)

Response

OK

Description

128bit UUID需要注册后才能识别,在连接设备时可能使用
Example:
注册128bit UUID:00001100d10211e19b2300025b00a5a5
<< AT+REGUUID=00001100d10211e19b2300025b00a5a5
>> OK

AT+LECCONN - 向指定地址发起连接

Command

AT+LECCONN{=Param1{,Param2{,Param3{,Param4}}}}

Param1

12字节设备地址+1字节地址类型

Param2

通信服务UUID

Param3

通信写权限特征值UUID

Param4

通信通知权限特征值UUID

Response

OK

Description

向指定设备发起连接,参数由12字节(设备地址)和1字节
(地址类型)组成,一般情况下地址类型为“0”或者“1”。地址
类型获取方式:
使用 AT+SCAN 扫描返回的第二个参数,例:
+SCAN=0,0,DC0D30001ED4,-65,10,FSC-BT946
连接命令:
AT+LECCONN=DC0D30001ED40
Example:
连接指定设备,0为地址类型
<< AT+LECCONN=DC0D3000039E0
>> OK

向指定地址发起连接,使用FFF0,FFF2,FFF1进行通信
<< AT+LECCONN=DC0D3000039E0,FFF0,FFF2,FFF1
>> OK

AT+SCAN - 搜索附近的设备

Command

AT+SCAN{=Param}

Param

扫描方式(0~2)
0: 停止扫描
1: 扫描附近的设备,过滤重复地址,最多可以搜到10个设备
2: 扫描BLE广播包,输出原始广播数据包

Response

+SCAN=Param1,Param2,Param3,Param4,Param5,Param6 (AT+SCAN=1格式)
+SCAN=Param21,Param22,Param23,Param24,Param25,Param62 (AT+SCAN=2格式)

Param1

列表序号

Param2

地址类型(1字节)

Param3

地址(12字节)

Param4

RSSI

Param5

设备名长度

Param6

设备名

Param21

地址类型(1字节)

Param22

地址(12字节)

Param23

RSSI

Param24

广播类型

Param25

广播数据长度

Param26

广播数据包(hex字符串)

Description

AT+SCAN=1 常用于连接前的搜索
AT+SCAN=2 常用于作为蓝牙网关使用,搜索周围的Beacon设备
Example:
搜索设备
<< AT+SCAN=1
>> +SCAN={
>> +SCAN=0,1,70CFC9A98840,-43,24,LE-Bose QuietControl 30
>> +SCAN=1,1,DC0D30001ED4,-65,10,FSC-BT946
>> +SCAN=}

嗅探 BLE 广播,并返回数据
<< AT+SCAN=2
>> +SCAN{
>> +SCAN=0,DC0D3000129D,-48,0,40,020106030328180C1628180054D621E1DD167776
>> +SCAN}

AT+CHINFO - 读取连接对端信息

Command

AT+CHINFO=Param

Param

0:停止上报;1:上报一次;2:定时一秒上报

Response

+CHINFO=Param1,Param2,Param3,Param4,Param5,Param6,Param7,Param8

Param1

连接索引

Param2

连接状态 (1:未连接,2:连接中,3:已连接)

Param3

连接角色 (0:从机,1:主机)

Param4

对端地址

Param5

信号强度

Param6

连接间隔

Param7

从机延时

Param8

连接超时

Description

查询连接信息

Example:
查询连接信息
<< AT+CHINFO
>> +CHINFO{
>> +CHINFO=0,3,1,50AE7CE23D14,-54,48,1,400
>> +CHINFO=1,1,0,000000000000,0,0,0,0
>> +CHINFO=2,1,0,000000000000,0,0,0,0
>> +CHINFO=3,1,0,000000000000,0,0,0,0
>> +CHINFO=4,1,0,000000000000,0,0,0,0
>> +CHINFO=5,1,0,000000000000,0,0,0,0
>> +CHINFO}
>> OK

AT+UUIDCFG - 写透传使用的UUID

Command

AT+UUIDCFG=Param1,Param2, Param3

Param1

SERVER的UUID,支持16位和128位(hex字符串)

Param2

write的UUID,支持16位和128位(hex字符串)

Param3

notify的UUID,支持16位和128位(hex字符串)

Response

OK

Description

查询连接信息

Example:
<< AT+UUIDCFG=FFF0,FFF2,FFF1
>> OK

<< AT+UUIDCFG=6e400001b5a3f393e0a9e50e24dcca9e,6e400003b5a3f393e0a9e50e24dcca9e,6e400002b5a3f393e0a9e50e24dcca9e
>> OK

通知列表

+SCAN - AT+SCAN=1扫描结果上报

Indication

+SCAN=Param1,Param2,Param3,Param4,Param5,Param6

Param1

列表序号

Param2

地址类型(1字节)

Param3

地址(12字节)

Param4

RSSI

Param5

设备名长度

Param6

设备名

Description

模组收到AT+SCAN=1后,会持续扫描,发现设备后通过+SCAN进行上报

Example:
搜索设备
<< AT+SCAN=1
>> +SCAN={
>> +SCAN=0,1,70CFC9A98840,-43,24,LE-Bose QuietControl 30
>> +SCAN=1,1,DC0D30001ED4,-65,10,FSC-BT946
>> +SCAN=}

+SCAN - AT+SCAN=2扫描结果上报

Indication

+SCAN=Param1,Param2,Param3,Param4,Param5,Param6

Param1

地址类型(1字节)

Param2

地址(12字节)

Param3

RSSI

Param4

广播类型

Param5

广播数据长度

Param6

广播数据包(hex字符串)

Description

模组收到AT+SCAN=2后,会持续扫描,发现设备后通过+ADVDATA进行上报

Example:
嗅探 BLE 广播,并返回原始数据(乱码部分为原始数据,使用 hex 格式)
<< AT+SCAN=2
>> +SCAN{
>> +SCAN=0,DC0D3000129D,-48,0,40,020106030328180C1628180054D621E1DD167776
>> +SCAN}

+GATTSTAT - 连接状态上报

Indication

+GATTSTAT=Param1,Param2

Param1

连接通道

Param2

连接状态 (1~3)
1: 未连接
2: 连接中
3: 已连接

Description

指令模式下,模组的连接状态发生变化,通过+GATTSTAT主动上报

Example:
连接成功
>> +GATTSTAT=0,3

+DATA - 收到蓝牙数据上报

Indication

+DATA=Param1,Param2,Param3

Param1

连接索引

Param2

数据包长度

Param2

数据包内容

Example:
收到数据1234567890
>> +DATA=0,10,1234567890

应用场景

查询/修改模组默认参数

模组在蓝牙没有连接的状态下,会将串口数据按照AT指令解析。 主机可以对模组的默认参数进行查询和修改,下图展示了:

  1. 修改设备名为 ABC

  2. 查询设备名

  3. 查询蓝牙地址

@startuml
hide footbox
skinparam sequenceMessageAlign center

box "local" #LightBlue
participant Host as host
participant Module as bt
end box


rnote over host, bt: 修改设备名为 ABC

host -> bt: AT+NAME=ABC\\r\\n
bt -> host: \\r\\nOK\\r\\n"

rnote over host, bt: 查询设备名

host -> bt: AT+NAME\\r\\n
bt -> host: \\r\\n+NAME=ABC\\r\\n\\r\\nOK\\r\\n"

rnote over host, bt: 查询蓝牙地址

host -> bt: AT+ADDR\\r\\n
bt -> host: \\r\\n+ADDR=DC0D30010203\\r\\n\\r\\nOK\\r\\n

@enduml

发送数据的流程

模组上电会持续向外发送广播数据,远端蓝牙(手机)可以通过搜索获取到广播包, 并向模组发起连接请求。连接成功后模组会拉高连接状态脚通知主机蓝牙连接成功。 主机可以通过蓝牙模组将数据发送给远端蓝牙,远端蓝牙也可以把数据发送给主机。

@startuml
hide footbox
skinparam sequenceMessageAlign center

box "local" #LightBlue
participant Host as host
participant Module as bt
end box

box "remote" #LightBlue
participant "Remote BT" as remote
end box

rnote over host, remote: 建立连接

bt --> remote: 广播包
bt <-  remote: 扫描
bt --> remote: 广播包
bt <-  remote: 请求建立连接

rnote over host, remote: 连接成功

host <- bt: 拉高连接状态脚

rnote over host, remote: 发送数据

host -> bt: 串口发送 ABC
        bt ->  remote: 蓝牙发送 ABC
        bt <-  remote: 蓝牙发送 DEF
host <- bt: 串口输出 DEF

        bt <-  remote: 断开蓝牙

host <- bt: 连接断开

host <- bt: 拉低连接状态脚
        bt --> remote: 广播包

@enduml

模组做主机连接远端设备

模组可以作为主设备去连接从设备,主机可以发送指令控制模组进行扫描连接和断开。下图展示了连接其他设备的过程:

@startuml

hide footbox
skinparam sequenceMessageAlign center

box "local" #LightBlue
participant Host as host
participant Module as bt
end box

box "remote" #LightBlue
participant "Remote BT" as remote
end box

host -> bt: AT+SCAN=1\\r\\n
host <- bt: \\r\\nOK\\r\\n
bt ->  remote: 扫描
bt <-- remote: 广播包
host <- bt: \\r\\n+SCAN=0,1,DC0D30001ED4,-65,10,FSC-BT946\\r\\n
host -> bt: AT+LECCONN=DC0D30001ED41\\r\\n
host <- bt: \\r\\nOK\\r\\n
bt ->  remote: 请求建立连接

rnote over host, remote: 连接成功

host <- bt: 拉高连接状态脚

rnote over host, remote: 发送数据
host -> bt: 串口发送 ABC
bt ->  remote: 蓝牙发送 ABC
bt <-  remote: 蓝牙发送 DEF
host <- bt: 串口输出 DEF

host -> bt: AT+LEDISC\\r\\n
host <- bt: \\r\\nOK\\r\\n
bt ->  remote: 断开蓝牙

rnote over host, remote: 连接断开

host <- bt: 拉低连接状态脚
        bt --> remote: 广播包

@enduml

FAQ

IOS 手机如何获取蓝牙MAC地址?

IOS系统出于安全考虑,在底层将蓝牙MAC地址变成了UUID发送给上层应用。所以APP无法获取到设备的MAC地址。

FSC-BT630 默认会将MAC地址放在广播中,APP可以通过下面的方法从广播包中获取MAC地址。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    if(![self describeDictonary:advertisementData])
    {
        NSLog(@"is not fsc module");
        return;
    }
}

- (Boolean)describeDictonary: (NSDictionary *) dict
{
    NSArray *keys;
    id key;
    keys = [dict allKeys];
    for(int i = 0; i < [keys count]; i++)
    {
        key = [keys objectAtIndex:i];
        if([key isEqualToString:@"kCBAdvDataManufacturerData"])
        {
            NSData *tempValue = [dict objectForKey:key];
            const Byte *tempByte = [tempValue bytes];
            if([tempValue length] == 6)
            {
                // tempByte 后面参数是蓝牙地址
                return true
            }
        }else if([key isEqualToString:@"kCBAdvDataLocalName"])
        {
            //there is name
            //NSString *szName = [dict objectForKey: key];
        }
    }
    return false;
}

附录

下载 PDF版本

下载PDF版本