FSC-BT618 指令手册¶
介绍¶
描述¶
本设计指南适用于工程师开发 FSC-BT618 系列蓝牙模组
模组默认配置¶
Name |
FSC-BT618 |
Service UUID |
FFF0 |
Write UUID |
FFF2 |
Notify UUID |
FFF1 |
UART Baudrate |
115200/8/N/1 |
硬件说明¶
引脚图¶

引脚描述¶
Pin |
Pin Name |
Type |
Pin Descriptions |
---|---|---|---|
1 |
UART_TX |
O |
串口数据脚 |
2 |
UART_RX |
I |
串口数据脚 |
3 |
UART_RTS |
I/O |
串口流控脚/不需要连接 |
4 |
UART_CTS |
I/O |
串口流控脚/不需要连接 |
9 |
RESTORE |
I |
重置配置 |
11 |
RESET |
I |
低电平复位 |
12 |
VDD |
Power |
3.3V供电,建议使用LDO供电 |
13 |
GND |
GND |
GND |
16 |
SWCLK |
I/O |
烧录脚 |
17 |
SWDIO |
I/O |
烧录脚 |
32 |
LED |
O |
蓝牙未连接输出方波,蓝牙连接输出高电平 |
31 |
WAKE_MCU |
O |
低功耗模式蓝牙唤醒MCU |
33 |
STATUS |
O |
蓝牙未连接输出低电平,蓝牙连接输出高电平 |
34 |
WAKE_BT |
I |
低功耗模式MCU唤醒蓝牙 |
36 |
EXT_ANT |
ANT |
改变天线附近的0欧电阻,可以外接蓝牙天线 |
硬件设计说明¶
模组只需要连接VDD/GND/STATUS/UART_RX/UART_TX即可使用
如果MCU需要获取蓝牙模组的连接状态,需要接STATUS引脚
画完原理图后请发给飞易通进行审核,避免蓝牙距离达不到最佳效果
模组支持通过GPIO唤醒,如果应用上有低功耗的需求,需要连接 WAKE_MCU/WAKE_BT引脚
VDD/GND/RESET/SWCLK/SWDIO 是烧录口,可以预留测试点
功能说明¶
GPIO指示¶
LED引脚 PIN 32
状态 |
描述 |
---|---|
1Hz方波 |
蓝牙未连接 |
高电平 |
蓝牙连接 |
连接状态引脚 PIN 33
状态 |
描述 |
---|---|
低电平 |
蓝牙未连接 |
高电平 |
蓝牙连接 |
工作模式¶
透传模式 |
蓝牙未连接,串口收到的数据按照AT指令进行解析;蓝牙连接后串口收到的数据全
部原样发送到远端蓝牙。
|
指令模式 |
蓝牙未连接,串口收到的数据按照AT指令进行解析;蓝牙连接后串口收到的数据仍
然按照AT指令进行解析。需要发送数据到远端的时候,发送AT+LESEND指令。
|
GATT透传服务¶
类型 |
UUID |
权限 |
描述 |
Service |
0xFFF0 |
透传服务 |
|
Write |
0xFFF2 |
Write,Write Without Response |
APP发给模组 |
Notify |
0xFFF1 |
Notify |
模组发给APP |
性能参数¶
类型 |
Min. |
Type. |
Max. |
描述 |
上电时间 |
230ms |
使能串口响应时间 |
||
唤醒时间 |
200ms |
串口发送完唤醒数据才开始计算 |
数据传输速率¶
波特率 |
数据包 |
发送间隔 |
连接间隔 |
发送方式 |
速率 |
230400 |
244 |
11ms |
15ms |
Notify |
23000 Byte/s |
低功耗¶
模组支持2种低功耗模式,分别是串口唤醒模式和IO口唤醒模式。
模式 |
指令配置 |
硬件连接 |
休眠方法 |
描述 |
---|---|---|---|---|
串口唤醒
|
AT+LPM=1
|
不需要连接
WAKE_MCU 和
WAKE_BT
|
串口超过5s没有数据通信,自动进入休眠
休眠后串口收到第一帧数据会退出休眠
|
唤醒的第一帧数据会丢失
逻辑简单,节省IO
|
IO口唤醒
|
AT+LPM=2
|
需要连接
WAKE_MCU
和 WAKE_BT
|
WAKE_BT 高电平蓝牙模组进入休眠
WAKE_BT 低电平蓝牙模组退出休眠
WAKE_MCU 高电平通知MCU退出休眠
WAKE_MCU 低电平通知MCU进入休眠
|
支持唤醒MCU
电路上需要多连接2个IO
|
AT指令说明¶
规范说明¶
适用于整个文档
{} : 包括与{…}中的内容为可选项
<< : 主机发给模组的 COMMAND
>> : 模组回复主机的 RESPONSE
指令¶
指令格式¶
所有的指令使用 AT 开头,使用 <CR><LF> 结尾
<CR> 代表回车符,对应 HEX 为 0x0D
<LF> 代表换行符,对应 HEX 为 0x0A
若指令包含参数,参数应使用 = 分隔
若指令包含多项参数,参数应使用 , 分隔
若指令有响应返回,响应使用 <CR><LF> 开始,使用 <CR><LF> 结束
模组应当总是返回指令执行的结果 (成功返回 OK,失败时返回 ERROR)
通知¶
通知格式¶
所有的通知使用<CR><LF>开始, 使用<CR><LF>结束
若通知包含参数, 参数应位于 “=” 后面
若通知包含多项参数, 参数应使用 “,” 分割
指令列表¶
AT - 串口通信测试¶
Command |
AT |
Response |
OK |
Description |
当上电或更改波特率时,测试主机和模块之间的UART通讯 |
AT+VER - 读取固件版本¶
Command |
AT+VER |
Response |
+VER=Param |
|
固件版本 |
Description |
读取版本号 |
AT+ADDR - 读取蓝牙MAC地址¶
Command |
AT+ADDR |
Response |
+ADDR=Param |
|
模块的蓝牙MAC地址(12 Bytes ASCII) |
Description |
读取蓝牙MAC地址 |
AT+NAME - 读/写蓝牙名称¶
Command |
AT+NAME{=Param1{,Param2}} |
|
蓝牙名称(1~29 Bytes ASCII) |
|
使能MAC地址后缀(0/1,default:0)
0: 关闭后缀
1: 开启后缀“-XXXX”(MAC地址后4Byte)
|
Response |
+NAME=Param |
|
蓝牙名称 |
Description |
如果存在参数则设置蓝牙名称,否则只是读取 |
AT+BAUD - 读/写串口波特率¶
Command |
AT+BAUD{=Param} |
|
波特率(1200/2400/4800/9600/19200/38400/57600/115200/
230400/460800/921600, default:115200)
|
Response |
+BAUD=Param |
|
波特率 |
Description |
模块将在接收到这条指令后,马上切换波特率 |
AT+TXPOWER - 读/写发射功率¶
Command |
AT+TXPOWER{=Param} |
|
发射功率 |
Response |
+TXPOWER=Param |
|
发射功率 |
Description |
修改发射功率 |
AT+LPM - 开启/关闭低功耗模式¶
Command |
AT+LPM{=Param} |
|
低功耗模式 (0/1/2, default: 0)
0: 关闭
1: 串口唤醒模式
2: IO 唤醒模式
|
Response |
+LPM=Param |
|
低功耗模式 |
Description |
查询修改低功耗模式 |
AT+ADVIN - 读/写广播间隔¶
Command |
AT+ADVIN{=Param} |
|
广播间隔 (20~10000 ms, 默认: 152ms) |
Response |
+ADVIN=Param |
|
广播间隔 |
Description |
查询修改广播间隔 |
AT+LECHCNT - 读/写BLE的最大连接数量配置¶
Command |
AT+LECHCNT{=Param} |
|
最大允许连接数量 (1~8, default:1) |
Response |
+LECHCNT=Param |
|
最大允许连接数量 |
Description |
更新最大连接数,需要重启生效 |
AT+IDCFG - 读/写8字节ID¶
Command |
AT+IDCFG{=Param} |
|
8字节ID |
Response |
+IDCFG=Param |
|
8字节ID |
Description |
查询修改8字节ID |
AT+LEDISC - 断开指定连接¶
Command |
AT+LEDISC{=Param} |
|
连接索引 |
Response |
OK |
Description |
断开指定通道的蓝牙连接 |
AT+LECCONN - 向指定地址发起连接¶
Command |
AT+LECCONN{=Param1{,Param2{,Param3{,Param4}}}} |
|
12字节设备地址+1字节地址类型 |
|
通信服务UUID |
|
通信写权限特征值UUID |
|
通信通知权限特征值UUID |
Response |
OK |
Description |
向指定设备发起连接,参数由12字节(设备地址)和1字节
(地址类型)组成,一般情况下地址类型为“0”或者“1”。地址
类型获取方式:
使用 AT+SCAN 扫描返回的第二个参数,例:
+SCAN=0,0,DC0D30001ED4,-65,10,FSC-BT946
连接命令:
AT+LECCONN=DC0D30001ED40
|
AT+FILTER - 读/写搜索过滤条件¶
Command |
AT+FILTER{=Param1{,Param2}} |
|
过滤类型(0~3)
0: 删除全部条件
1: 地址过滤
2: 广播数据过滤
3: 信号强度过滤
|
|
过滤类型为1,参数为地址
过滤类型为2,参数为广播数据
过滤类型为3,参数为信号强度
|
Response |
+FILTER=1,Param1
+FILTER=2,Param2
+FILTER=3,Param3
|
Description |
过滤指令只会影响AT+SCAN=2
过滤广播数据时,参数字段依次为:tag,offset,len,data
配置完毕后启动 AT+SCAN=2时按照设置参数过滤扫描到的设备
AT+FILTER=0,删除全部过滤条件。
过滤参数不会保存到flash。
|
AT+SCAN - 搜索附近的设备¶
Command |
AT+SCAN{=Param} |
|
扫描方式(0~2)
0: 停止扫描
1: 扫描附近的设备,过滤重复地址,最多可以搜到8个设备
2: 扫描BLE广播包,输出原始广播数据包,可以通过AT+FILTER指令进行过滤
|
Response |
+SCAN=Param1,Param2,Param3,Param4,Param5,Param6 (AT+SCAN=1格式)
+SCAN=Param21,Param22,Param23,Param24,Param25,Param26 (AT+SCAN=2格式)
|
|
列表序号 |
|
地址类型(1字节) |
|
地址(12字节) |
|
RSSI |
|
设备名长度 |
|
设别名名 |
|
地址类型(1字节) |
|
地址(12字节) |
|
RSSI |
|
广播数据包类型 |
|
广播数据包长度 |
|
广播数据包 |
Description |
AT+SCAN=1 常用于连接前的搜索
AT+SCAN=2 常用于作为蓝牙网关使用,搜索周围的Beacon设备
|
AT+TPMODE - 读/写连接状态下的工作模式¶
Command |
AT+TPMODE{=Param} |
|
模式(0~1,默认1)
0: 指令模式
1: 透传模式
|
Response |
+TPMODE=Param |
|
模式 |
Description |
指令模式:
蓝牙没有连接串口数据按照指令解析,蓝牙连接后串口收到
的数据按照指令解析
透传模式:
蓝牙没有连接串口数据按照指令解析,蓝牙连接后串口收到
的数据全部发到远端蓝牙
|
AT+ADVEN - 读/写广播使能¶
Command |
AT+ADVEN{=Param} |
|
模式(0~1,默认1)
0: 禁用广播
1: 启用广播
|
Response |
+ADVEN=Param |
|
模式 |
Description |
控制蓝牙广播的使能 |
AT+ADVDATA - 读/写BLE广播0xFF的数据¶
Command |
AT+ADVDATA{=Param} |
|
tag为0xFF的广播数据 |
Response |
+ADVDATA=Param |
|
tag为0xFF的广播数据 |
Description |
查询修改蓝牙广播数据 |
AT+LESEND - 发送数据到远端设备¶
Command |
AT+LESEND{=Param1{,Param2{,Param3}}} |
|
连接索引 |
|
数据长度 |
|
数据 |
Response |
OK |
Description |
此指令仅在指令模式下使用,指令模式模块串口接收数据默
认做 AT 指令解析,需要发送到远端需要使用指令发送,连
接索引信息使用 AT+CHINFO 指令查询
|
AT+CHINFO - 读取连接对端信息¶
Command |
AT+CHINFO |
Response |
+CHINFO=Param1,Param2,Param3,Param4 |
|
连接索引 |
|
连接状态 (1:未连接,2:连接中,3:已连接) |
|
连接角色 (0:从机,1:主机) |
|
对端地址 |
Description |
查询连接信息 |
AT+REBOOT - 软件复位¶
Command |
AT+REBOOT |
Response |
OK |
Description |
模块将复位 |
AT+RESTORE - 恢复出厂设置¶
Command |
AT+RESTORE |
Response |
OK |
Description |
模块将恢复为出厂设置 |
AT+UARTCFG - 读/写串口配置¶
Command |
AT+UARTCFG{=Param} |
|
配置 (0~5)
bit0:
0 - 1位停止位
1 - 2位停止位
bit2~bit3:
00 - None
01 - Odd
10 - Even
|
Response |
+UARTCFG=Param |
|
配置 (0~5) |
Description |
修改串口配置(停止位和校验位) |
AT+PIN - 读/写配对密码¶
Command |
AT+PIN{=Param} |
|
配对密码 (000000 ~ 999999, 默认000000) |
Response |
+PIN=Param |
|
配对密码 |
Description |
修改配对密码 |
AT+PLIST - 读/删除配对设备信息¶
Command |
AT+PLIST{=Param1{,Param2{,Param3}}} |
|
连接索引 |
|
地址类型(没有配对默认为FF) |
|
配对设备的地址信息(没有配对默认为FFFFFFFFFFFF) |
Response |
+PLIST=Param |
|
删除配对设备信息 |
Description |
清除配对设备信息,清除后需要关闭设备蓝牙才能生效 |
AT+SMCFG -¶
Command |
AT+SMCFG{=Param} |
|
模式(0~1,默认0)
0: 直接配对模式
1: pin码配对模式
|
Response |
+SMCFG=Param |
|
模式 |
Description |
直接配对模式:
无需输入pin码即可直接进行配对
pin码配对模式:
需输入pin码才可以进行配对
|
通知列表¶
+SCAN - AT+SCAN=1扫描结果上报¶
Indication |
+SCAN=Param1,Param2,Param3,Param4,Param5,Param6 |
|
列表序号 |
|
地址类型(1字节) |
|
地址(12字节) |
|
RSSI |
|
设备名长度 |
|
设别名名 |
Description |
模组收到AT+SCAN=1后,会持续扫描,发现设备后通过+SCAN进行上报 |
+SCAN - AT+SCAN=2扫描结果上报¶
Indication |
+SCAN=Param1,Param2,Param3,Param4,Param5,Param6 |
|
地址类型(1字节) |
|
地址(12字节) |
|
RSSI |
|
广播数据包类型 |
|
广播数据包长度 |
|
广播数据包 |
Description |
模组收到AT+SCAN=2后,会持续扫描,发现设备后通过+SCAN进行上报 |
+GATTSTAT - 连接状态上报¶
Indication |
+GATTSTAT=Param1,Param2 |
|
连接索引 |
|
连接状态 (1~3)
1: 未连接
2: 连接中
3: 已连接
|
Description |
指令模式下,模组的连接状态发生变化,通过+GATTSTAT主动上报 |
+DATA - 收到蓝牙数据上报¶
Indication |
+DATA=Param1,Param2,Param3 |
|
连接索引 |
|
数据包长度 |
|
数据包内容 |
Description |
透传模式:上报数据不带+DATA包头
指令模式:上报数据带+DATA包头 +DATA=1,5,12345
|
应用场景¶
查询/修改模组默认参数¶
模组在蓝牙没有连接的状态下,会将串口数据按照AT指令解析。 主机可以对模组的默认参数进行查询和修改,下图展示了:
修改设备名为 ABC
查询设备名
查询蓝牙地址
发送数据的流程¶
模组上电会持续向外发送广播数据,远端蓝牙(手机)可以通过搜索获取到广播包, 并向模组发起连接请求。连接成功后模组会拉高连接状态脚通知主机蓝牙连接成功。 主机可以通过蓝牙模组将数据发送给远端蓝牙,远端蓝牙也可以把数据发送给主机。
模组做主机连接远端设备¶
模组可以作为主设备去连接从设备,主机可以发送指令控制模组进行扫描连接和断开。下图展示了连接其他设备的过程:
FAQ¶
IOS 手机如何获取蓝牙MAC地址?¶
IOS系统出于安全考虑,在底层将蓝牙MAC地址变成了UUID发送给上层应用。所以APP无法获取到设备的MAC地址。
FSC-BT618 默认会将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; }