应用开发示例

BLE数据透传应用

什么是透传?

FSC-BT3721V 蓝牙BLE数传模块,工作模式包含两种数据传输模式:透传模式和指令模式。

FSC-BT3721V系列通用数传固件一般默认数据透传模式,如需切换,可参考 FSC-BT3721V AT命令集 使用 AT+TPMODE 指令来进行切换。

两种数据传输模式工作机制与区别如下:

  • 透传模式

蓝牙未连接,串口收到的数据按照AT指令进行解析;

蓝牙连接后,串口收到的数据全部原样发送到远端蓝牙,不会包含任何数据包头和包围,不需要通过AT指令来发送数据。

  • 指令模式

蓝牙未连接,串口收到的数据按照AT指令进行解析;

蓝牙连接后,串口收到的数据仍然按照AT指令进行解析,会包含特定响应指示数据包头和包围,需要通过AT指令发送数据给远端,如AT+LESEND。

模块与手机间透传应用

  1. 模块端:上电后,模块会持续发送广播包数据;

  2. 手机端:打开FeasyBlue APP,扫描附近的蓝牙BLE设备广播包,找到目标蓝牙模块,并建立连接;

  3. 连接成功后,模块端状态引脚将拉高电平,说明已连接;

  4. 连接成功后,在透传模式下,模块端收到串口数据后,会自动透传经空中发送到远端(手机端)

../_images/bt3721v-bt-phone-tp.png

模块与模块间透传应用

FSC-BT3721V 与 FSC-BT986-LE 蓝牙模块间 BLE 通讯数据透传演示,如下:

1.扫描附近的BLE设备

FSC-BT3721V 扫描附近的蓝牙BLE设备,操作如下:

1发送:<<AT+SCAN=1                //扫描附近的蓝牙BLE设备
2响应:>>OK
3     >>+SCAN={                   //扫描开始
4     >>+SCAN=0,1,DD0D3053CBED,-66,19,iMin TF2-34 LE CBED
5     >>+SCAN=1,0,DC0D3060D2E9,-68,12,FSC-BW236-LE
6     >>+SCAN=2,0,DC0D30001106,-76,12,FSC-BT1106RC
7     >>+SCAN=3,0,DC0D300017A9,-87,11,FSC-BT3721V
8     >>+SCAN=4,1,DD0D3000174C,-13,12,FSC-BT986-LE     //识别到目标模块MAC地址和地址类型1
9     >>+SCAN=}                  //扫描结束

2.发送建立BLE连接请求

FSC-BT3721V 通过 AT+LECCONN 指令与 FSC-BT986-LE 建立BLE协议连接,操作如下:

1发送:<<AT+LECCONN=DD0D3000174C1      //向远端FSC-BT986-LE发起BLE链接
2响应:>>OK

Warning

AT+LECCONN=目标蓝牙MAC地址+1位地址类型,一般情况下地址类型为”0”或者”1”。

地址类型获取方式:

使用 AT+SCAN=1 扫描,返回结果中的第二个参数为地址类型,如下示例:

1 响应:>>+SCAN=0,0,DC0D30001ED4,-65,10,FSC-BT946  //示例中,地址类型为第二个参数0

3.建立BLE连接成功

在数据透传模式下,当蓝牙连接成功后,串口无法收到事件响应指示,可通过FSC-BT3431的Pin22状态指示引脚电平状态来判断当前连接状态,具体如下:

高电平(H): 表示蓝牙已成功连接。

低电平(L): 表示蓝牙未连接或连接已断开。

4.发送数据

通用数传固件透传模式默认开启,BLE建立连接成功后,即可直接发送数据,而不需要通过AT指令来发送数据,如下图示:

../_images/bt3721v-bt-bt-tp.png

查询/修改模块默认参数

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

发送数据的流程

  1. 模块上电会持续向外发送广播数据,远端蓝牙(手机)可以通过搜索获取到广播包,并向模块发起连接请求。

  2. 在建立连接成功后,模块会拉高连接状态脚通知主机蓝牙连接成功。主机可以通过蓝牙模块将数据发送给远端蓝牙,远端蓝牙也可以把数据发送给主机。

@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