应用开发示例

BLE 数据透传应用

什么是透传?

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

FSC-BT2024NI系列模块通用数传固件的数据传输模式一般默认指令模式,如需切换,可参考 FSC-BT2024NI 通用BLE数传应用 AT命令集 使用 AT+TPMODE 指令来进行切换。两种数据传输模式工作机制与区别如下:

  • 透传模式

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

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

  • 指令模式

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

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

模块与手机间透传应用

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

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

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

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

../_images/data-bt-app.png

模块与模块间透传应用

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

1.扫描附近的BLE设备

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

 1发送:<<AT+SCAN=1                //扫描附近的蓝牙BLE设备
 2响应:>>OK
 3     >>+SCAN={                   //扫描开始
 4     >>+SCAN=1,0,E0798DB74D70,-75,9,FSC-WY001
 5     >>+SCAN=2,0,E0798DB74D61,-78,9,FSC-WY001
 6     >>+SCAN=3,0,E0798DB74D44,-86,9,FSC-WY001
 7     >>+SCAN=4,0,DC0D30000473,-40,12,FSC-BT2024NI
 8     >>+SCAN=5,0,E0798DB74D69,-65,9,FSC-WY001
 9     >>+SCAN=6,0,00025B00FF0D,-63,10,BP415-FF0D
10     >>+SCAN=7,0,E0798DB74D59,-56,9,FSC-WY001
11     >>+SCAN=8,0,DC0D3000211A,-83,15,SDKM1E1PNLWU002
12     >>+SCAN=9,0,E0798DB74D65,-56,9,FSC-WY001
13     >>+SCAN=}                  //扫描结束

2.发送建立BLE连接请求

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

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

Warning

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

地址类型获取方式:

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

1 响应:>>+SCAN=4,0,DC0D30000473,-40,12,FSC-BT2024NI  //示例中,地址类型为第二个参数0

3.建立BLE连接成功

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

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

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

4.发送数据

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

../_images/data-bt-bt.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

发送数据的流程

模组上电会持续向外发送广播数据,远端蓝牙(手机)可以通过搜索获取到广播包, 并向模组发起连接请求。连接成功后模组会拉高连接状态脚通知主机蓝牙连接成功。 主机可以通过蓝牙模组将数据发送给远端蓝牙,远端蓝牙也可以把数据发送给主机。

@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