swzswz 发表于 2023-8-19 18:18

【Microchip WBZ451 Curiosity】BLE高级应用

<div class='showpostmsg'>蓝牙按照协议可以分为经典蓝牙和低功耗蓝牙,蓝牙数据传输过程一般是从广播到扫描,再到连接,最后进行数据传输的。具体有GATT和ATTT两种控制配置。本文中利用BLE进行数据传输。主要是程序代码结构分析和试验探究。

# 一.BLE Throughput demo代码分析
源代码包含此应用的三种功能,可以分为APP_MSG_PROTOCOL_RSP、APP_MSG_FETCH_TRP_RX_DATA以及APP_MSG_LED_TIMEOUT,分别代表命令功能,数据传输功能以及LED灯显示机器状态等。
具体代如下:
首先初始化基本定义,以及状态初始化。
```cpp
        uint8_t instance;
        APP_TRP_ConnList_T *p_connList;

        APP_Msg_T appMsg;
        APP_Msg_T *p_appMsg;
        p_appMsg = appMsg;
```
```cpp
switch (appData.state) {
            /* Application's initial state. */
      case APP_STATE_INIT:
      {
            bool appInitialized = true;
            //appData.appQueue = xQueueCreate( 10, sizeof(APP_Msg_T) );
            APP_BleStackInit();
            RTC_Timer32Start();

            /* Configure build-in GATT Services*/
            APP_ConfigBleBuiltInSrv();

            APP_LED_Init();

            APP_UpdateLocalName(0, NULL);
            APP_InitConnList();
            APP_ADV_Init();

            APP_TRP_COMMON_Init();
            APP_TRPS_Init();

            if (appInitialized) {

                appData.state = APP_STATE_SERVICE_TASKS;
                SYS_CONSOLE_MESSAGE("BLE_Throughput APP Initialized.\r\n");
            }
            break;
      }
                break;
```

然后是三种函数分别作用的功能。如下:
```cpp
case APP_STATE_SERVICE_TASKS:
      {
            if (OSAL_QUEUE_Receive(&appData.appQueue, &appMsg, OSAL_WAIT_FOREVER)) {
                switch (p_appMsg->msgId) {
                  case APP_MSG_BLE_STACK_EVT:
                        // Pass BLE Stack Event Message to User Application for handling
                        APP_BleStackEvtHandler((STACK_Event_T *) p_appMsg->msgData);
                        break;

                  case APP_MSG_PROTOCOL_RSP:
                  {
                        p_connList = ((APP_TIMER_TmrElem_T *) p_appMsg->msgData)->p_tmrParam;

                        if ((p_connList != NULL) && (p_connList->trpRole == APP_TRP_SERVER_ROLE))
                            APP_TRP_COMMON_SendCheckSumCommand(p_connList);
                  }
                        break;

                  case APP_MSG_FETCH_TRP_RX_DATA:
                  {
                        p_connList = ((APP_TIMER_TmrElem_T *) p_appMsg->msgData)->p_tmrParam;
                        if ((p_connList != NULL) && (p_connList->trpRole == APP_TRP_SERVER_ROLE))

                            APP_TRPS_LeRxProc(p_connList);

                  }
                        break;

                  case APP_MSG_LED_TIMEOUT:
                  {
                        APP_LED_Elem_T *p_ledElem;

                        instance = ((APP_TIMER_TmrElem_T *) p_appMsg->msgData)->instance;
                        p_ledElem = (APP_LED_Elem_T *) ((APP_TIMER_TmrElem_T *) p_appMsg->msgData)->p_tmrParam;
                        APP_LED_StateMachine(instance, p_ledElem);
                  }
                        break;
                }
            }
            break;
```

其中readme.md文件给出了具体的功能实现,这个包括数据双向传输,从 PIC32CXBZ2到mobile phone,或者是1双向传输。
广播描述:


LED灯状态:LED有两种状态,分别代表广播状态和连接状态


# 二.数据传输测试
## 1app连接
打开MBD app, 找到BLE_UART。未连接时,开发板灯是闪烁的;连接后,开发板灯不闪。
连接,手机app的出现uart程序,如图:

开发板灯不闪:


分别测试两种状态:
burst mode,此时用程序的文本进行传输。


text mode,模拟输入,在板子和app双向传输。


非常有趣,期待能用uart传输,后续再研究下程序。
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                               
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2023-8-20 21:52

<p>好吧,期待楼主下面的能用uart传输的测评,,,</p>

swzswz 发表于 2023-8-23 00:03

Jacktang 发表于 2023-8-20 21:52
好吧,期待楼主下面的能用uart传输的测评,,,

<p>暂时用不了,说不支持这个,看看能不能改代码吧<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/cry.gif" width="48" /></p>
页: [1]
查看完整版本: 【Microchip WBZ451 Curiosity】BLE高级应用