1、協調器建立網路,並加入乙個組,向組內成員組播資料「i am coordinator device \n」
2、終端1加入網路,並加入與協調器相同的組,收到協調器傳送而來的資料
2、終端2加入網路,並加入另外乙個組,不能收到協調器發來的資料
1、複製工程模板,並重命名
2、加入串列埠通訊**
3、配置組播
#include string.h
#include mt_uart.h
2、還是老套的流程,搞一搞串列埠初始化以及函式列印
以及關閉我們的流控,並設定我們的波特率為115200
void
( uint8 task_id )
aps_group_t;
串列埠和組播的初始化到此完成,主要做的一些位址的填充,接下來我們進入事件輪詢
case zdo_state_change:
(devstates_t)
(msgpkt->hdr.status)
;//首先還是在這裡獲取網路狀態
if//然後判斷是否為協調器狀態
else
break
;
仍然是我們熟悉的週期性傳送資料
if
協調器傳送訊息完成了
void
(void
)else
}
傳送資料完成之後,我們進入終端的接收資料
進入事件輪詢的,接收到新的訊息
case af_incoming_msg_cmd:
( msgpkt )
;break
;
進入訊息處理函式
void
( afincomingmsgpacket_t *pkt )
}
需要注意的一點是,在我們的模板中,預設讓我們的終端處於低功耗模式,處於休眠狀態,定時的喚醒終端來接收訊息
而休眠模式不能接收組播發送的訊息,因為他的接收器沒有開啟,我們要讓他的接收器一直開啟,那麼我們這樣操作
將**的 false 改為true,就可以讓我們的接收器一直處於開啟的狀態
最後進行非組播終端的修改
1、將位址改為 0x0002
(afaddrmode_t)afaddrgroup;
//選中組播模式
//埠號的確認
//組播位址
//這裡go to 進去改
0x0002
;//對結構體成員變數賦值 ,這裡我們可以看到與組播位址一致
osal_memcpy
"group 2",7
);aps_addgroup
;//將相應的埠加入這個組
2、組名改為group 2
然後編譯即可
zigbee單播 組播 廣播
設定傳送的目標位址,這裡位址模式addrnotpresent,即按照繫結的方式進行單播,不需要指定目標位址,需要先將兩個裝置繫結,將兩個裝置繫結後即可通訊 還有另外三種傳送方式,如下 enum 2.註冊端點描述符 fill out the endpoint description.register ...
Zigbee組播的實現
typedef struct aps group t 2.對aps group t結構體賦值,示例如下 by default,all devices start out in group 1 void osal memcpy void dst,const void generic src,unsig...
Zigbee協議棧組播通訊
在zigbee網路中組播通訊,模組可以分組來標記,傳送模組的組號和接受模組的組號相對應,那麼這些模組就可以拿到無線資料報。分組中組編號是2個位元組,如0x0001 0x0002。傳送的模組按照組的方式傳送,需要目標模組的組編號,端點,簇。乙個組可以關聯多個端點,同乙個端點也可以關聯多個組。終端節點 ...