Zigbee網(wǎng)絡(luò)通信之點播

點播即點對點通信,也就是在兩個設(shè)備之間進行通信决左,不允許有第三個設(shè)備收到信息撒踪。

點播描述的就是網(wǎng)絡(luò)中兩個節(jié)點之間相互通信的過程,通過16bit短地址來確定通信對象浦箱。

  1. step 1 定義點播方式
    打開SampleApp.c文件,找到組播吸耿、廣播的定義
afAddrType_t SampleApp_Periodic_DstAddr;
afAddrType_t SampleApp_Flash_DstAddr;

按照上述格式添加點播定義

afAddrType_t SampleApp_PointToPoint_DstAddr;//定義點對點通信

在函數(shù)void SampleApp_Init( uint8 task_id )中配置SampleApp_PointToPoint_DstAddr的相關(guān)參數(shù)(可參考對SampleApp_Periodic_DstAddrSampleApp_Flash_DstAddr的配置):

 SampleApp_PointToPoint_DstAddr.addrMode = (afAddrMode_t)afAddr16Bit;//地址類型為點播地址
  SampleApp_PointToPoint_DstAddr.endPoint = SAMPLEAPP_ENDPOINT;
  SampleApp_PointToPoint_DstAddr.addr.shortAddr = 0x0000;//發(fā)送給協(xié)調(diào)器
  1. step 2 添加點對點發(fā)送函數(shù)
      復(fù)制函數(shù)void SampleApp_SendPeriodicMessage( void )祠锣,修改相應(yīng)的變量即可
/*********************************************************************
 * @fn      SampleApp_SendPointToPointMessage
 *
 * @brief   Send the point to pont message .
 *
 * @param   none
 *
 * @return  none
 */
void SampleApp_SendPointToPointMessage()
{
    uint8 data[10]={'0','1','2','3','4','5','6','7','8','9'};//定義發(fā)送內(nèi)容
   // uint8 data[10]="0123456789";//上述方式二選一 
if(AF_DataRequest(&SampleApp_PointToPoint_DstAddr,&SampleApp_epDesc,
                      SAMPLEAPP_POINTTOPOINT_CLUSTERID,
                      10,
                      data,
                      &SampleApp_TransID,
                      AF_DISCV_ROUTE,
                      AF_DEFAULT_RADIUS) == afStatus_SUCCESS)
    {
    }
    else
    {
      // Error occurred in request to send.
    }
}

函數(shù)實現(xiàn)后請在SampleApp.c文件開頭添加函數(shù)聲明

void SampleApp_SendPointToPointMessage(void);

除此之外,還要添加SAMPLEAPP_POINTTOPOINT_CLUSTERID的定義咽安,具體位置可通過在SAMPLEAPP_PERIODIC_CLUSTERID上右鍵Go to definition of SAMPLEAPP_PERIODIC_CLUSTERID來確定伴网。

#define SAMPLEAPP_POINTTOPOINT_CLUSTERID  3

將宏定義SAMPLEAPP_MAX_CLUSTERS的值更改為3

#define SAMPLEAPP_MAX_CLUSTERS       3

找到函數(shù)uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ),在周期性事件SAMPLEAPP_SEND_PERIODIC_MSG_EVT中調(diào)用點對點通信發(fā)送函數(shù)妆棒,同時注釋掉原有的SampleApp_SendPeriodicMessage();函數(shù):

if ( events & SAMPLEAPP_SEND_PERIODIC_MSG_EVT )
  {
    // Send the periodic message
    //SampleApp_SendPeriodicMessage();//周期廣播發(fā)送函數(shù)
    SampleApp_SendPeriodicMessage();  //點對點通信發(fā)送函數(shù)

    // Setup to send message again in normal period (+ a little jitter)
    osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
        (SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) );

    // return unprocessed events
    return (events ^ SAMPLEAPP_SEND_PERIODIC_MSG_EVT);
  }
  1. 修改消息接收ID
      在函數(shù)void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )中澡腾,修改clusterId,將原有周期發(fā)送的SAMPLEAPP_PERIODIC_CLUSTERID更改為點對點通信的SAMPLEAPP_POINTTOPOINT_CLUSTERID糕珊,然后將接收的數(shù)據(jù)打印到串口动分,具體代碼如下:
void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )
{
    uint16 flashTime;
    
    switch ( pkt->clusterId )
    {
        //case SAMPLEAPP_PERIODIC_CLUSTERID:
        //break;
    case SAMPLEAPP_POINTTOPOINT_CLUSTERID:
        HalUARTWrite(0,"Point_To_Point Communication\n",29);
        //此處不要用sizeof計算字符串長度,否則會導(dǎo)致串口顯示的數(shù)據(jù)出錯或者不完整
        HalUARTWrite(0,pkt->cmd.Data,pkt->cmd.DataLength);//打印收到的數(shù)據(jù)
        HalUARTWrite(0,"\n",1);//換行
        break;
        
    case SAMPLEAPP_FLASH_CLUSTERID:
        flashTime = BUILD_UINT16(pkt->cmd.Data[1], pkt->cmd.Data[2] );
        HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) );
        break;
    }
}
  1. 注釋協(xié)調(diào)器的周期事件
      協(xié)調(diào)器不需要周期性發(fā)送數(shù)據(jù)红选,在函數(shù)uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )注釋掉協(xié)調(diào)器的周期性事件
if ( //(SampleApp_NwkState == DEV_ZB_COORD)||//協(xié)調(diào)器的周期性事件
               (SampleApp_NwkState == DEV_ROUTER)
              || (SampleApp_NwkState == DEV_END_DEVICE) )
          {
            // Start sending the periodic message in a regular interval.
            osal_start_timerEx( SampleApp_TaskID,
                              SAMPLEAPP_SEND_PERIODIC_MSG_EVT,
                              SAMPLEAPP_SEND_PERIODIC_MSG_TIMEOUT );
          }
  1. 上電測試
     將修改后的程序分別以CoordinatorEB澜公、RouterEBEndDeviceEB的方式分別下載到三個節(jié)點中,并通過串口與PC相連喇肋,在串口中查看接收到的信息如下圖坟乾。
串口測試結(jié)果


  注意一下定義的區(qū)別和用法:

類型 定義
整型數(shù)組 int num[10]={0,1,2,3,4,5,6,7,8,9};
字符數(shù)組 char ch[10]={'0','1','2','3','4','5','6','7','8','9'};
字符串 char string[10]="0123456789";
字符串 char string[10]={"0123456789"};
字符串?dāng)?shù)組 char *week[10]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市苟蹈,隨后出現(xiàn)的幾起案子糊渊,更是在濱河造成了極大的恐慌,老刑警劉巖慧脱,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渺绒,死亡現(xiàn)場離奇詭異,居然都是意外死亡菱鸥,警方通過查閱死者的電腦和手機宗兼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氮采,“玉大人殷绍,你說我怎么就攤上這事∪的” “怎么了主到?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長躯概。 經(jīng)常有香客問我登钥,道長,這世上最難降的妖魔是什么娶靡? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任牧牢,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘塔鳍。我一直安慰自己伯铣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布轮纫。 她就那樣靜靜地躺著腔寡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜡感。 梳的紋絲不亂的頭發(fā)上蹬蚁,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機與錄音郑兴,去河邊找鬼犀斋。 笑死,一個胖子當(dāng)著我的面吹牛情连,可吹牛的內(nèi)容都是我干的叽粹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼却舀,長吁一口氣:“原來是場噩夢啊……” “哼虫几!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挽拔,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辆脸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后螃诅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啡氢,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年术裸,在試婚紗的時候發(fā)現(xiàn)自己被綠了倘是。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡袭艺,死狀恐怖搀崭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猾编,我是刑警寧澤瘤睹,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站答倡,受9級特大地震影響默蚌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜苇羡,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧设江,春花似錦锦茁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歼捏,卻和暖如春稿存,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞳秽。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工瓣履, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人练俐。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓袖迎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腺晾。 傳聞我的和親對象是個殘疾皇子燕锥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容