zigbee學習之路(十四):基於協議棧的無線數據傳輸


一.前言

       上次實驗,我們介紹了zigbee原理的應用與使用,進行了基於zigbee的串口發送協議,但是上個實驗並沒有實現數據的收發。在這個實驗中,我們要進行zigbee的接受和發送實驗。

二.實驗功能

       協調器以3 秒為周期(周期性廣播),向終端節點發送一個數組數據0123456789,協調器接收到數據后,通過串口讓電腦顯示接收到的數據。

三.代碼分析

      本實驗是一個周期性廣播實驗,故有終端節點,協調器之分。先給大家介紹一下什么是協調器和終端節點。協調器在整個zigbee網絡中只能有一個,相當於網絡中的最高維護者。終端節點是具體執行的數據采集傳輸的設備,他不能轉發其他節點的消息。所以本次實驗我們要用兩個zigbee節點,一個節點用於發送一個用於接收,接收的節點通過串口連接電腦,顯示接收到的數據,驗證傳送與接受的正確性。我們把講解分成發送與接收兩部分,先講解發送的。

終端節點(數據發送)

     我們大致要干3件事,(1) 串口初始化;(2) 登記任務號;(3) 執行任務。登記任務號,是zigbee的特色,這樣才能去執行一個事情。

     首先,作一個解釋,就是:當我們從TI 官網得到協議棧代碼之后,在沒有任何修改過的情況之下,如果我們進行編譯的話,那么,程序是默認執行周期性廣播的,只不過我們沒有將TI 定義為發送數據的指針,指向我們的數據,所以,數據就沒有發送,但是,其實設備的任務初始化工作早就完成了。下面我們就來講解。

步驟(1):任務初始化(登記任務號、設置編號、發送時間)

     我們來看看圖中的case,一旦網絡狀態改變,就執行case 后面的代碼,代碼中的osal_start_timerEx();函數就幫我們登記任務(對應SampleApp_TaskID)、設置編號(對應
SAMPLEAPP_SEND_PERIODIC_MSG_EVT)、發送時間了(對應SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT)。

步驟(2):設置發送內容

    在SampleApp_ProcessEvent( uint8 task_id, uint16 events )函數里找到SampleApp_SendPeriodicMessage()函數,SampleApp_ProcessEvent是一個事件函數,通過它調用發送函數SampleApp_SendPeriodicMessage。

   

       在圖中的if 語句里,就有我們步驟一看到的已經設置好的編號SAMPLEAPP_SEND_PERIODIC_MSG_EVT,也就是說,在設定好的發送時間內,就會執行一次SampleA
pp_SendPeriodicMessage()函數。

 我們來看一下SampleApp_SendPeriodicMessage()函數

 

 

10就是數組長度,data就是發送的數組。

步驟(3):執行任務(自動周期性地發送)

      當步驟(1)里設置好編號,那么程序就會執行步驟(2),而在步驟(2)中,我們又設置了發送內容,故當程序執行到步驟(2)的時候,其實已經執行了發送數據的任務了。到此
發送部分的代碼講解完畢,只要選擇EndDeviceEB-Pro 編譯即可下載程序。至此,發送方面就介紹完了,下面介紹接受方面。

協調器(數據接收)

數據接收部分的代碼有兩個工作:
(1) 接收數據;
(2) 串口發送數據給電腦顯示。

步驟(1):接收數據

  

   當接收到數據時,也就是AF_INCOMING_MSG_CMD 發生了,就會執行case中的代碼,也就是調用接收數據的函數。讓我們來看一下這個函數的具體代碼。

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) //接收數據
2 {
3 uint16 flashTime;
4
5 switch ( pkt->clusterId ) {
6 case SAMPLEAPP_PERIODIC_CLUSTERID:
7 HalUARTWrite(0,"Received data: \n",16); //提示收到數據
8 HalUARTWrite(0, pkt->cmd.Data, pkt->cmd.DataLength); //輸出接收到的數據
9 HalUARTWrite(0, "\n", 1); //回車換行
10 break;

SAMPLEAPP_PERIODIC_CLUSTERID這個是一個簇,在發送函數中已經定義過,是為了接收數據的。HalUARTWrite()函數就是一個把信息發送給串口的函數,之前說過,在次不作介紹,大家明白功能就行,至此,就完成了zigbee數據的發送以及接受,希望大家能夠學到東西,最后給大家看一下實驗效果。

 

   

  

 

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM