[English]

FSC-BT986_HC05 指令手册

介绍

描述

本设计指南适用于工程师开发 FSC-BT986_HC05 系列蓝牙模组,同样也适合BT982、BT981系列模组

模组默认配置

Name

FSC-HC05

LE-Name

FSC-HC05-LE

Pin Code

1234

Secure Simple Pairing Mode

On

UART Baudrate

9600/8/N/1

硬件说明

引脚图

以FSC-BT986为例:

_images/BT986%E5%BC%95%E8%84%9A.jpg

引脚描述

Pin

Pin Name

Type

Pin Descriptions

1

UART_TX

O

串口数据脚

2

UART_RX

I

串口数据脚

3

UART_CTS

I/O

串口流控脚/不需要连接

4

UART_RTS

I/O

串口流控脚/不需要连接

9

Disc/USB_DM/PIO0

I/O

断开连接脚

11

RESET

I

低电平复位

12

VDD

Power

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

13

GND

GND

GND

15

ICE

I/O

烧录脚

32

LED

O

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

33

STATUS

O

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

34

Tran/USB_DP/PIO1

I/O

UART模式控制脚 H = 指令模式 L = 透传模式

36

EXT_ANT

ANT

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

硬件设计说明

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

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

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

功能说明

GPIO指示

连接状态引脚 PIN 24

状态

描述

低电平

透传模式

高电平

指令模式

连接状态引脚 PIN 23

状态

描述

低电平

/

高电平

断开连接

LED引脚 PIN 32

状态

描述

1Hz方波

蓝牙未连接

高电平

蓝牙连接

连接状态引脚 PIN 33

状态

描述

低电平

蓝牙未连接

高电平

蓝牙连接

工作模式

透传模式

蓝牙未连接,串口收到的数据按照AT指令进行解析;蓝牙连接后串口收到的数据全
部原样发送到远端蓝牙。

指令模式

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

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+VERSION
>> +VERSION:1.0.0,FSC-BT986
>> OK

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

通知

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

通知格式

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

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

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

Example:
指令模式下返回当前连接状态
>> +SPPSTAT:3

指令表

通用指令

AT - 串口通信测试

Command

AT

Response

OK

Description

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

Example:
<< AT
>> 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+NAME - 读/写BR/EDR蓝牙名称

Command

AT+NAME{=Param1{,Param2}}

Param1

BR/EDR蓝牙名称(1~31 Bytes ASCII)

Param2

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

Response

+NAME:Param

Param

蓝牙名称

Description

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

Example:
读取BR/EDR蓝牙名称
<< AT+NAME
>> +NAME:FSC-BT986-XXXX
>> OK

设置BR/EDR蓝牙名称,且关掉后缀
<< AT+NAME=ABC,0
>> OK

设置BR/EDR蓝牙名称为“ABC”并自动添加地址后缀
<< AT+NAME=ABC,1
>> OK

AT+RNAME - 获取远程蓝牙设备名称

Command

AT+RNAME {=Param}

Param

远程蓝牙设备的地址

Response

+RNAME:Param

Param

远程蓝牙设备名称

Description

通过远程蓝牙设备地址获取远程蓝牙设备名称

Example:
获取远程蓝牙设备名称
远程蓝牙设备MAC为:DC:0D:30:65:43:21,设备名称为:Feasycom
<< AT+RNAME=DCOD,30,654321
>> +RNAME: Feasycom
>> OK

AT+ROLE - 查询/设置模块角色

Command

AT+ROLE=<Param>

Param

设置模块角色
0: 从角色(Slave)默认
1: 主角色(Master)
2: 回环角色(Slave-Loop)

Response

ROLE:Param

Param

查询模块角色

Description

Slave(从角色):被动连接;
Slave-Loop(回环角色):被动连接,接收远程蓝牙主设备数据并将数据原样
返回给远程蓝牙主设备;
Master(主角色):查询周围 SPP 蓝牙从设备,并主动发起连接,从而建立
主、从蓝牙设备间的透明数据传输通道。
Example:
查询当前模块角色
<< AT+ROLE
>> +ROLE:0
>> OK
更改模块角色为主角色
<< AT+ROLE=1
>> OK

AT+IAC - 设置/查询访问码

Command

AT+IAC=<Param>

Param

访问码

Response

IAC:Param

Param

查询访问码

Description

访问码设置为 GIAC(General Inquire Access Code:0x9e8b33)通用查询访问码,可用来
现或被发现周围所有的蓝牙设备;为了能有效地在周围诸多蓝牙设备中快速查询或被查询
自定义蓝牙设备,用户可以将模块查询访问码设置成 GIAC 和 LIAC 以外的数字,如:9e8b3f
Example:
设置访问码
<< AT+IAC=9e8b3
>> OK
查询访问码
<< AT+IAC
>> 9e8b3f
>> OK

AT+INQM - 设置/查询访问模式

Command

AT+INQM=<Param>,<Param2>,<Param3>

Param1

0: 标准查询模式
1: 带RSSI信号强度指示查询模式

Param2

最多蓝牙设备响应数

Param3

最大查询超时超时范围: 1~48(折合成时间:1.28秒~61.44秒)默认值:1,1,48

Response

INQM:Param,Param2,Param3

Param1

0: 标准查询模式
1: 带RSSI信号强度指示查询模式

Param2

最多蓝牙设备响应数

Param3

最大查询超时超时范围:1~48(折合成时间:1.28秒~61.44秒)默认值:1,1,48

Description

如果存在参数则设置蓝牙访问模式,否则只是读取

Example:
设置访问模式
<< AT+INQM=1,9,48
>> OK
查询访问模式
<< AT+INQM
>> +INQM:1, 9, 48
>> OK

AT+CMODE - 查询/设置连接模式

Command

AT+CMODE=<Param>

Param

连接模式,默认:1
0: 指定蓝牙地址连接模式(指定蓝牙地址由绑定指令设置)
1: 任意蓝牙地址连接模式(不受绑定指令设置地址的约束)
2: 回环角色(Slave-Loop)

Response

+CMODE:Param

Param

连接模式

Example:
设置连接模式
<< AT+CMODE=1
>> OK
查询访问模式
<< AT+CMODEM
>> CMODEM:1
>> OK

AT+BIND - 查询/设置绑定蓝牙地址

Command

AT+BIND=<Param>

Param

绑定蓝牙地址(默认:00:00:00:00:00:00)

Response

+BIND:Param

Param

蓝牙地址

Description

蓝牙地址表示方法:NAP:UAP:LAP(十六进制)绑定指令只有在指定蓝牙地址里那句模式有效

Example:
设置连接模式
在指定蓝牙地址连接模式下,绑定蓝牙设备地址:12:34:56:ab:cd:ef
<< AT+BIND=1234,56,abcdef
>> OK
查询蓝牙地址
<< AT+BIND
>> BIND:0000:00:000000
>> OK

AT+POLAR- 查询/设置LED指示驱动及连接状态输出极性

Command

AT+POLAR=<Param1>,<Param2>

Param1

0: 输出低电平点亮LED
1:输出高电平点亮LED

Param1

0:出低电平指示连接成功
1:输出高电平指示连接成功

Response

+POLAR=Param1,Parm2

Param

LED状态

Example:
设置LED指示驱动及连接状态输出极性
<< AT+POLAR=0,1
>> OK
查询LED指示驱动及连接状态输出极性
<< AT+POLAR
>> +POLAR=0,1
>> OK

AT+PIO - 设置PIO单端口输出

Command

AT+PIO=<Param1>,<Param2>

Param1

PIO端口序号(十进制)

Param1

PIO端口输出状态

Response

OK

Description

PI02~PI07,用户可用来扩展输入、输出端口。

Example:
PIO05 端口输出高电平
<< AT+PIO=05,1
>> OK
PIO05 端口输出低电平
<< AT+PIO=05,0
>> OK

AT+MPIO - 设置 PIO 多端口输出

Command

AT+MPIO=<Param>

Param

PIO 端口序号掩码组合(十进制数)

Response

OK

Description

PI00~PI07和 PI010,用户可用来扩展输入、输出端口。
PIO端口序号掩码=(1<<端口序号)
PIO端口序号掩码组合=(PIO端口序号掩码 1.PIO端口序号掩码 2 ……)
Example:
PI02端口掩码=(1<<2) =0x004
PI010端口掩码=(1<<10)=0x400
PI02和PI010端口掩码组合=(0x004|0x400)=0x404
1、PI010和 PI02端口输出高电平
<< AT+MPI0=404
>> OK
2、PI04端口输出高电平
<< AT+PI0=004
>> OK
3、PI010端口输出高电平
<< AT+PI0=400
>> OK
4、所有端口输出低电平
<< AT+MPI0=0
>> OK

AT+IPSCAN - 设置/查询—寻呼扫描、查询扫描参数

Command

AT+PIO=<Param1>,<Param2>,<Param3>,<Param4>

Param1

查询时间间隔

Param2

查询持续时间

Param3

寻呼时间间隔

Param4

寻呼持续时间

Response

AT+PIO:<Param1>,<Param2>,<Param3>,<Param4>

Description

上述参数均为十进制数。默认值:1024,512,1024,512

设置寻呼扫描、查询扫描参数
PIO05 端口输出高电平
<< AT+ipscan=1234,500,1200,250
>> OK
查询—寻呼扫描、查询扫描参数
<< AT+ipscan
>> +IPSCAN:1234,500,1200,250
>> OK

AT+SNIFF - 设置/查询—SHIFF节能参数

Command

AT+SNIFF=<Param1>,<Param2>,<Param3>,<Param4>

Param1

最大时间

Param2

最小时间

Param3

尝试时间

Param4

超时时间

Response

A+SNIFF: <Param1> , <Param2> ,<Param3>,<Param4>

Description

上述参数均为十进制数。默认值:0,0,0,0

AT+SENM - 设置/查询安全、加密模式

Command

AT+SENM=<Param>,<Param2>,

Param1

0——sec_mode0+off
1——sec_mode1+non_secure
2——sec_mode2_service
3——sec_mode3_link
4——sec_mode_unknown

Param2

0——hci_enc_mode_off
1——hci_enc_mode_pt_to_pt
2——hci_enc_mode_pt_to_pt_and_bcast
默认值:0,0

Response

A+ SENM:<Param>,<Param2>,

AT+RMSAD - 从蓝牙配对列表中删除所有认证设备

Command

AT+RMSAD=<Param>

Param

蓝牙设备地址

Response

OK or FAIL

Example:
从配对列表中删除蓝牙地址为:12:34:56:ab:cd:ef 的设备
<< AT+RMAAD
>> OK

AT+FSAD - 从蓝牙配对列表中查找指定认证设备

Command

AT+FSAD=<Param>

Response

OK or FAIL

Example:
从配对列表中,查找蓝牙设备:12:34:56:ab:cd:ef
<< AT+FSAD=1234,56,abcdef
>> OK —–配对列表中存在12:34:56:ab:cd:ef 蓝牙设备
or
<< AT+FSAD=1234,56,abcdef
>> FAIL —–配对列表中不存在 12:34:56:ab:cd:ef 蓝牙设备

AT+ENSNIFF - 进入节能模式

Command

AT+ENSNIFF=<Param>

Param

设备蓝牙地址

Response

OK

AT+EXSNIFF - 退出节能模式

Command

AT+EXSNIFF=<Param>

Param

设备蓝牙地址

Response

OK

AT+MRADK - 获取最近使用过的蓝牙认证设备地址

Command

AT+MRAD

Param

最近使用过的蓝牙设备地址

Response

+MRAD:<Param> OK

Example:
<< AT+MRAD
>> +MRAD:0:0:0 —–最近没有使用信任蓝牙设备
>> OK

AT+STATE - 获取蓝牙模块工作状态

Command

AT+STATE

Param

“INITIALIZED” ——初始化状态
“READY” ——准备状态
“PAIRABLE” ——可配对状态
“PAIRED” ——配对状态
“INQUIRING” ——查询状态
“CONNECTING” ——正在连接状态
“CONNECTED” ——连接状态
“DISCONNECTED” ——断开状态
“NUKNOW” ——未知状态

Response

+ STATE:<Param>

Param

蓝牙工作状态

Example:
设置访问模式
<< AT+STATE
>> +STATE:INITIALIZED——初始化状态
>> OK

AT+INIT - 初始化 SPP规范库

Command

AT+INIT

Response

OK

AT+INQC - 取消查询蓝牙设备

Command

AT+INQC

Response

OK

AT+INQ - 查询蓝牙设备

Command

AT+INQ

Response

**+INQ:<Param1> , <Param2> , <Param3> **

Param1

蓝牙地址

Param2

设备类型

Param3

RSSI信号强度

Example:
<< AT+CLASS=0—–查询各种蓝牙设备类
<< AT+INQ—–查询周边蓝牙设备
>> +INQ:DC0D:72:D2224,3E0104,FFBC
+INQ:1234:56:0,1F1F,FFC1
+INQ:DC0D:30:12,240404,FFC2
>> OK

AT+PAIR - 设备配对

Command

AT+PAIR=<Param1> , <Param2>

Param1

远程设备蓝牙地址

Param2

连接超时(秒)

Response

OK or FAIL

Example:
与远程蓝牙设备:12:34:56:ab:cd:ef 配对,最大配对超时20秒
<< AT+PAIR=1234,56,abcdef,20
>> OK

AT+RESET - 模块复位(重启):

Command

AT+RESET

Response

OK

AT+ORGL - 恢复默认状态:

Command

AT+ORGL

Response

OK

Description

模块将恢复出厂设置并重启

AT+FSAD - 从蓝牙配对列表中查找指定认证设备

Command

AT

Response

OK or FAIL

Example:
<< AT+FSAD=1234,56,abcdef
>> OK —–配对列表中存在12:34:56:ab:cd:ef 蓝牙设备
Or
<< AT+FSAD=1234,56,abcdef
>> FAIL —–配对列表中不存在 12:34:56:ab:cd:ef 蓝牙设备

AT+PSWD - 读/写配对密码

Command

AT+PIN{=Param}

Param

配对密码(4~15 Bytes ASCII, default:0000)

Response

+PIN:Param

Description

当+SSP=0时,配对密码有效

Example:
查询配对密码
<< AT+PIN
>> +PIN:0000
>> OK

修改配对密码为 1234
<< AT+PIN=1234
>> OK

AT+PLIST - 读取/清除配对记录

Command

AT+PLIST{=Param}

Param

(0 / 1~8)
(0) 清除所有配对记录
(1~8) 清除指定索引的配对记录

Response1

+PLIST:Param1, Param2

Param1

(1~8) 配对设备序号

Param2

(MAC)配对设备的MAC地址

Response2

+PLIST= 配对记录查询完成

Example:读模块的配对记录
<< AT+PLIST
>> +PLIST=1,1C5CF226D773
+PLIST=2,A0BC30075421
>> OK

Example:清除模块的所有配对记录
<< AT+PLIST=0
>> OK

AT+VERSION - 读取固件版本

Command

AT+VER

Response

+VER=Param

Param

固件版本

Description

读取版本号

Example:
<< AT+VERERSION
>> +VER:1.0.0,FSC-BT986
>> OK

AT+ADDR - 读BR/EDR蓝牙MAC地址

Command

AT+ADDR

Response

+ADDR:Param

Param

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

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

AT+CLASS: 读/写设备类型

Command

AT+CLASS=Param

Param

设备类型(6 bytes ASCII, default:240404 Handsfree device)

Response

+CLASS:Param

Description

为了能有效地对诸多蓝牙设备实现过滤,快速查询自定义蓝牙设备,
用户可以将模块设置为非标准蓝牙设备类,如:0x1f1f(十六进制类)

相关配置参考 COD.

AT+SSP - 读/写BR/EDR配对模式

Command

AT+SSP{=Param}

Param

PROFILE mode (0~1, default:0)
0: 关闭SSP
1: 开启SSP

Response

+SSP:Param

Note

重启生效

AT+MODE - 读/写蓝牙PROFILE

Command

AT+MODE{=Param}

Param

Pairing mode (0~4, default:0)
(0) NONE PROFILE
(1) SPP PROFILE
(2) HID PROFILE
(3) BLE PROFILE
(4) ALL PROFILE

Response

+SSP:Param

AT+PIOCFG - 开启/关闭IO口控制模块

Command

AT+PIOCFG{=Param,Param1}

Param

0: 禁用命令/传输模式切换功能
1: 启用命令/传输模式切换功能

Param1

0: 禁用蓝牙断开功能
1: 启用蓝牙断开功能

Response

+PIOCFG:Param

Description

AT+PIOCFG=1打开串口流控制,将PIN34接出给高电平进入指令模式。

AT+DISC - 断开所有连接

Command

AT+DSCA

Response

+DISC:SUCCESS——断开连接成功
+DISC:LINK_LOSS——连接丢失
+DISC:NO_SLC——没有 SLC连接
+DISC:TIMEOUT——断开超时
+DISC:ERROR——断开错误

AT+SECURITY - 打开/关闭安全验证

Command

AT+SECURITY{=Param1}

Param1

模式(0~1,默认0) | 0: 未开启安全验证 | 1: 开启安全验证

Response

+SECURITY:Param

Description

打开/关闭串口流控

Example:
设置开启安全验证
<< AT+SECURITY=1
>> OK

获取安全验证信息
<< AT+SECURITY
>> +SECURITY=1
OK

AT+TXPOWER - 读/写发射功率

Command

AT+TXPOWER{=Param}

Param

发射功率(0~2) | 0: 0db | 1: 3db | 2: 5db

Response

+TXPOWER:Param

Param

发射功率

Description

修改发射功率

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

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

AT+UART - 读/写串口配置

Command

AT+UART{=Param}

Param

配置 (0~5)
bit0:
0 - 1位停止位2
1 - 2位停止位1
bit2~bit1:
00 - None
01 - Odd
10 - Even

Response

+UART=Param

Param

配置 (0~5)

Description

修改串口配置(停止位和校验位)

Example:
None 1
<< AT+UART=0
>> OK

Odd 1
<< AT+UART=2
>> OK

应用场景

查询/修改模组默认参数

模组在蓝牙没有连接的状态下,会将串口数据按照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: 拉低连接状态脚

@enduml

FAQ

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

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

FSC-BT986_HC05 默认会将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版本