请选择 进入手机版 | 继续访问电脑版
查看: 1928|回复: 5

[资料发布] 【BLE透传】——LSD4BT-E66ALSP001 开发套件 使用教程

[复制链接]

18

主题

21

帖子

240

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
240
发表于 2018-11-19 10:21:25 | 显示全部楼层 |阅读模式
1 套件清单
        为了方便客户使用低功耗蓝牙模组,Lierda BT产品线特别推出低功耗蓝牙评估套件,该套件清单如表1所示。


表 1 套件清单
名称
数量(个)
产品型号
资料链接
模组
1
LSD4BT-E66ALSP001
转接板
1
LSD4BT-EVBTE66A01
LSD4BT-EVBTE66A01【资料汇总】
底板
1
LSD4BT-EVBTSTD001
LSD4BT-EVBTSTD001【资料汇总】
跳线帽
20
/
/

1.1 模组

        产品简介:该低功耗蓝牙模组是基于 SIG 发布的 BLE 标准设计的低功耗蓝牙透传模组。模组的控制方式灵活,不仅可以通过串口和功能性引脚进行控制,而且支持移动端远程控制。使用该模组,用户无需关注复杂的蓝牙协议,就可在短期内开发出标准的 BLE 产品。更多详细信息请参考LSD4BT-E66ALSP001【资料汇总】

1.2 转接板

        产品简介:用于连接模组和底板,并为模组提供烧写接口和外置天线焊接口;
        连接方式:模组已焊接在转接板上,转接板需要正面朝上安插于底板上侧。


         
                                               图 1 转接板正视图

1.3 底板

        产品功能:
  • 提供转接板插座并引出模组的大部分引脚,可使用跳线帽将引出脚接高或接地;
  • 提供 USB 转串口功能,支持 2 路串口(串口 0、串口 1);
  • 支持多种供电方式:USB 供电、纽扣电池供电和 5 号干电池供电,可通过电源选择接口选择;
  • 提供 4 个 LED 指示灯(LED1——黄,LED2——蓝, LED3——绿,LED4——电源指示灯(红))、2 个普通按键(K1、 K2)以及 1 个复位按键(K3);
  • 提供电流测试接口:去除 R1,串联电流表在 P10 位置即可。

         
                                               图 2 底板正视图

        
图 2 中处于同一侧的引出脚和转接板插座是对应的,且在同一水平线上的两个焊点之间是物理连接的,同时引出脚对应外围电路图如表 2 所示。无外围电路说明该引出脚仅使用排针引出,未连接任何外围设备。

2 引出脚与外围电路对应表
引出脚(P3
外围电路
引出脚(P4
外围电路
左1
VCC
右1
左2
GND
右2
左3
RST
右3
左4
U0_RX
右4
IO_AN1
左5
U0_TX
右5
IO_BTN2
左6
U1_TX
右6
IO_BTN1
左7
U1_RX
右7
IO_LED3
左8
IO_LED1
右8
IO_LED2
其他
其他

(4)Micro USB 转接线

        如果用户选择USB供电方式或使用串口指令功能,则需要自备一根Micro USB 转接线,如图 3 所示。
                              
                                                         图 3 Micro USB


2 评估示例

2.1 实验前准备

        客户在进行应用程序开发之前,可先通过串口调试助手和Lierda提供的开发套件验证蓝牙模组的功能,以评估蓝牙模组的可用性。
        串口调试助手可选用任意一款支持16进制发送和接收的串口调试工具。Lierda提供的开发套件需按照图 4 所示的方式连接,该套件使用Micro USB接口供电即可直接使用,使用过程中有以下几点需要注意。
  • 标注①处是转接板和底板的插口标准,要求转接板和底板最顶端的排针处于同一直线上;
  • 标注②处是3个控制引脚接口,默认全接地;
  • 标注③处是串口选择接口,默认选择串口0;
  • 标注④处是电源选择接口,默认选择USB供电。

         
                                                    图 4 开发套件

2.2 简单例程

        用户拿到E66开发套件时,所有跳线帽均需按照图 4 所示位置插好,此时通过Micro USB接口为套件供电,即可通过手机端APP扫描到模组的广播,如图 5 所示。
安卓手机APP推荐使用nRF Master Control Panel(BLE),苹果手机APP推荐使用LightBlue Explorer,以下示例均以安卓手机为准。


         

                           图 5 扫描结果


        电脑端打开串口调试助手,默认波特率9600,Hex发送,Hex接收。发送产品信息查询指令,查询产品型号,查询结果图 6 如所示。

  T:01 FC 18 01 00
  R:04 FC 18 13 00 00 4C  53 44 34 42 54 2D 45 36 36 41 4C 53 50 30 30 31

                           6 查询产品型号

        发送设备名称设置指令,设置结果如图 7 所示。此时手机端的扫面结果如图 8 所示。

  T:01 FC 07 0E 4C 53 44 20  42 4C 45 20 44 45 56 49 43 45 //设备名称设置
  R:04 FC 07 01 00
  T:01 FC 08 00 //设备名称查询
  R:04 FC 08 0F 00 4C 53 44 20 42 4C 45 20 44 45 56 49 43 45

                           图 7 设备名称设置与查询

         

                图 8 修改名称后的扫描结果

2.3 修改广播数据


        模组默认广播数据为0x020106030260FE,扫描响应数据为设备当前名称,如图 9 所示。

         

               图 9 广播数据和扫描响应数据

        发送广播数据设置指令,设置结果如图 10 所示。此时手机端的扫面结果如图 11 所示。

  T:01 FC 0D 0A 00 08 FF 60  FE 11 22 33 44 55 //广播数据设置
  R:04 FC 0D 01 00
  T:01 FC 0E 00 //广播数据查询
  R:04 FC 0E 0A 00 08 FF 60 FE 11 22 33 44 55

               图 10 广播数据设置与查询

         

                  图 11 修改后的广播数据

2.4 发送透传数据

        手机端点击CONNECT按钮连接上述设备,连接完成后如图 12 所示。

         

               图 12 连接完成时手机端状态


        然后打开Unknown Service服务,使能Notifications功能,准备接收模组发来的数据,如图 13 所示。

         

          图 13 手机端使能Notifications功能


        将模组的MODE_CTL引脚接高电平,切换到透传模式,此时可通过串口助手控制模组发送数据,如图 14 所示。

  T:01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
          图 14 发送透传数据

        此时手机端可以看到接收到的数据,如图 15 所示。

         

                     图 15 接收到透传数据


        此时也可以通过手机端向模组发送数据,点击发送通道的发送按钮,如图 16 所示,输入要发送的数据,如图 17 所示,点击SEND按钮发送数据,此时,在串口助手接收区域可以看到手机端发来的数据,如图 18 所示。

         

              图 16 数据发送通道的发送按钮

         

                    图 17 需要发送的数据


  R:11 22 33 44 55
                    图 18 串口助手接收到的数据


3 应用示例
3.1 硬件准备

        MCU和模组按照图 19 所示连接,如果模组由其他方式(USB、纽扣电池或5号干电池)供电,可不接VCC。如果需要指示功能,可选择性连接休眠指示引脚、串口数据指示引脚、连接状态指示引脚或数据拥塞指示引脚。

         

                                             图 19 全功能电气连接(左)和最简功能电气连接(右)


        最简功能设计原则:
  • 如果用户不需要快速的数据传输, BUSY_IND 可不接;
  • 如果用户不需要通过引脚获取蓝牙的连接状态, CONN_IND 可不接,如果用户不需要通过引脚关闭蓝牙的广播功能, BT_CTL 可直接接地,使模组保持广播状态,此时也可通过指令控制模组的蓝牙功能;
  • 如果用户不需要通过引脚获取模组的功耗模式, PWR_IND 可不接,如果用户不关心模组的功耗, PWR_CTL 可直接接地,使模组保持唤醒状态,此时可通过指令控制模组的功耗模式(RX 唤醒模式);
  • 如果用户的 MCU 不需要休眠或者在休眠状态下也能接收 UART 数据, DOUT_IND 可不接;
        如果用户不需要通过引脚控制模组的指令/透传模式切换, MODE_CTL 可直接接地,使模组保持指令模式,此时可通过指令控制模组的指令/透传模式切换(RX唤醒模式)。

3.2 软件准备

        应用示例由Lierda提供示例源码文件,用户只需要根据特定的嵌入式平台实现平台相关的驱动代码即可。源码文件如图 20 所示。

         

                                              图 20 源码文件

3.2.1  Lsd_ble_uart_driver.x

        串口驱动源文件/头文件,提供处理串口指令和控制/指示IO的驱动函数,一般情况下用户无需做任何修改,驱动函数调用方法详见Lsd_ble_uart_driver.h中对每个驱动函数的注释,驱动函数调用示例参考My_ble_interface.c中的多个初始化和应用示例。
        其中Ble_RcvChar()是串口接收函数,用户应该在收到串口数据时调用该函数。


3.2.2  Lsd_ble_uart_impl.x

        底层驱动源文件/头文件,用户需要根据平台和函数说明自主实现各函数。其中IO_SetHighLevel()函数的具体实现如示例 1 所示(STM32平台代码,仅供用户参考,用户需根据自己的平台修改),IO_SetLowLevel()和IO_GetCurrentLevel()接口的实现方式类似,要注意IO_XXX_CTL和XX_CTL_PIN类型宏的使用。
  1. void IO_SetHighLevel(unsigned char iosignal)
  2. {
  3.     switch (iosignal)
  4.     {
  5.     case IO_PWR_CTL:
  6.     {
  7.         GPIO_SetBits(GPIOB, PWR_CTL_PIN);
  8.         break;
  9.     }

  10.     case IO_BT_CTL:
  11.     {
  12.         GPIO_SetBits(GPIOB, BT_CTL_PIN);
  13.         break;
  14.     }

  15.     case IO_MODE_CTL:
  16.     {
  17.         GPIO_SetBits(GPIOB, MODE_CTL_PIN);
  18.         break;
  19.     }

  20.     case IO_RESET:
  21.     {
  22.         GPIO_SetBits(GPIOB, RESET_PIN);
  23.         break;
  24.     }

  25.     default:
  26.     {
  27.         break;
  28.     }
  29.     }
  30. }
复制代码
示例 1 IO_SetHighLevel()函数

3.2.3  My_ble_interface.x

        应用示例用到的接口源文件/头文件,用户既可作为入门演示代码使用,也可作为实际项目开发过程中的参考代码使用。如果用户要实现示例代码的功能,在My_ble_interface.h中有以下几项需要用户处理:
  • MAX_RCVTIME —— 串口接收超时时间,用户自定义
  • AIM_BAUDRATE —— 用户选择的目标波特率,用户自定义
  • Control Pin —— 用户使用平台的引脚号,用户自定义
  • PIN_INIT宏定义接口,用户自主实现
  • UART_INIT宏定义接口,用户自主实现

        以下两个跟串口接收超时相关的函数需要在合适的地方调用:
  • App_RunTimer(),建议放到定时器超时中断中,定时器超时时间会影响串口接收的超时时间,详细信息参考MAX_RCVTIME宏的注释。
  • App_TimerTick(),建议放到主任务中,不断轮询检查串口接收超时的状态,如果超时,及时处理收到的数据,示例用法参考下文。

3.2.4  main.c


        应用示例的一个具体实现,仅供用户参考,用户可将该文件移植到已有工程中。初始化时序参考main.c的实现即可,主循环中的应用示例代码可分别演示,应用示例分析参考下文。
  1. #include "My_ble_interface.h"
  2. #include "Lsd_ble_uart_driver.h"

  3. // 根据平台调整数组大小
  4. //#define BUF_SIZE 2000
  5. //unsigned char buf[BUF_SIZE];

  6. int main(void)
  7. {
  8.     /*
  9.         ...some other initialize codes
  10.     */
  11.     App_Start_Ble_Module(PWR_ON, BT_ON, MODE_CMD); //初始化I/O控制
  12.     App_Init_Ble_Uart();                           //初始化串口
  13.     App_Init_Ble_Settings();                       //修改默认参数

  14.     Ble_setIoControl(IO_MODE_CTL, MODE_DATA); //切换到透传模式
  15.     Ble_setIoControl(IO_PWR_CTL, PWR_OFF);    //允许休眠节省功耗

  16.     /*
  17.         ...some other initialize codes
  18.     */

  19.     while (1)
  20.     {
  21.         App_TimerTick();
  22.         App_EchoData();
  23.         //App_SendMassData(buf, BUF_SIZE);
  24.         //App_EchoWithCmd();

  25.         /*
  26.             ...some other tasks codes
  27.         */
  28.     }
  29. }
复制代码
示例 2 main.c参考代码

3.3  应用示例分析

3.3.1  示例 3:透传模式数据回传

        为了最大限度降低模组功耗,只有在模组收到数据时才会唤醒模组回传数据,回传结束即刻进入休眠模式。为了防止串口数据粘连,每两次串口发送之间间隔至少5毫秒。
示例 3 的现象:手机连接模组,发送数据给模组,手机端会收到模组原样返回的数据。
  1. void App_EchoData(void)
  2. {
  3.     if (app_data_evt)
  4.     {
  5.         Ble_setIoControl(IO_PWR_CTL, PWR_ON); // 唤醒
  6.         while (Ble_getRcvSize())
  7.         {
  8.             unsigned int len = Ble_ReadData(100, databuf);
  9.             if (len > 0)
  10.             {
  11.                 Ble_SendData(databuf, len);
  12.                 Lsd_delay_ms(5);
  13.             }
  14.         }
  15.         Ble_setIoControl(IO_PWR_CTL, PWR_OFF); // 休眠
  16.         app_data_evt = 0;
  17.     }
  18. }
复制代码
示例 3 App_EchoData()函数

3.3.2  示例 4:发送大量数据


        大量数据发送需要使用数据拥塞指示引脚,当引脚指示拥塞时应暂停发送,等待发送完成,指示空闲时应继续发送不超过200字节的数据。为了防止串口数据粘连,每两次串口发送之间间隔至少5毫秒。
        示例 4 的现象:手机连接模组,使能接收通道Notify功能,手机端会收到大量数据。
  1. void App_SendMassData(unsigned char *data, unsigned int size)
  2. {
  3.     Ble_setIoControl(IO_PWR_CTL, PWR_ON); // 唤醒
  4.     Ble_setIoControl(IO_MODE_CTL, MODE_DATA); // 切到透传

  5.     unsigned int idx = 0;
  6.     for (idx = 0; idx < size;)
  7.     {
  8.         while ((!Ble_getIoIndicate(IO_BUSY_IND))); // 拥塞时等待
  9.         unsigned char pkt_size = ((size - idx) < 200) ? (size - idx) : 200;
  10.         Ble_SendData(&data[idx], pkt_size);
  11.         Lsd_delay_ms(5);
  12.         idx += pkt_size;
  13.     }

  14.     Ble_setIoControl(IO_PWR_CTL, PWR_OFF); // 休眠
  15. }
复制代码
示例 4 App_SendMassData()函数

3.3.3  示例 5:指令模式数据回传

        指令模式数据回传和透传模式数据回传类似,为了最大限度降低模组功耗,只有在模组收到数据时才会唤醒模组回传数据,回传结束即刻进入休眠模式。为了防止串口数据粘连,每两次串口发送之间间隔至少5毫秒。
        示例 5 的现象:手机连接模组,手机端使用远程数据发送指令发送数据给模组,手机端会依次返回指令响应帧和已发送的数据。
  1. void App_EchoWithCmd(void)
  2. {
  3.     unsigned char status;
  4.     Ble_setIoControl(IO_MODE_CTL, MODE_CMD); // 切到指令
  5.     if (dataLen > 0)
  6.     {
  7.         Ble_setIoControl(IO_PWR_CTL, PWR_ON); // 唤醒
  8.         App_BleCmdHandle(&status, (void *)0, (void *)0, 0, CMD_SEND_DATA, dataLen, databuf);
  9.         Ble_setIoControl(IO_PWR_CTL, PWR_OFF); // 休眠
  10.         dataLen = 0;
  11.     }
  12. }
复制代码
示例 5 App_EchoWithCmd()函数


4、资料列表










回复

使用道具 举报

0

主题

8

帖子

55

积分

超级版主

Rank: 8Rank: 8

积分
55
发表于 2018-11-29 22:01:57 | 显示全部楼层
沙发!
回复

使用道具 举报

1

主题

6

帖子

14

积分

助理工程师

Rank: 1

积分
14
发表于 2018-11-30 11:28:40 | 显示全部楼层
这个详细的
回复

使用道具 举报

0

主题

8

帖子

55

积分

超级版主

Rank: 8Rank: 8

积分
55
发表于 2018-12-3 10:06:29 | 显示全部楼层

沈总加油啊
回复

使用道具 举报

0

主题

1

帖子

3

积分

助理工程师

Rank: 1

积分
3
发表于 2019-6-17 17:27:48 | 显示全部楼层
按照教程短接引脚,串口工具发送数据没有响应,请问还有哪些需要设置的
回复

使用道具 举报

3

主题

17

帖子

53

积分

助理工程师

Rank: 1

积分
53
发表于 2019-6-17 18:04:30 | 显示全部楼层
18768171074 发表于 2019-6-17 17:27
按照教程短接引脚,串口工具发送数据没有响应,请问还有哪些需要设置的

全部按照本文接线方式来操作的话,不需要一些其他设置,即可跟手机间正常收发数据。
建议排查一下几点:
1. USB线是否插紧?
2. 串口波特率是否配置正确?
3. 开发板跳线帽是否完全接正确?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表