FSC-BT910x 通用数传应用说明
描述
本设计指南适用于工程师开发 FSC-BT910x 系列蓝牙模组。
模块默认参数
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:
引脚描述
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 指令开启功能
硬件设计说明
模组只需要连接VDD/GND/UART_RX/UART_TX即可使用
如果MCU需要获取蓝牙模组的连接状态,需要接STATUS引脚
画完原理图后请发给飞易通进行审核,避免蓝牙距离达不到最佳效果
功能说明
GPIO指示
模块工作状态引脚 PIN 32
状态 |
描述 |
|---|---|
1Hz方波 |
蓝牙未连接 |
高电平 |
蓝牙连接 |
BT连接状态引脚 PIN 33
状态 |
描述 |
|---|---|
低电平 |
蓝牙未连接 |
高电平 |
蓝牙连接 |
工作模式
透传模式 |
蓝牙未连接,串口收到的数据按照AT指令进行解析;蓝牙连接后串口收到的数据全
部原样发送到远端蓝牙。
|
指令模式 |
蓝牙未连接,串口收到的数据按照AT指令进行解析;蓝牙连接后串口收到的数据仍
然按照AT指令进行解析。需要发送数据到远端的时候,发送相关的profile发送数据指令
|
GATT透传服务
类型 |
UUID |
权限 |
描述 |
Service |
0xFFF0 |
透传服务 |
|
Write |
0xFFF2 |
Write,Write Without Response |
APP发给模组 |
Notify |
0xFFF1 |
Notify |
模组发给APP |
应用场景
查询/修改模组默认参数
模组在蓝牙没有连接的状态下,会将串口数据按照AT指令解析。 主机可以对模组的默认参数进行查询和修改,下图展示了:
修改设备名为 ABC
查询设备名
查询蓝牙地址
发送数据的流程
模组上电会持续向外发送广播数据,远端蓝牙(手机)可以通过搜索获取到广播包, 并向模组发起连接请求。连接成功后模组会拉高连接状态脚通知主机蓝牙连接成功。 主机可以通过蓝牙模组将数据发送给远端蓝牙,远端蓝牙也可以把数据发送给主机。
模组做主机连接远端设备
模组可以作为主设备去连接从设备,主机可以发送指令控制模组进行扫描连接和断开。下图展示了连接其他设备的过程:
空中升级
Note
如需升级最新版本请参考 空中升级说明
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; }