FSC-BT910x 指令手册

介绍

描述

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

模组默认配置 以BT9101为例


Name

FSC-BT9101

LE-Name

FSC-BT9101-LE

Pin Code

0000

Secure Simple Pairing Mode

Off

Service UUID

FFF0

Write UUID

FFF2

Notify UUID

FFF1

UART Baudrate

115200/8/N/1

硬件说明

引脚图

FSC-BT9101:

_images/BT9101%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

串口流控脚

4

UART_RTS

O

串口流控脚

9

Tran/CMD

I/O

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

10

Disc

I/O

断开连接脚

11

RESET

I

低电平复位

12

VDD

Power

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

13

GND

GND

GND

16

FW_URXD

I

烧录脚

17

FW_UTXD

O

烧录脚

32

Work

O

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

33

STATUS

O

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

36

EXT_ANT

ANT

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

Note

如需使用9,10引脚控制模块需使用 AT+PIOCFG 指令开启功能

FSC-BT9104:

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

引脚描述

Pin

Pin Name

Type

Pin Descriptions

1

GND

GND

Power Ground

2

PA8

I/O

Programmable I/O

3

Status

O

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

5

FW_URXD

I

烧录脚

6

FW_UTXD

O

烧录脚

8

GND

GND

GND

9

VDD_3V3

VDD

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

10

RESET

I

低电平复位

11

UART_RX

I

串口数据脚

12

UART_TX

O

串口数据脚

13

UART_RTS

O

串口流控脚

14

UART_CTS

I

串口流控脚

15

GND

GND

Power Ground

16

EXT_ANT

ANT

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

硬件设计说明

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

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

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

功能说明

GPIO指示

模块工作状态引脚 PIN 32

状态

描述

1Hz方波

蓝牙未连接

高电平

蓝牙连接

BT连接状态引脚 PIN 33,BT9104是PIN3

状态

描述

低电平

蓝牙未连接

高电平

蓝牙连接

工作模式

透传模式

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

指令模式

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

GATT透传服务

类型

UUID

权限

描述

Service

0xFFF0

透传服务

Write

0xFFF2

Write,Write Without Response

APP发给模组

Notify

0xFFF1

Notify

模组发给APP

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=8.0.0,FSC-BT9101
>> OK

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

通知

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

通知格式

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

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

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

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

指令表

通用指令

AT+HELP - 查询固件功能和命令说明

Command

AT+HELP

Response

<MODULE DEFAULT PARAMETER>
<COMMAND SUMMARY: DESCRIPTION: PROFILE CATEGORY>

Description

使用help命令获取基本摘要信息

Note

如需升级最新版本请参考 空中升级说明

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+BTEN - 读/写当前蓝牙工作模式

Command

AT+BTEN{=Param1}

Param

使能蓝牙(0/1,default:0)
0: 断开所有连接,禁用可发现/可连接
1: 启用发现/接入

Response

+BTEN=Param

Description

读/写当前蓝牙工作模式

AT+NAME - 读/写BR/EDR蓝牙名称

Command

AT+NAME{=Param1{,Param2}}

Param1

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

Param2

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

Response

+NAME=Param

Param

蓝牙名称

Description

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

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

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

读取BR/EDR蓝牙名称
<< AT+NAME
>> +NAME=ABC-XXXX
>> OK

AT+LENAME - 读/写BLE蓝牙名称

Command

AT+LENAME{=Param1{,Param2}}

Param1

BLE蓝牙名称(1~29 Bytes ASCII)

Param2

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

Response

+LENAME=Param

Param

蓝牙名称

Description

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

AT+PIN - 读/写配对密码

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+BAUD - 读/写串口波特率

Command

AT+BAUD{=Param}

Param

波特率(4800/9600/19200/38400/57600/115200/
230400/460800/921600,256000,512000,1000000, default:115200)

Response

+BAUD=Param

Param

波特率

Description

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

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

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

AT+VER - 读取固件版本

Command

AT+VER

Response

+VER=Param

Param

固件版本

Description

读取版本号

Example:
<< AT+VER
>> +VER=8.0.0,FSC-BT9101
>> 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+LEADDR - 读BLE蓝牙MAC地址

Command

AT+LEADDR

Response

+LEADDR=Param

Param

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

AT+COD: 读/写设备类型

Command

AT+COD=Param

Param

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

Response

+COD=Param

相关配置参考 COD.

AT+TPMODE - 打开/关闭透传模式

Command

AT+TPMODE{=Param}

Param

模式(0~1,默认0) 0: 指令模式 1: 透传模式

Response

+TPMODE=Param

Description

当在SPP/GATT协议下连接并且打开透传模式时,AT指令将会被禁用,
通过UART接收的每个字节将被发送到远端

AT+FLOWCTL - 开启/关闭串口流控

Command

AT+FLOWCTL{=Param1}

Param1

参数(0~1,default0) 0: 关闭流控 1: 开启流控

Response

+FLOWCTL=Param

Description

打开/关闭串口流控

AT+SSP - 开启/关闭简易配对

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+AUTOCONN - 设置蓝牙上电重连

Command

AT+AUTOCONN{=Param}

Param

0: 关闭自动重连
1: 开启自动重连

Response

+AUTOCONN=Param

Description

上电后,模块将根据设置PROFILE尝试与配对列表中的设备建立连接

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

Command

AT+PIOCFG{=Param,Param1}

Param

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

Param1

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

Response

+PIOCFG=Param

Description

用引脚控制传输模式和连接状态

Note

BT9101可用,BT9104封装受限,引脚未引出。

AT+DSCA - 断开所有连接

Command

AT+DSCA

Description

模块断开与远程设备的所有蓝牙连接,在指令模式下使用

AT+SCAN - 搜索附近的设备

Command

AT+SCAN=Param1{,Param2{,Param3}}

Param1

扫描方式(0~2)
0: 停止扫描
1: 扫描附近BR/EDR设备
2: 扫描附近BLE设备(部分程序不支持)
3: 扫描附近BR/EDR/BLE设备(部分程序不支持)

Param2

(1~48)扫描时间. unit:1.28s, default:12.8s

Param3

(1~25 Bytes ASCII)过滤名称.

Description

格式说明参考: +SCAN - 扫描结果

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~6,默认3)
0: -12dBm
1: -8dBm
2: -4dBm
3: 0dBm
4: 4dBm
5: 8dBm
6: 10dBm

Response

+TXPOWER=Param

Param

发射功率

Description

修改发射功率,命令设置后重启生效

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

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

AT+UARTCFG - 读/写串口配置

Command

AT+UARTCFG{=Param}

Param

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

Response

+UARTCFG=Param

Param

配置 (0~5)

Description

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

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

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

AT+LINKCFG - 自动搜索链接配置

Command

AT+LINKCFG{=Param}

Param

配置 (0~2)
0:关闭自动搜索链接
1:spp自动搜索链接
2:ble自动搜索链接

Description

若配置该指令模块会根据配置自动搜索链接

AT+RSSICFG - 读/写RSSI配置

Command

AT+RSSICFG{=Param,Param1}

Param

高rssi值

Param1

低rssi值

Description

信号强度大于 Param 时PIN34脚置低
信号强度小于 Param1 时PIN34脚置高
信号强度处于 Param ~ Param1 时电平不变
BT9101可用,BT9104封装受限,引脚未引出。
Example:配置-30~-60信号强度提示
<< AT+RSSICFG=30,60
>> OK

SPP指令

AT+SPPSTAT - 读SPP状态

Command

AT+SPPSTAT

Response

+SPPATAT=Param

Description

格式说明参考: +SPPSTAT - SPP状态

AT+SPPCFG - 读/写SPP配置

Command

AT+SPPCFG{=Param}

Param

配置(0~1, 默认:0)
0:关闭spp动态注册
0:开启spp动态注册

Response

+SPPCFG=Param

Description

开启动态注册后模块会在连接时注册spp服务
断开时注销spp服务

AT+SPPCONN - 建立SPP连接

Command

AT+SPPCONN{=Param}

Param

目标设备MAC地址(12 Bytes ASCII)

AT+SPPDISC - 断开SPP连接

Command

AT+SPPDISC

Description

断开当前与远程设备的SPP连接

AT+SPPSEND - 通过SPP发数据

Command

AT+SPPSEND=Param1,Param2

Param1

Payload length (1~236)

Param2

Payload (1~236 Bytes UTF8)

Description

如果透传模式开启,该指令将会被禁用

Example: 通过SPP给远程设备发送数据 “1234567890”
<< AT+SPPSEND=10,1234567890
>> OK

GATT指令

AT+GATTSTAT - 读GATT状态

Command

AT+GATTSTAT

Response

+GATTATAT=Param

Description

格式说明参考: +GATTSTAT - 连接状态上报

AT+ADVADDR - 打开/关闭广播地址

Command

AT+ADVADDR{=Param}

Param

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

Response

+ADVADDR=Param

Description

打开/关闭广播地址

AT+IBEACON - 打开/关闭ibeacon广播

Command

AT+IBEACON{=Param}

Param

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

Response

+IBEACON=Param

Description

打开/关闭ibeacon广播

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

Command

AT+ADVDATA{=Param}

Param

厂商自定义广播数据(数据长度不超过26)

Response

+ADVDATA=Param

Param

tag为0xFF的广播数据

Description

厂商自定义广播数据tag为0xFF

Example:
查询厂商自定义广播数据内容,\x为十六进制数据
<< AT+ADVDATA
>> +ADVDATA=\x03\x01\x02
>> OK

查询厂商自定义广播数据内容,\x为十六进制数据
<< AT+ADVDATA=\x03\x01\x02
>> OK

AT+ADBLE - 打开/关闭AndroidBLE

Command

AT+ADBLE{=Param}

Param

模式(0~1,默认1) 0: 关闭AndroidBLE 1: 开启AndroidBLE

Response

+ADBLE=Param

Description

开启后SPP和BLE地址会是两个地址 | 关闭 SPP和BLE地址会一个地址

AT+UUIDCFG - 读/写UUID

Command

AT+UUIDCFG{=Param1,Param2,Param3}

Param1

service UUID (defalut: 0000)

Param2

write UUID (defalut: 0000)

Param3

notify UUID (defalut: 0000)

Response

+UUIDCFG=Param1,Param2,Param3

Description

自定义数据传输复位的UUID,支持32/128位UUID.
为默认参数时:
service UUID = 0xFFF0
write UUID = 0XFFF2
notify UUID = 0XFFF1

AT+GATTSEND - 通过GATT发数据

Command

AT+GATTSEND=Param1,Param2

Param1

Payload length (1~236)

Param2

Payload (1~236 Bytes UTF8)

Description

如果透传模式开启,该指令将会被禁用

Example: 通过GATT给远程设备发送数据 “1234567890”
<< AT+GATTSEND=10,1234567890
>> OK

AT+LESTAT - 读LE状态

Command

AT+LESTAT

Response

+LEATAT=Param

Description

格式说明参考: +LESTAT - 连接状态上报

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+LESEND - 发送数据到远端设备

Command

AT+LESEND=Param1,Param2

Param1

Payload length (1~236)

Param2

Payload (1~236 Bytes UTF8)

Response

OK

Description

如果透传模式开启,该指令将会被禁用

Example:
向远端BLE设备发送数据“2022”
<< AT+LESEND=4,2022
>> OK

HID指令

AT+HIDSTAT - 读HID状态

Command

AT+HIDSTAT

Response

+HIDATAT=Param

Description

格式说明参考: +HIDSTAT - HID状态

AT+HIDCONN - 建立HID连接

Command

AT+HIDCONN{=Param}

Param

目标设备MAC地址(12 Bytes ASCII)

AT+HIDDISC - 断开HID连接

Command

AT+HIDDISC

Description

断开当前与远程设备的HID连接

AT+HIDOSK - 弹出/退出键盘

Command

AT+HIDOSK

Description

弹出/退出键盘 ios有效

AT+HIDMODE - 读/写HID模式

Command

AT+HIDMODE{=Param}

Param

HID键盘输入模式(0~1), default 1
(0) Hex key code
(1) Ascii key code (English)

Note

模块可以通过特定的固件支持各种键盘语言,例如:
TURKEY SPAIN PORTUGAL FRANCE GERMANY ITALY CZECH JAPAN

AT+HIDDLY - 读/写HID发送时间

Command

AT+HIDDLY{=Param}

Param

HID report period in millisecond, default 10 ms

AT+HIDSEND - 通过HID发数据

Command

AT+HIDSEND=Param1,Param2

Param1

Report length

Param2

Report payload

Note

For special key code:
0x0D -> ENTER
0x08 -> BACKSPACE
0x09 -> TAB
0x20 -> SPACE

Description

如果透传模式开启,该指令将会被禁用

Example: 发送字符 ‘A’ 到远端设备 (on AT+HIDMODE=1)
>> AT+HIDSEND=1,A
<< OK
Example: 发送字符 ‘A’ 到远端设备 (on AT+HIDMODE=0)
<< AT+HIDSEND=4, xA1 x01 x00 x04
>> OK
Note: 数据为hex,对应的实际数据如下:
41 54 2B 48 49 44 53 45 4E 44 3D 34 2C A1 01 00 04 0d 0a
Where:
A1 : report start
01 : page id 1
00 : modifier
04 : key code
模块将自动发送弹起键

通知列表

+SPPSTAT - SPP状态

Format

+SPPSTAT=Param

Param

(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected

+SCAN - 扫描结果

Format1

+SCAN={ : 开始扫描

Format2

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

Param1

列表序号

Param2

地址类型(1字节)

Param3

地址(12字节)

Param4

RSSI

Param5

设备名长度

Param6

设别名名

Format3

+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=}

+GATTSTAT - 连接状态上报

Indication

+GATTSTAT=Param

Param

(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected

Description

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

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

+LESTAT - 连接状态上报

Indication

+LESTAT=Param

Param

(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected

Description

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

Example:
连接成功
>> +LESTAT=3

+HIDSTAT - HID状态

Format

+HIDSTAT=Param

Param

(0) Unsupported
(1) Standby
(2) Connecting
(3) Connected

应用场景

查询/修改模组默认参数

模组在蓝牙没有连接的状态下,会将串口数据按照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=2\\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-BT910x 默认会将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版本